Batterie Funk Windmesser, Barometer über Arduino

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

Benutzeravatar
Helikiller
Beiträge: 143
Registriert: 10.09.2014, 06:53
Wohnort: 21438 Brackel

Batterie Funk Windmesser, Barometer über Arduino

Beitrag von Helikiller » 12.06.2015, 17:39

Anbei ein paar Fotos:
Dateianhänge
Platine.jpg
Platine
Aussenstation.jpg
Aussenstation
LG Helikiller
Meine CCU2; 605 Kanäle in 180 Geräten + RaspiMatic P3 98 Kanäle in 31 Geräten

Benutzeravatar
Helikiller
Beiträge: 143
Registriert: 10.09.2014, 06:53
Wohnort: 21438 Brackel

Re: Batterie Funk Windmesser, Barometer über Arduino

Beitrag von Helikiller » 26.06.2015, 18:30

So jetzt habe ich die Verbindung der nRF24L01+ hinbekommen.
Aber leider wird in meinem Fall das Licht in LUX nicht übertragen. Hat jemand eine Idee oder Hinweis? :roll:

Hier der Code für den "Empfaenger_105_MEGA2560"

Code: Alles auswählen

// Versionsbezeichner "homeduino_21.ino / Stand: 2014.09.13";
// fuer Arduino Mega 2560 mit Arduino 1.6.4
// Verfasser: Eugen Stall
// diese Software erlaubt die Steuerung der Pinfunktionen mit einfachen Browserbefehlen
// verwendete Quellen fuer libraires und Programme siehe Beschreibung und Erläuterungen im Quelltext
// die aktuellste Version ist immer hier:
// http://www.stall.biz/?project=homeduino-der-universelle-lanwlan-arduino-fur-die-hausautomation
// Sytemvariablen anlegen:
// Arduino_105_IP = String
// Arduino_105_wind_max = Zahl
// Arduino_105_wind_avg = Zahl
// Arduino_105_barometer = Zahl
// Arduino_105_battery = Zahl
// Arduino_105_solar = Zahl
// Arduino_105_light = Zahl
////////////////////////////////////////////////////////////////////////

#include <Ethernet.h>
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"
#include <Time.h>
#include <TimeAlarms.h>

////////////////////////////////////////////////////////////////////////
//Netzwerk-Konfiguration muss individuell hier eingegeben werden
byte ip[] = {192, 168, 178, 105}; //das ist die IP des Arduino //<<user-eingabe<<
byte mac[] = { 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xC5 }; //nur 1x im Netz //<<user-eingabe<<
byte ccu[] = {192, 168, 178, 109 }; //das ist die IP der CCU //<<user-eingabe<<
byte gateway[] = { 192, 168, 178, 99 }; // Gateway
byte dnsserver[] = { 192, 168, 178, 99 }; // DNS Server
byte subnet[] = { 255, 255, 255, 0 }; // Subnet

String hm_systemvariable = "Arduino_105_";

int RETRY = 5; // Anzahl versuche etwas an die CCU zu senden.
EthernetClient client;

RF24 radio (3, 2);
const int num_reps = 100;
uint8_t PIPE_NAME[7] = {"NET"};

unsigned long delta_time = 3600000; // jede Stunde werden alle Inputs aktualisiert
unsigned long delta_tx = 500;  //in ms, minimaler Abstand der Telegramme an die CCU
unsigned long next_tx = 0;
boolean maxTimeExpired = false;

float deltaT = 0.2;
float deltaH = 1;

int data[12];
int datum;

float temp_tur;
String I;
char status;
double T, P, p0, a;

float last_lux_value;
double last_baro_value;
double last_baroT_value;
float airPressure;
float deltaAirPress = 1;
float windSpeed;
float deltaWindSpeed = 2.5;
float batteryState;
float deltaBatteryState = 0.1;
float solarState;
float deltaSolarState = 0.1;
int luminosity;
int deltaLuminosityPercent = 5;

void setup()
{
  Serial.begin(57600); //Pins 10,11,12 & 13 fuer ethernet shield verwendet
  printf_begin();
  setTime(1, 1, 1, 1, 1, 1); // set any dummy Time... (01:01:01 1.1.2001)
  Serial.println("Starting Setup");
  Ethernet.begin(mac, ip, dnsserver, gateway, subnet);
  delay(1000);
  Serial.println("Ethernet Setup done");
  int result = client.connect(ccu, 8181);
  Serial.print("Connected to CCU with Statuscode:");
  Serial.println(result);
  IPAddress myIp = Ethernet.localIP();
  Serial.print("LocalIP:");
  Serial.println(Ethernet.localIP());
  char myIpString[24];  //IP auslesen
  sprintf(myIpString, "%d.%d.%d.%d", myIp[0], myIp[1], myIp[2], myIp[3]);
  I = myIpString;
  // Update der IP in Homematic, dann sieht man am Timestamp die Startzeit des Arduino
  client.println("GET /xy.exe?antwort=dom.GetObject('" + hm_systemvariable + "IP" + "').State('" + I + "')");
  client.println();
  delay(5000);
  Serial.println("Starting Radio Setup");
  radio.begin();
  radio.openReadingPipe(1, PIPE_NAME);
  radio.startListening();
  radio.enableDynamicPayloads();
  radio.setDataRate(RF24_250KBPS);
  radio.printDetails();
  Serial.println("NET Initialisiert");
  Serial.println("57600 BAUD Initialisiert");
  delay(3000);
  Alarm.timerRepeat(60 * 60, UpdateAll); // Ein volles Update alle 60 min.
  // client.println();
}

void loop()
{
  // Hier sind keine Digitalen Trigger vorhanden, also koennen die Eingaenge einfach alle 30 Secs abgefragt werden.
  checkRadio();
  maxTimeExpired = false;
  for (int i = 0; i < 60; i++) {
    Alarm.delay(3000);
    checkRadio();
  }
}

void UpdateAll() {
  maxTimeExpired = true;
}

boolean set_sysvar(String befehl) {
  for (int j = 0; j < RETRY; j++) {
    Ethernet.begin(mac, ip);
    while (millis() < next_tx) {
      delay(1000);
    } //warten bis time > next_tx oder timeout
    int result = 1;
    next_tx = millis() + delta_tx;
    if (!client.connected()) {
      Serial.print("Stopping closed Connection.");
      Serial.print("LocalIP:");
      Serial.print(Ethernet.localIP());
      client.flush();
      client.stop();
      Serial.println(". Initiating Connection.");
      result = client.connect(ccu, 8181);
    }
    if (result == 1 || client.connected())
    {
      Serial.print("Connected. Command = ");
      Serial.print(befehl);
      client.println(befehl);
      client.println();
      Serial.println(". Disconnecting...");
      client.stop();
      return true;
    } else {
      Serial.print("Problem Connecting. Got Error Code:");
      Serial.println(result);
    }
  }
  return false;
}

String constructCommand(String name, String value) {
  return "GET /xy.exe?antwort=dom.GetObject('" + hm_systemvariable + name + "').State(" + value + ")";
}

void checkRadio() {
  if (!radio.available())
    return;
  uint16_t data[6];
  radio.read(&data, 12);
  float maxWind = float(data[0]) / 12;
  float avgWind = float(data[1]) / 12;
  float pressure = float(data[2]) / 12;
  float battery = float(data[3]) / 12;
  float solar = float(data[4]) / 12;
  uint16_t light = data[5];
  Serial.print("Maximaler Wind: ");
  Serial.print(maxWind);
  Serial.print(" km/h / ");
  Serial.print("Durchschnittlicher Wind: ");
  Serial.print(avgWind);
  Serial.print(" km/h / Light: ");
  Serial.print(light);
  Serial.print(" lux / Baro: ");
  Serial.print(pressure, 2);
  Serial.println(" hPa");
  Serial.print("Batteriespannung: ");
  Serial.print(battery);
  Serial.print(" V / ");
  Serial.print("Solarspannung: ");
  Serial.print(solar);
  Serial.println(" V");
  set_sysvar(constructCommand("wind_max", String(maxWind, 1)));
  if (battery > 0.0) {
    set_sysvar(constructCommand("wind_avg", String(avgWind, 1)));
    set_sysvar(constructCommand("barometer", String(pressure, 1)));
    set_sysvar(constructCommand("battery", String(battery, 1)));
    set_sysvar(constructCommand("light", String(light, 1)));
    set_sysvar(constructCommand("solar", String(solar, 1)));
  }
}
Dateianhänge
Empfang.jpg
Serieller Monitor
LG Helikiller
Meine CCU2; 605 Kanäle in 180 Geräten + RaspiMatic P3 98 Kanäle in 31 Geräten

dondaik
Beiträge: 12886
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1584 Mal
Danksagung erhalten: 221 Mal

Re: Batterie Funk Windmesser, Barometer über Arduino

Beitrag von dondaik » 26.06.2015, 19:23

prüfe mal die "get" - zeilen ggf fehlen da anführungsseichen...?? ( noch mal mit dem original vergleichen ;-) )
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

Benutzeravatar
Helikiller
Beiträge: 143
Registriert: 10.09.2014, 06:53
Wohnort: 21438 Brackel

Re: Batterie Funk Windmesser, Barometer über Arduino

Beitrag von Helikiller » 26.06.2015, 19:52

dondaik hat geschrieben:prüfe mal die "get" - zeilen ggf fehlen da anführungsseichen...?? ( noch mal mit dem original vergleichen ;-) )
Ich habe folgendes:

Code: Alles auswählen

String constructCommand(String name, String value) {
  return "GET /xy.exe?antwort=dom.GetObject('" + hm_systemvariable + name + "').State(" + value + ")";
}
LG Helikiller
Meine CCU2; 605 Kanäle in 180 Geräten + RaspiMatic P3 98 Kanäle in 31 Geräten

spot
Beiträge: 170
Registriert: 22.11.2013, 10:26
Wohnort: Schweiz

Re: Batterie Funk Windmesser, Barometer über Arduino

Beitrag von spot » 11.08.2015, 10:34

Kurzes Feedback von meiner Installation.

Ich habe den Code etwas angepasst, da ich immer mal wieder einen eingefrorenen Arduino hatte. Ich denke das Problem lag bei einer nicht 100% stabilen Stromversorgung. Aus diesem Grund habe ich in die Zu- und Ableitung zum DC/DC WAndler noch einen 100uF Elko eingebaut. Zudem initialisiere ich das NRF Modul bei jedem Aufruf neu, nur um sicher zu gehen.

Weiter hatte ich eine Kollision mit der NRF Frequenz und meinem WLAN. Default mässig senden diese auf Kanal 76 (RF24 Lib). Der Kanal ist 2'400 + Kanal in MHz. Somit ist Kanal 76 in der Nähe von WLAN Kanal 11-13 bei 2.4GHz WLAN vor allem dann ein Problem, wenn auch noch mit grosser Bandbreite (40MHz) gesendet wird. Bei mir stören die sich jeweils gegenseiteitig. Kanal 11 ist bei 2462 MHz bei 40MHz Bandbreite gibt es noch jeweils 20MHz drunter und drüber somit landet Kanal 76 vom NRF sauber in der WLAN Übertragung (NRF : 2476MHz / WLAN bei Kanal 11 & 40MHz Bandbreite : 2442 - 2482 MHz).

Zudem habe ich dem NRF am SMA Anschluss eine "richtige" WLAN Antenne verpasst. Nun läuft alles wieder problemlos.

Update des Codes erfolgt bald.
CCU-2, Historian und ioBroker auf Odroid HC
11x HM-CC-RT-DN, 5x HM-TC-IT-WM-W-EU, 1x HM-WDS10-TH-O, 1x HM-WDS40-TH-I, 3x HM-Sec-SC-2, 2x HM-LC-Bl1-FM, 3x HM-LC-Sw2-FM, 2x HM-LC-SW1-FM, 1x HM-Sec-RHS

Benutzeravatar
mosmutzel
Beiträge: 110
Registriert: 30.03.2012, 06:51
Wohnort: im Süden Berlins

Re: Batterie Funk Windmesser, Barometer über Arduino

Beitrag von mosmutzel » 19.08.2015, 21:01

Hallo,
ich finde das Projekt so klasse das ich es glatt nachgebaut habe.
Für den Aussensensor kommt zum Einsatz
1x Arduino ProMini 3,3V
http://www.aliexpress.com/item/1pcs-lot ... 51276.html

1x BMP 180 Barometer
http://www.aliexpress.com/item/The-new- ... 25012.html

1x Regensensor
http://www.aliexpress.com/item/3-3-5V-R ... 26481.html

1x Step Up Converter
http://www.aliexpress.com/item/Ultra-sm ... 09053.html

1x NRF24L01+ 2,4Ghz Transceiver
http://www.aliexpress.com/item/4pcs-NRF ... 80205.html

Wenn die ersten Sensoren / die Funkverbindung zum ArduinoMega steht werde ich um folgende Sensoren erweitern:
Regenmenge, Wind, Windrichtung. Dazu bin ich auf diesen Ersatzsensor gestoßen:
http://www.froggit.de/product_info.php/ ... solar.html

Nun zu meinem Problemchen:

Ich bin aber gerade am Verzweifeln da das Sketch für den ProMini nicht Kompiliert wird.
Ich erhalte folgende Fehlermeldung:

Code: Alles auswählen

Aussensensor.ino: In function 'void setup()':
Aussensensor.ino:121:34: error: invalid conversion from 'uint8_t* {aka unsigned char*}' to 'uint64_t {aka long long unsigned int}' [-fpermissive]
In file included from Aussensensor.ino:24:0:
H:\Documents\Arduino\libraries\RF24-master/RF24.h:324:8: error:   initializing argument 1 of 'void RF24::openWritingPipe(uint64_t)' [-fpermissive]
   void openWritingPipe(uint64_t address);
        ^
Aussensensor.ino: In function 'void transmit(float, float, float, uint16_t, float, float)':
Aussensensor.ino:269:34: error: invalid conversion from 'uint8_t* {aka unsigned char*}' to 'uint64_t {aka long long unsigned int}' [-fpermissive]
In file included from Aussensensor.ino:24:0:
H:\Documents\Arduino\libraries\RF24-master/RF24.h:324:8: error:   initializing argument 1 of 'void RF24::openWritingPipe(uint64_t)' [-fpermissive]
   void openWritingPipe(uint64_t address);
        ^
Fehler beim Kompilieren.
Die RF24 Library für den NRF24L01+ habe ich hier her: https://github.com/maniacbug/RF24

Ist das die Richtige Library?
Vlt. kann mir jemand ein komplettes Sketch inkl Library's zur verfügung stellen.

Danke Gruß
Rene

Benutzeravatar
Helikiller
Beiträge: 143
Registriert: 10.09.2014, 06:53
Wohnort: 21438 Brackel

Re: Batterie Funk Windmesser, Barometer über Arduino

Beitrag von Helikiller » 20.08.2015, 12:06

Hallo Rene!

Ich habe folgende Lib verwendet.

LG Helikiller
Dateianhänge
RF24-master.zip
Library
(203.33 KiB) 169-mal heruntergeladen

Benutzeravatar
mosmutzel
Beiträge: 110
Registriert: 30.03.2012, 06:51
Wohnort: im Süden Berlins

Re: Batterie Funk Windmesser, Barometer über Arduino

Beitrag von mosmutzel » 21.08.2015, 20:08

Hi,
leider brachte die Library auch keinen Erfolg :(

Welches Arduino IDE verwendet Ihr? ich habe 1.6.4 derzeit und verwende den Code von der Startseite.
Komischer Weise läuft das für den Homedino auch nicht. gleiche Fehlermeldung.
kann mir jemand mal bitte ein komplettes Sketch inkl. Library's zur Verfügung stellen.

Vielen Dank :)
Gruß
Rene

dondaik
Beiträge: 12886
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1584 Mal
Danksagung erhalten: 221 Mal

Re: Batterie Funk Windmesser, Barometer über Arduino

Beitrag von dondaik » 21.08.2015, 21:02

das thema: sketsch wird nicht übersetzt hatte ich auch mal bzw kommt jetzt ab und an auch.. es hilft meist ide neu starten um die fehlermeldungen verschwinden zu lassen.. denke es liegt am java. ansonsten ist meine vermutung das sich bei mir sonderzeichen eingeschlichen haben welche ärger machen :-( da wollte auch das sketsch von eugen nicht übersetzt werden - mit seinen libs ...
ach: und mal die temp-ordner leeren.
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

mod
Beiträge: 1
Registriert: 08.01.2016, 15:25

Re: Batterie Funk Windmesser, Barometer über Arduino

Beitrag von mod » 08.01.2016, 15:35

Hi,

ich bin auf das Thema gestoßen, als ich nach Arduino und Windmessung gegoogelt habe.
Bin selber gerade dabei mir eine Wetterstation mit allen möglichen Sensoren zu basteln.
Was mich konkret interessieren würde:
Helikiller hat auf dem ersten Foto einen Li-ion Charger (TP4056) und am 2. Foto sieht man glaub ich eine Solarzelle.
Da ich meine Wetterstation ebenfalls mit diesen Charger + einer Li-ion Zelle austatten möchte, die über Solar geladen wird, würde mich der Aufbau dahinter interessieren.
Wie sind der Akku und die "Last" verkabelt? Ich hab schon viele Anleitungen gesehen, die den Charge + Akku + Last einfach parallel verkabeln. Andererseits hab ich gelesen, dass das für den Akku eher nicht so toll ist.
Kann mir vielleicht wer weiterhelfen? Ist eine parallele Verkabelung bei niedrigen Strömen evtl. doch gar kein so großes Problem?

Vielen Dank schon mal - würd mich echt freuen :)

Antworten

Zurück zu „Projektvorstellungen“