Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
OK, dann stelle ich es am Abend mal hier ein. Wie gesagt muss aber auf die Devices angepasst werden. Denke ich einmal, dass diese bei jeden anders sind.
Ist aber nicht viel Aufwand.
Ich hätte grundsätzlich auch Interesse. Habe noch von meiner alten Wohnung ein Netatmo-Set (Innen- und Aussenstation, ohne Regen). Da ich jetzt im neuen Haus viele Temp/Feuchte-Sensoren im Haus verbaut habe, ist Netatmo für mich nicht mehr so wichtig. Aber ich habs ja, warum nicht noch irgendwie einsetzen.
define('SCOPE', 'read_station'); define('TOKEN_URL', 'https://api.netatmo.net/oauth2/token'); define('DEVICELIST_URL', 'https://api.netatmo.net/api/devicelist'); define('DEBUG', 1); //0=Debug Modus Aus, 1=Debug Modus Ein
//Verbindung zu Netatmo aufbauen, Access Token holen und URL mit Access Token abfragen if (CLIENT_ID == '' || CLIENT_SECRET == '' || USERNAME == '' || PASSWORD == '') { fwrite(STDERR, "CLIENT_ID, CLIENT_SECRET, USERNAME, PASSWORD, darf nicht leer sein.\n"); exit(1); }
if (!$response || empty($response_json['access_token'])) { fwrite(STDERR, "Der access_token kann nicht bezogen werden. Bitte überprüfe Benutzername und Passwort.\n"); exit(1); }
// Device List abfragen $access_token = $response_json['access_token']; $device_list = json_decode(file_get_contents(DEVICELIST_URL . '?access_token=' . $access_token)); if (!$device_list || sizeof($device_list->body->devices) == 0) { fwrite(STDERR, "Es wurde kein Gerät gefunden.\n"); exit(1); }
if (sizeof($device_list->body->modules) == 0 || empty($device_list->body->modules[0]->_id)) { fwrite(STDERR, "Es wurde kein Aussengerät gefunden.\n"); exit(1); }
function objectToArray($d) { if (is_object($d)) { // Gets the properties of the given object // with get_object_vars function $d = get_object_vars($d); }
if (is_array($d)) { /* * Return array converted to object * Using __FUNCTION__ (Magic constant) * for recursive call */ return array_map(__FUNCTION__, $d); } else { // Return array return $d; } }
Uns so schaut dann der LBS aus.
Hab ich aber nur zum Testen für mich gemacht. Die Ausgänge müssen dann an die vorhandenen Devices angepasst werden. Momentan läuft der LBS als Dämon.
Eventuell wäre es besser mit einen Trigger abzufragen. Soll ja auch nur mal ein Vorschlag sein für die es benötigen.
Der Baustein wird automatisch gestartet, sobald EDOMI gestartet wird (E1 hat den Initialwert 1). Das EXEC-Script wird dann einmalig(!) gestartet und läuft in einer Schleife solange, bis EDOMI beendet oder neugestartet wird.
Der Baustein erhält nicht(!) den Status 1 (LBS "läuft"), um Ressourcen zu sparen: Der [LBS]-Abschnitt dient nur dazu, das EXEC-Script einmalig(!) zu starten. ###[/HELP]###
###[LBS]### <? function LB_LBSID($id) { if ($E=getLogicEingangDataAll($id)) {
if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
if (getLogicElementVar($id,1)!=1) { //dieses Konstrukt stellt sicher, dass das EXEC-Script nur einmal gestartet wird setLogicElementVar($id,1,1); callLogicFunctionExec(LBSID,$id); }
define('SCOPE', 'read_station'); define('TOKEN_URL', 'https://api.netatmo.net/oauth2/token'); define('DEVICELIST_URL', 'https://api.netatmo.net/api/devicelist'); define('DEBUG', 1); //0=Debug Modus Aus, 1=Debug Modus Ein } while(getSysInfo(1)>=1) { //Hauptschleife (wird beim Beenden oder Neustart von EDOMI verlassen)
if (!$device_list || sizeof($device_list->body->devices) == 0) { fwrite(STDERR, "Es wurde kein Gerät gefunden.\n"); exit(1); }
if (sizeof($device_list->body->modules) == 0 || empty($device_list->body->modules[0]->_id)) { fwrite(STDERR, "Es wurde kein Aussengerät gefunden.\n"); exit(1); }
usleep(1000000*60); //CPU-Last verteilen (die Länge der Pause sollte je nach Bedarf angepasst werden - je länger, desto ressourcenschonender) }
sql_disconnect(); function LB_LBSID_DEBUG($id,$a) {writeToTraceLog(0,true,"LBSLBSID($id): ".$a);}
function objectToArray($d) { if (is_object($d)) { // Gets the properties of the given object // with get_object_vars function $d = get_object_vars($d); }
if (is_array($d)) { /* * Return array converted to object * Using __FUNCTION__ (Magic constant) * for recursive call */ return array_map(__FUNCTION__, $d); } else { // Return array return $d; } } ?> ###[/EXEC]###
Die Php Classen vom Download in den Ornder /usr/local/edomi/main/include/php kopieren.
Für weitere Module Innen/Wind und Regen werde ich einen Extra Bausein erstellen.
###[HELP]### NETATMO Baustein für Station und Modul
Diese Dateien mussen im Ordner /usr/local/edomi/main/include/php liegen. -> Ordner /Netatmo/... -> Utils.php
Der NETATMO Baustein wird automatisch gestartet, sobald EDOMI gestartet wird (E1 hat den Initialwert 1). E1: Signal 1 = Startet Baustein (Dämon) E2: Name Station E3: Name Modul E4: CLIENT ID E5: CLIENT SECRET E6: Username E7: Passwort E8: Debug
A1: Name Station A2: Temperatur A3: min Temperatur A4: min Temperarur Uhrzeit A5: max Temperatur A6: max Temperarur Uhrzeit A7: Temperatur trend (stable / up / down) A8: Humidity A9: Pressure A10: Pressure trend (stable / up / down) A11: CO2 A12: Noise A13: Location A14: Altitude A15: Longitude (Längengrad) A16: Latitude (Breitengrad) A17: ##Modul## - ab hier beginnt die Ausgabe für das Aussenmodul A18: Name Modul A19: Temperatur A20: min Temperatur A21: min Temperarur Uhrzeit A22: max Temperatur A23: max Temperarur Uhrzeit A24: Temperatur trend (stable / up / down) A25: Humidity A26: Battery (full, high, medium, low, very low) A27: WiFi
###[HELP]###
NETATMO Baustein für Station und Modul
Diese Dateien mussen im Ordner /usr/local/edomi/main/include/php liegen.
-> Ordner /Netatmo/...
-> Utils.php
Der NETATMO Baustein wird automatisch gestartet, sobald EDOMI gestartet wird (E1 hat den Initialwert 1).
E1: Signal 1 = Startet Baustein (Dämon)
E2: CLIENT ID
E3: CLIENT SECRET
E4: Username
E5: Passwort
E6: Debug
A1: ##Wind Sensor## (Keine Ausgabe)
A2: Name Modul
A3: Wind Richtung
A4: Wind txt NO (120°)
A5: Wind Stärke
A6: Böen Richtung
A7: Böen Stärke
A8: max Wind Uhrzeit
A9: max Wind Richtung
A10: max Wind Stärke
A11: Battery (full, high, medium, low, very low)
A12: WiFi (Signalstärke)
A13: ##Rain Gauger## (keine Ausgabe)
A14: Name Modul
A15: Regen
A16: Regen /24h
A17: Regen /1h
A18: Battery (full, high, medium, low, very low)
A19: WiFi (Signalstärke)
Reinhard, danke noch für diesen LBS.
Ich habe nun meine Netatmo Wetterstation ausgegraben und wieder in Betrieb genommen. Jetzt würde ich gerne dein LBS testen. Leider habe ich keine Ahnung, wie ich zur CLIENT ID und dem CLIENT SECRET komme? Wo definiert man dies bzw. kann es auslesen?
Ich habe nur ein Username und Passwort für Netatmo Webseite (früher musste dies glaub bei der App nicht mal eingegeben werden).
Hast du eine kleine Installationanleitung für dein LBS?
OK, habs glaub rausgefunden. Man muss einfach auf der http://dev.netatmo.com Webseite einen "Antrag" stellen. Einfach ein Name und eine Beschreibung für die "App" angeben (habe hier einfach was von Hausautomation erwähnt) und fertig. Die CLIENT ID und das SECRET werden sofort angezeigt.
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar