NetAtmo Wetterdaten HOWTO

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Fonzo
Beiträge: 6722
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 479 Mal

Re: NetAtmo Wetterdaten HOWTO

Beitrag von Fonzo » 20.11.2022, 14:21

ibot hat geschrieben:
20.11.2022, 14:12
Ach Fonzo, bei mir ist weder Client ID noch Client Secret öffentlich geteilt.
Du scheinst die Sachen, die Du selbst nutzt nicht zu kennen. Was ist ein teilen von Client ID und Client Secret auf Github anderes als dies öffentlich jedem verfügbar und einsehbar zu machen?

ibot
Beiträge: 46
Registriert: 17.01.2020, 09:04
System: CCU
Hat sich bedankt: 13 Mal
Danksagung erhalten: 3 Mal

Re: NetAtmo Wetterdaten HOWTO

Beitrag von ibot » 20.11.2022, 14:33

Fonzo hat geschrieben:
20.11.2022, 14:21
Du scheinst die Sachen, die Du selbst nutzt nicht zu kennen. Was ist ein teilen von Client ID und Client Secret auf Github anderes als dies öffentlich jedem verfügbar und einsehbar zu machen?
Ok du Superheld, wenn du sagst ich teile Client ID und Secret öffentlich, dann poste doch meine beiden Zeichenketten einfach hier.
Kannst nicht, wa :lol:

Du hast einfach keine Ahnung - lass es gut sein hier was zu verteufeln was tausende User nutzen (und du einfach nicht kennst / kannst).

ibot hat geschrieben:
20.11.2022, 14:12
Germa hat geschrieben:
20.11.2022, 12:27
Kostenlos haben wir auch keine Lösung gefunden, aber "kostenneutral", da wir schon seit Jahren bei Strato das Webstarter Paket haben mit eigener domain für 24 € pro Jahr.
Von dort aus haben wir mit einem php Script den Zugriff und die Abfrage auf den Netatmo Server realisiert. Mit einem kleinen Tipp eines Netatmo Mitarbeiters hat letztlich die regelmäßige automatische Abfrage aller Daten funktioniert und läuft jetzt seit 6 Wochen stabil.
Richtig coole Lösung, die Details würden mich da auch interessieren, Germa!
Aber lass das ja nicht Fonzo lesen, da sind die Client ID und das Client Secret ja 3rd Party sogar im bösen Internet und verstößt gegen Netatmo AGBs :lol:

Dazu hast du dann gar keine Meinung obwohl das ja noch viel Böser ist? :twisted:

Fonzo
Beiträge: 6722
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 479 Mal

Re: NetAtmo Wetterdaten HOWTO

Beitrag von Fonzo » 20.11.2022, 14:50

ibot hat geschrieben:
20.11.2022, 14:33
wenn du sagst ich teile Client ID und Secret öffentlich
Das sage ich nicht nur, das kann man auf Github öffentlich einsehen was die Default Client ID und das Default Client Secret ist.
ibot hat geschrieben:
20.11.2022, 14:33
Du hast einfach keine Ahnung
Anscheinend hast Du Dich noch nicht mit OAuth im Detail auseinander gesetzt. Default Client ID und das Default Client Secret im Internet zu veröffentlichen ist zumindest nicht im Sinne der Sicherheit die OAuth bieten soll und auch nicht entsprechend der Lizenzbedingungen des Anbieters.
ibot hat geschrieben:
20.11.2022, 14:33
lass es gut sein hier was zu verteufeln was tausende User nutzen
Was Du persönlich machst ist mir reichlich egal, Du kannst Dich gerne auch in der Innenstadt ins Halteverbot stellen, weil es vielleicht andere dies auch so machen um Dir ein Parkschein zu sparen. Erwähnen das dort ein Halteverbot ist, in dem Du stehst, wenn Du das anderen empfiehlst kann man wohl dennoch.
ibot hat geschrieben:
20.11.2022, 14:33
Dazu hast du dann gar keine Meinung obwohl das ja noch viel Böser ist?
Du hast anscheinend immer noch nicht verstanden um was es geht. Bei OAuth2 gibt es logischerweise immer einen Server auf den die Redirect URL verweist. Der Unterschied ist nur das die Daten wie Client ID und Client Secret, die auf dem Server liegen eben außer dem Lizenznehmer niemand kennt, zumindest nicht der Nutzer. Es wird lediglich der Token an den User vom Server weitergereicht. Wenn jemand das entsprechend OAuth2 baut, die Client ID und Client Secret geheim bleiben und lediglich den Token an den User übergibt, was soll daran dann böse sein? Das machen alle anderen Anbieter auch so, so ist das nun mal bei OAuth2 definiert.

ibot
Beiträge: 46
Registriert: 17.01.2020, 09:04
System: CCU
Hat sich bedankt: 13 Mal
Danksagung erhalten: 3 Mal

Re: NetAtmo Wetterdaten HOWTO

Beitrag von ibot » 20.11.2022, 15:36

Fonzo hat geschrieben:
20.11.2022, 14:21
Was ist ein teilen von Client ID und Client Secret auf Github anderes als dies öffentlich jedem verfügbar und einsehbar zu machen?
Fonzo hat geschrieben:
20.11.2022, 14:50
ibot hat geschrieben:
20.11.2022, 14:33
wenn du sagst ich teile Client ID und Secret öffentlich
Das sage ich nicht nur, das kann man auf Github öffentlich einsehen was die Default Client ID und das Default Client Secret ist.
Lassen wir das Fonzo, da kommen wir zwei nicht überein.

Zu findest bei meiner beschriebenen Lösung weder Client ID noch Secret öffentlich. Und nur weil ein Quellcode öffentlich ist, heißt das nicht, dass man den persönlichen Inhalt, der auf einer lokalen Lösung liegt, auch öffentlich ist. Da ist deine Aussage absolut falsch, man würde gegen AGBs verstossen.

Beweis mir das Gegenteil und poste meine Daten, andernfalls werde ich auf dein geschwrubl nicht mehr eingehen.

Fonzo
Beiträge: 6722
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 479 Mal

Re: NetAtmo Wetterdaten HOWTO

Beitrag von Fonzo » 20.11.2022, 16:58

ibot hat geschrieben:
20.11.2022, 15:36
Lassen wir das Fonzo, da kommen wir zwei nicht überein.
Das ist wohl so und macht keinen Sinn das weiter zu vertiefen, wenn Du Dir zwar die Mühe machst eine Anleitung zu schreiben, aber im Detail nicht verstehst was der Code, den Du nutzt, eigentlich genau macht.
ibot hat geschrieben:
20.11.2022, 15:36
Zu findest bei meiner beschriebenen Lösung weder Client ID noch Secret öffentlich. Und nur weil ein Quellcode öffentlich ist, heißt das nicht, dass man den persönlichen Inhalt, der auf einer lokalen Lösung liegt, auch öffentlich ist. Da ist deine Aussage absolut falsch, man würde gegen AGBs verstossen.
Damit Du vielleicht verstehst was eigentlich passiert was Du in Deiner eigenen Anleitung schreibst:
ibot hat geschrieben: Diesen einfach installieren und eine Instanz anlegen.
Du lädst den Quellcode von Github auf Dein lokales System mit im Quellcode enthaltener Client ID und Client Secret. Diese Client ID und Client Secret soll nur dem Anbieter bekannt sein, der diese bei Legrand registriert hat, nicht dem Nutzer, der Du nun mal bist.
ibot hat geschrieben: Das neue an der Netatmo Version ab 2.x.x ist, dass diese authentifiziert werden muss. Dazu klickt man in der Konfiguration zunächst auf “Authenticate with Netatmo”
In dem Moment in dem Du auf “Authenticate with Netatmo” drückst, werden die im Quellcode hinterlegte Default Client ID und Client Secret genutzt um das System zu authentifizieren und die Maske zur Eingabe Deine persönlichen Nutzerdaten bei Netatmo zu öffnen.

Hier liegt der Fehler in der Authentifizierung über OAuth2 bzw. das was Legrand in den Nutzungsbedingungen ausschließt. Die Client ID und Client Secret müssen geheim gehalten werden und eben nur über den Server des Anbieter kommuniziert werden und nicht im Quellcode beim Nutzer, bzw. öffentlich im Internet einsehbar, enthalten sein.

Mit Kenntnis der öffentlichen Client ID und Client Secret kann sich jedes andere System als ioBroker gegenüber Legrand ausgeben und im Zweifelsfall die Nutzerdaten Abfragen und auf die API zugreifen. Der Hersteller, in dem Fall Legrand, will aber das genau nachvollziehbar ist welches System eine Authentifizierung anfordert, daher steht das auch so in den Nutzungsbedingungen.

ibot hat geschrieben:
20.11.2022, 15:36
Und nur weil ein Quellcode öffentlich ist, heißt das nicht, dass man den persönlichen Inhalt, der auf einer lokalen Lösung liegt, auch öffentlich ist.
Ich habe keine Ahnung was Du mit "persönlichen Inhalt" meinst. Die Client ID und Client Secret sind nicht Dein persönlicher Inhalt, sondern gehören dem Lizenznehmer, der diese bei Legrand registriert hat. Dieser hat diese geheimzuhalten, da gibt es auch nichts zu diskutieren, das ist bei OAuth2 wegen der Sicherheit üblich und steht auch so in den Nutzungsbedingungen von Legrand.
Deine persönlichen Daten sind Nutzername und Passwort, davon hat wieder der Anbieter (in dem Fall ioBroker) keine Kenntnis zu erhalten, das ist der Sinn von OAuth2. Wenn Du mit persönlicher Inhalt Deine Netatmo Daten aus den Geräten meinen solltest, das hat überhaupt nichts mit der Client ID und Client Secret zu tun, Du rufst die Daten direkt von der API über den Dir zugeteilen Token ab.

Germa
Beiträge: 169
Registriert: 15.12.2019, 12:26
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 19 Mal

Re: NetAtmo Wetterdaten HOWTO

Beitrag von Germa » 20.11.2022, 21:06

o.k., also, ich versuchs mal.

Voraussetzungen:
vorhandene client id, client secret und userdaten für Netatmo (wie ja auch schon bisher)
einen (eigenen) Web-Server, erreichbar mit einem http-request

Von Netatmo selber kommen dazu folgende Aussagen:
Using our API is totally free. It's just a switch of the user authentication process and it doesn't impact anything else
We have already given the solution : use the authorization_code grant type instead of the client_credentials grant type
All needed documentation to implement it is available here : https://dev.netatmo.com/apidocumentatio ... ation-code


und

This authentification method basically consist in asking the owner of the products for reading and writing rights. Rights are handled through "Scopes". Once the user has given you the permission you need, your server will receive a temporary code with which you will request an access and a refresh token. Once you have the access token, you will be able to retrieve data from the Netatmo API.

„This authentication flow takes place in 4 steps.
1. Your application calls the browser and redirects the user to Netatmo OAuth2 dialog
2. The user is prompted to authorize your application
3. The user is redirected to your application with an additional parameter
4. You retrieve the access token from the API using the additional parameter“


Die API (php-Version) haben wir hier herunterladen: https://github.com/Netatmo

Vorgehensweise:
req_netatmo.7z in ein Verzeichnis z.B. „Netatmo“ auf dem eigenen Server entpacken
--> bitte PN
(in diesem Verzeichnis ist die API drin, modifiziert im Unterverzeichnis req_netatmo\src\Netatmo\Clients und in der Datei ReqNetatmoData.php)

Die dort enthaltene Datei Config.php mit den eigenen client id, client secret und userdaten füllen

Dann kommt der erste Aufruf: http://<eigene_server>/Netatmo/ReqNetatmoData.php
Dieser Aufruf gibt eine URL zurück. Diese URL kopieren und im Browser aufrufen. Man wird damit zu Netatmo weitergeleitet, um ein einziges Mal „Yes, I accept“ zu klicken.
Nach dem Accept, wird man automatisch wieder zum eigenen Server zurückgeleitet (in der URL steht dann hinten dran die zurückgegebene ID, z.B. 1234356789).

Ab diesem Moment weitere Aufrufe aus dem Skript in der CCU folgendermaßen machen:
http://<eigene_server>/Netatmo/ReqNetatmoData.php?start=Start&state=1234356789

Jetzt braucht man keinen weiteren "Accept" mehr.

Man bekommt alle Datenfelder, die man unter „$wish_keys“ in der ReqNetatmoData.php konfiguriert hat. Je nach Bedarf und vorhandenen Netatmo-Geräten muss man sich das dort selbst gestalten.

Wenn man die aufzurufene URL mit &debug=1 ergänzt, also http://<eigene_server>/Netatmo/ReqNetatmoData.php?start=Start&state=1234356789&debug=1
erhält man eine Übersicht aller zur Verfügung stehenden Daten seiner Geräte:
API-Ergebnis.JPG


Skript in der CCU für den Empfang der Daten und das Schreiben in die definierten Systemvariablen:

Code: Alles auswählen

!Abfrage der Netatmodaten über eigenen webserver
string netatmoRequest ="/usr/local/addons/cuxd/curl -k -# http://<eigene_server>/Netatmo/NetatmoData7.php?start=Start&state=123456789";

dom.GetObject ("CUxD.CUX2801003:5.CMD_SETS").State(netatmoRequest);      !Der auszuführende Befehl wird festgelegt
dom.GetObject ("CUxD.CUX2801003:5.CMD_QUERY_RET").State(1);            !mit Wert 1 kann anschließend mit CMD_RETS der Output abgefragt werden
string netatmoData = dom.GetObject ("CUxD.CUX2801003:5.CMD_RETS").State().Trim();  !Mit der Abfrage von .State() des Datenpunktes CMD_RETS wird das Befehl ausgeführt und das Ergebnis zurückgeliefert
! Der String liefert Timestamp (als integer-Wert), WZ_Temp, WZ_CO2, WZ_Rel_Feuchte, WZ_Sonometer, Luftdruck, Luftdruck_Abs, Luftdruck_Trend, TempAussen_Netatmo,
! LuftfeuchteAussen_Netatmo, Regen_Aktuell_Netatmo, Regenmenge_1h_Netatmo, Regenmenge_24h_Netatmo, dummy, dummy, dummy, dummy, dummy, Regenmenge_Monat_Netatmo
!Beispiel: 1665505994, 21.8, 742, 54, 42, 1020, 996.7, stable, 11.4, 70, 0, 0, 0.1, 22.2, 709, 57, 1016.3, 41, 10

! Schreiben der gelieferten Werte in die entsprechenden Systemvariablen:
if ((netatmoData <> null) && (netatmoData.Length() > 0)) {
  string tin = netatmoData.StrValueByIndex(",",1);
  dom.GetObject("WZ_Temp").State(tin);

  string co2 = netatmoData.StrValueByIndex(",",2);
  dom.GetObject("WZ_CO2").State(co2);

  string huin = netatmoData.StrValueByIndex(",",3);
  dom.GetObject("WZ_Rel_Feuchte").State(huin);

  string noise = netatmoData.StrValueByIndex(",",4);
  dom.GetObject("WZ_Sonometer").State(noise);

  string press = netatmoData.StrValueByIndex(",",5);
  dom.GetObject("Luftdruck").State(press);

  string pressAbs = netatmoData.StrValueByIndex(",",6);
  dom.GetObject("Luftdruck_Abs").State(pressAbs);

  string trend = netatmoData.StrValueByIndex(",",7);
  dom.GetObject("Luftdruck_Trend").State(trend);

  string tout = netatmoData.StrValueByIndex(",",8);
  dom.GetObject("TempAussen_Netatmo").State(tout);

  string huout = netatmoData.StrValueByIndex(",",9);
  dom.GetObject("LuftfeuchteAussen_Netatmo").State(huout);

  string rainakt = netatmoData.StrValueByIndex(",",10);
  dom.GetObject("Regen_Aktuell_Netatmo").State(rainakt);

  string rain1h = netatmoData.StrValueByIndex(",",11);
  dom.GetObject("Regenmenge_1h_Netatmo").State(rain1h);

  string rain24h = netatmoData.StrValueByIndex(",",12);
  dom.GetObject("Regenmenge_24h_Netatmo").State(rain24h);

  string rain1M = netatmoData.StrValueByIndex(",",18);
  dom.GetObject("Regenmenge_Monat_Netatmo").State(rain1M);

}
Dateianhänge
req_netatmo.7z
(22.3 KiB) 145-mal heruntergeladen
Zuletzt geändert von Germa am 08.03.2023, 10:25, insgesamt 1-mal geändert.
wenn wir uns alle gegenseitig helfen, ist allen geholfen :wink:
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631

HEINEN_Eric
Beiträge: 74
Registriert: 06.09.2020, 11:47
System: CCU
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal

Re: NetAtmo Wetterdaten HOWTO

Beitrag von HEINEN_Eric » 20.11.2022, 22:47

Hi, ich bin zwar ein totaler Laie, hab aber mal schnell die Webstation auf meiner Synology konfiguriert, und die Schritte bis zur ersten Ausführung der ReqNetatmoData.php durchgeführt, und das hat schon mal alles geklappt :) Zuversicht kommt auf...
Alles weitere muss ich dann morgen mal ausprobieren. Da ich wie gesagt alle NetAtmo Sensoren habe, auch die max. Anzahl der Innenmodule, muss ich dann ja diese „$wish_keys“ anpassen? Gäbe es dazu irgendwo eine Anleitung?
Vielen Dank schon mal, bin echt super happy, dass dies zu einer gangbaren Lösung führen können sollte. :)
LG, Eric

Germa
Beiträge: 169
Registriert: 15.12.2019, 12:26
System: CCU
Hat sich bedankt: 30 Mal
Danksagung erhalten: 19 Mal

Re: NetAtmo Wetterdaten HOWTO

Beitrag von Germa » 21.11.2022, 09:08

das Auslesen der Werte ist "quick & dirty" gemacht, einfach nur für unseren Anwendungsfall (nur ein Sensor innen und außen plus Regenmesser), funktioniert aber auch bei vielen Geräten. In den wish keys im ReqNetatmoData.php wird angegeben, welche Werte man auslesen möchte (z.B. Temperature und Humidity, aber temp_trend nicht), dann werden von jedem vorhandenen Gerät diese beiden Werte ausgelesen und hintereinander in den Ausgabe-string gepackt. Wie die Namen sind, kann man sehen, wenn man den Befehl mit &debug=1 startet
wenn wir uns alle gegenseitig helfen, ist allen geholfen :wink:
_______________________________________________
CCU3 seit 2018, 103 Geräte, 202 Programme, 222 sysvar
Projekte: Wettersensor viewtopic.php?t=65631

wianle
Beiträge: 8
Registriert: 02.06.2022, 13:09
System: CCU
Hat sich bedankt: 5 Mal

Re: NetAtmo Wetterdaten HOWTO

Beitrag von wianle » 08.12.2022, 19:06

HEINEN_Eric hat geschrieben:
20.11.2022, 22:47
Hi, ich bin zwar ein totaler Laie, hab aber mal schnell die Webstation auf meiner Synology konfiguriert, und die Schritte bis zur ersten Ausführung der ReqNetatmoData.php durchgeführt, und das hat schon mal alles geklappt :) Zuversicht kommt auf...
Alles weitere muss ich dann morgen mal ausprobieren. Da ich wie gesagt alle NetAtmo Sensoren habe, auch die max. Anzahl der Innenmodule, muss ich dann ja diese „$wish_keys“ anpassen? Gäbe es dazu irgendwo eine Anleitung?
Vielen Dank schon mal, bin echt super happy, dass dies zu einer gangbaren Lösung führen können sollte. :)
LG, Eric
@HEINEN_Eric: ...mal außer der Reihe gefragt: Welche Synology hast Du? Ich fareg nach, weil ich schon länger mit der Anschaffung einer NAS liebäugle und dann natürlich ein Modell möchte, welches solche Zusatzmöglichkeiten bietet.
Danke und Gruß

HEINEN_Eric
Beiträge: 74
Registriert: 06.09.2020, 11:47
System: CCU
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal

Re: NetAtmo Wetterdaten HOWTO

Beitrag von HEINEN_Eric » 08.12.2022, 20:31

wianle hat geschrieben:
08.12.2022, 19:06
[@HEINEN_Eric: ...mal außer der Reihe gefragt: Welche Synology hast Du? Ich fareg nach, weil ich schon länger mit der Anschaffung einer NAS liebäugle und dann natürlich ein Modell möchte, welches solche Zusatzmöglichkeiten bietet.
Danke und Gruß
Hi, ich habe gleich 2 davon, eine DS216j (also 2-bay, im Raid1) für meine Backups (läuft nur bei Bedarf, und hat keine Verbindung nach aussen),
und dann im Sommer erst gekauft für 99€ bei Amazon, eine DS120j (1-bay) für meine Sicherheitscams, CCU-Historian, und mittlerweile dann auch als Webserver für die Netatmo-Abfrage, die läuft dann 24h/7. Sie ist manchmal etwas reaktionsträge, da ich der doch recht schwachen CPU mit all dem dann schon viel zumute, aber läuft alles wie es soll... Kanns nur empfehlen, bin recht zufrieden, besonders für den Preis...
LG
Eric

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“