[Modul] Netatmo Camera (Presence / Welcome)

Hallo zusammen,

ich habe ein kleines Modul für die Kameras Netatmo Presence bzw. Netatmo Welcome erstellt:

https://github.com/CodeKing/de.codeking.symcon.netatmocamera

Modul Funktionen

[ul]
[li]Auslesen des Livebildes aus dem lokalen Netzwerk & automatisches erstellen des ImageGrabbers[/li][li]Webhook Events abfangen[/li][/ul]
Mein Hauptziel war es eigentlich lediglich die Events abfangen um dadurch Aktionen auszulesen.

Was wird benötigt

[ul]
[li]Eine Netatmo Presence oder Netatmo Welcome Kamera ;)[/li][li]Eine registrierte App auf Netatmo Connect[/li][li]Aktives ConnectControl Modul (alternativ: eine aufgeschaltete Domain, die von außen erreichbar ist)[/li][/ul]
Funktionsweise

Nachdem die Instanz NetatmoCamera erstellt und sämtliche Zugangsdaten eingegeben wurden, wird die Kamera und der dazugehörige Webhook erstellt und bei Netatmo registriert. Die Kameradaten werden 1x pro Stunde ausgelesen.

Wenn Netatmo nun ein Event auf den Webbhook abschickt, werden dessen Daten in Variablen gespeichert, die wiederum für Aktionen verwendet werden können (wie bei mir das Aussenlicht einschalten, wenn als event_type human übermittelt wurde.

Getestet habe ich das mit der Netatmo Presence. Die Netatmo Welcome sollte aber ebenfalls funktionieren, hier werden zusätzlich noch Daten zur erkannten Person im Webhook übermittelt.

Viele Grüße,

Frank

Screenshots
1.PNG

Servus Frank,

ich habe das Modul gerade mal getestet und bekomme eine Fehlermeldung bei „Daten aktualisieren“.

Kann es sein dass ich noch ein Hook-Passwort eingeben muß?
Die Kamera wurde aber sauber angelegt und der Name passt auch!

Gruß
Isi

Hallo Isi,

die Fehlermeldung kommt, wenn das Kamerabild unter der lokalen URL nicht erreicht werden kann. Der Link wird zusammengebaut aus der angegebenen Kamera IP, einem 32-Stelligen Token der über die API ausgelesen wird und dem eigentlichen Pfad zum Bild.

Bei mir sieht der z.B. so aus: http://10.2.0.50/xxxxxxxxxxxxxxxxxxxxxxxx/live/snapshot_720.jpg.

Kannst du deine hinterlegte IP-Adresse der Kamera überprüfen ob diese stimmt?
Ansonsten habe ich eben noch ein kleines Update gemacht, das im Fehlerfall zum einen eine aussagekräftigere Fehlermeldung erzeugt und den Link zum Kamerabild loggt.

Vielleicht lässt sich damit herausfinden wo der Fehler liegt.

Ein Webhook Passwort muss nicht vergeben werden. Da müssten auch bereits Daten eintrudeln, wenn sich jemand vor deiner Kamera bewegt.

Viele Grüße,

Frank

Hallo Frank,

habe gerade das Update gemacht und noch einmal getestet.
Die Fehlermeldung ist jetzt eindeutig!

05.01.18 00:53:31 | NetatmoCamera | Could not find the camera picture at http://192.198.1.114/56x943x8axaa7xfaexe9x0ex4bex75x6/live/snapshot_720.jpg

Wenn ich diese URL in Safari eingebe bekomme ich aber auch kein Bild sondern werde auf https://192.198.1.114/login.cgi?uri=/index.html umgeleitet.
Die IP stimmt sicher, habe ich noch einmal geprüft.
Auch die Webhooks kommen noch nicht an.
Muss ich die Hook-Adresse manuel in Netatmo Connect eintragen?

Hmm das ist merkwürdig.

Soweit ich weiß läuft auf den Kameras weder ein cgi script, noch kann man sich da irgendwo anmelden.
Hast du die Presence oder Welcome Camera?

Ich habe eben noch ein Update gemacht, das als Fallback die VPN URL an den Image Grabber übergeben wird. Hier weiß ich allerdings nicht, wie stabil das läuft bzw. ob es da Restriktionen seitens Netatmo gibt wenn man sich das Bild alle X Sekunden abholt.

Den Webhook braucht man nicht eintragen, der wird durch das Modul registriert (sieht man aber dann leider nicht in Netatmo Connect). Hätte es hier einen Fehler gegeben wäre dieser aber auch abgefangen und ausgegeben worden.

Kannst du in Netatmo Connect mal in deine App schauen und dort bei Webhook in die Logs schauen, ob überhaupt etwas übermittelt wurde? Ebenfalls könntest du nochmal schauen, ob der Webhook in Symcon korrekt eingetragen wurde (Objektbaum > Kern Instanzen > WebHook), da müsste ein Webbhook mit dem Ziel „Netatmo Camera“ hinterlegt sein.

Ah seh gerade nochmal in deinem oberem Screenshot das du die Presence hast.
Dann kann das aber nicht die richtige IP sein, die Presence hat definitiv kein Login.

Hallo Frank,

es funktioniert, ich kann aber nicht genau sagen warum…

Ich habe noch einmal alle Einstellungen geprüft und dabei ist mir aufgefallen, dass sich hinter der URL in "Link zu Symcon ein „/“ eingeschlichen hatte was zur Folge hatte, dass der Webhook nicht angekommen ist weil „ipmagic.de//hook/netatmo_presence_21193“.
Das konnte ich leider nicht gleich sehen weil das Eingabefeld etwas zu kurz ist. :smiley:
Ich habe den „/“ entfernt und übernommen aber irgendwie hat es die Änderung nicht an Netatmo Connect übertragen.
Dann habe ich die Instanz und den Hook gelöscht und alles neu angelegt und es hat sofort funktioniert.
Leider kann ich jetzt nicht sehen ob er das Bild Lokal oder über VPN bezieht.
Der Hook war aber auch vor dem Löschen richtig angelegt. Ich hatte auch vor dem Löschen mit Safari einen Hook gesendet mit Inhalt

...?Test=1

und konnte im Meldungsfenster einen Eingang erkennen.
Die IP ist immer noch die gleiche…
Gibt es eine Möglichkeit den generierten Link um lokal auf die Kamera zu kommen irgendwann wo auszulesen?
Dann könnte ich das noch einmal testen.

Coole Sache das Modul und einen supper Support den du da leistest!
DANKE!!!

Gruß
Isi

Das hatte ich selbst überschrieben!
Nach dem neuen Anlegen der Instanz war die URL richtig vorbefüllt.

Um zu prüfen, über welche URL sich das Modul das Kamerabild bezieht brauchst du eigentlich nur im angelegten ImageGrabber ‚Snapshot‘ nachsehen, was dort steht.

Ich habe aber eben nochmal ein Update bereitgestellt, das sowohl die lokale URL, als auch die VPN URL in einer Variable speichert. Zudem wird nun die externe URL geprüft und korrigiert, sollte sich ein Slash am Ende befinden.

Coole Idee!!! Weiter so :wink:

Gesendet von iPhone mit Tapatalk

Hallo Zusammen,

ich wollte gerade unsere Welcome Kamera’s in IP-Symcon einbinden (Snapshot im Webfront) doch leider werden „snapshot_local“, „snapshot_vpn“ und „s_local“ nicht befüllt. Wenn ich das jetzt richtig gesehen habe, muss bei der Beantragung der API ein „access_camera“ Scope angefordert werden. Des Weiteren wird der Webhook nicht ausgeführt - also prinzipiell ist nichts zu sehen außer Kameraname, Typ & die Status-Infos.

Wie habt ihr das gemacht, bzw. was gibt es hierbei zu beachten?

Gruß,
Markus


Netatmo-FAQ:

Requirements
Provide Netatmo with a high-level workflow diagram of its integration (App / your servers / Netatmo servers)
Logos and Icons should comply with Netatmo branding guidelines.
Authorization code grant type is required for authentication.
User should be able to remove its cameras access from the 3rd party application.
Storing token/refresh token anywhere else than on the user device is not allowed.
Providing video access and streaming capability to anyone else than the authenticated user is not allowed.
Provide Netatmo with a link to pre-production application for review.

Moin Markus,

der ‚access_camera‘ Scope wird nicht benötigt. ‚read_camera‘ bzw. ‚read_presence‘ reichen da vollkommen aus.
Der Webhook selber wird natürlich nur ausgeführt, wenn auch eine Bewegung registriert wurde.

Warum bei dir die Snapshot & VPN URL’s nicht befüllt werden kann ich so ad hoc leider nicht genau sagen.
Könntest du mir per PN einmal deine Client ID und Client Secret zuschicken? Dann kann ich das näher testen und genau sagen woran es liegt, anschließend kannst du die beiden ID’s wieder zurücksetzen.

Am besten integriere ich auch noch eine Debugoption, welche einmal alle Werte ausliest und logt.

Viele Grüße,

Frank

danke für dein Modul. Klappt super :slight_smile:

Kannst du mir noch sagen, wie du genau die Steuerung von Ereignisse machst?
Ich möchte, sobald eine Person erkannt wird, ein Script ausführen, welches die HUE Lampen im Flur zwischen 18 und 23 Uhr einschaltet.

Ersteinmal vielen Dank für das tolle Modul! Die Netatmo Kameras sind wirklich genial mit ihren smarten Events!:cool:

Der Webhook mit den Events funktioniert schon und auch der Name der Kamera und der Typ „Welcome“ wurden korrekt ausgelesen. Als Typ habe ich eine Welcome mit korrekter IP angelegt. Etwas komisch ist das im Webhook dennoch „presence_VarID“ steht. Außerdem bekomme ich die Meldung „Could not find the Camera picture at“. Hinter dem „at“ steht nichts mehr, der Satz endet einfach.

Beim Anlegen des Moduls erhalte ich außerdem folgende Fehlermeldung, welche vermutlich die Ursache des Ganzen ist:
Unbenannt.PNG

@CodeKing:
Vielen Dank für das erstellen des Moduls. Ich denke alle Netatmo Presence Besitzer hier werden sich freuen.

Die Einbindung meiner beiden Kameras funktioniert problemlos. Auch unter Webhook bekomme ich sämtliche Variablen angezeigt.

Leider habe ich aber das Problem, dass nach ein paar Stunden nach der Installation ich eine Fehlermeldung bekomme, die wie folgt aussieht:
Fehler_Netatmo.PNG

Was mache ich falsch?

Nicht schreiben was du gemacht hast, als diese Meldungen erschien.
Von alleine zeigt die Konsole keine Popups.
Irgendwas hast du also angeklickt.
Meldungsfenster kontrolliert?
Michael

Ich habe auf die Instanz doppel-geklickt, da sie mir ein rotes Ausrufezeichen anzeigt.

Welche Version verwendest du denn von IP-Symcon?
Den Fehler bekomme ich nämlich in der 5er Beta auch, da muss ich noch ein paar Anpassungen für tätigen zu denen ich bisher aus zeitlichen Gründen leider noch nicht gekommen bin.

In der aktuellen 4.4 sollte das Ganze aber problemlos funktionieren.

Das mache ich ganz einfach über folgendes Ereignis:

Bei Variablenaktualisierung von ‚event_type‘
UND ‚event_type‘ = ‚human‘
UND ‚Is Day‘ = False (aus dem Location Kernmodul)

schalte ich folgendes Script:

<?
	if(in_array($_IPS['SENDER'], ['Variable', 'TimerEvent', 'Execute'])) {
		$Device = 37585 /*[Geräte\Licht\Licht Eingang]*/;
		
		// disable device & stop timer
		if($_IPS['SENDER'] == "TimerEvent") {
			ZW_SwitchMode($Device, false);
			IPS_SetScriptTimer($_IPS['SELF'], 0);
		}
		// enable device & start timer
		else {
			ZW_SwitchMode($Device, true);
		}
				
		// disable device in 60 seconds
		if($_IPS['SENDER'] == 'Variable') {
			IPS_SetScriptTimer($_IPS['SELF'], 60);
		}
	}
?>

Dieses schaltet dann das Aussenlicht ein und startet einen Timer von 60 Sekunden der das Licht dann wieder ausschaltet, sofern zwischenzeitlich nicht ein neues Ereignis empfangen wurde.

Ich verwende die Version 4.4 auf einem Raspberry Pi.