Da ich schon öfters den Wunsch gehört habe eine Netatmo in die Zipabox zu integrieren, habe ich mir mal eine bestellt, und ein wenig gespielt.
Zum Aufbauen und Einrichten der Netatmo Station werde ich nicht viel sagen, da ich denke, dass die meisten sowas auch ohne eine Anleitung hinbekommen.
Ich habe die Integration so gelöst: Ein kleine Bash Script fragt die Netatmo API ab und schiebt die Werte in die Zipabox.
Mit diesen Werte könnte ihr natürlich auch nachher Regel erstellen oder sie euch einfach nur anschauen 😉
Was braucht ihr dafür? Ihr braucht natürlich eine Netatmo und ein kleinen Linux Rechner.
Am besten eignet sich eine NAS oder aber ein Raspberry Pi.
Ich lasse meine Scripte auf dem Rasberry Pi laufen und es läuft echt gut damit.
2 Tools müssen auf dem Linux Rechner noch installiert sein:
json_pp
curl
Aber als erstes erstellen wir ein neues Gerät in der Zipabox, und zwar ein Virtual Meter.
Damit haben wir gleich mehrere Wert die abgefragt werden können.
Das Gerät legen wir so an: Neues Gerät hinzufügen
dann auf Virtual Devices
und dann wählen wir das Virtuell Meter
Und schon haben wir ein neues Gerät
Im nächsten Schritt braucht ihr das Script, das die Werte der Netatmo abfragt.
Ich zeige euch das Script erstmal und zeige euch, was ihr ändern müsst, damit es funktioniert.
#!/bin/bash
# Author: Helmut Esau
# Version 0.1
# Diese kleine Script ließt die Werte der Netatmo aus, und schickt sie zur Zipabox
# Hier werden die Werte von der NetAtmo API geholt
# (C) 2015 Michael Miklis (michaelmiklis.de)
listDevices() {
# ——————————————————
# Help
# ——————————————————
# usage: listdevices #
# USER + PASSWORD -> your NetAtmo Website login
# ——————————————————
# Parsing Arguments
# ——————————————————
USER=$1
PASS=$2
# ——————————————————
# Define some constants
# ——————————————————
URL_LOGIN=“https://auth.netatmo.com/de-DE/access/login“
API_GETMEASURECSV=“https://my.netatmo.com/api/devicelist“
SESSION_COOKIE=“cookie_sess.txt“
AUTH_COOKIE=“cookie_auth.txt“
# ——————————————————
# URL encode the user entered parameters
# ——————————————————
USER=“$(urlencode $USER)“
PASS=“$(urlencode $PASS)“
# ——————————————————
# Now let’s fetch the data
# ——————————————————
# first we need to get a valid session cookie
curl –silent -c $AUTH_COOKIE $URL_LOGIN > /dev/null
# then extract the ID from the authentication cookie
SESS_ID=“$(cat $AUTH_COOKIE | grep netatmocomci_csrf_cookie_na | cut -f7)“
# and now we can login using cookie, id, user and password
curl –silent -d „ci_csrf_netatmo=$SESS_ID&mail=$USER&pass=$PASS&log_submit=LOGIN“ -b $AUTH_COOKIE -c $SESSION_COOKIE $URL_LOGIN > /dev/null
# next we extract the access_token from the session cookie
ACCESS_TOKEN=“$(cat $SESSION_COOKIE | grep netatmocomaccess_token | cut -f7)“
# build the POST data
PARAM=“access_token=$ACCESS_TOKEN“
# now download json data
curl -d $PARAM $API_GETMEASURECSV
# clean up
rm $SESSION_COOKIE
rm $AUTH_COOKIE
}
#____________________________________________________________________________________________________________________________________
urlencode() {
# ——————————————————
# urlencode function from mrubin
# https://gist.github.com/mrubin
#
# usage: urlencode
# ——————————————————
local length=“${#1}“
for (( i = 0; i < length; i++ )); do local c=“${1:i:1}“ case $c in [a-zA-Z0-9.~_-]) printf „$c“ ;; *) printf ‚%%%02X‘ „‚$c“ esac done } #____________________________________________________________________________________________________________________________________
# In der folgenden Zeile „EMail Adresse“ und „Password“ mit den Login Daten für die Netatmo Seite ersetzen
net=$(listDevices „EMail Adresse“ „Password“ ); echo $net | /usr/bin/json_pp > /tmp/netatmo-werte
# Variablen Zipato URL
tempinnen=’https://my.zipato.com/zipato-web/remoting/attribute/‘
tempaussen=’https://my.zipato.com/zipato-web/remoting/attribute/‘
humidityaussen=’https://my.zipato.com/zipato-web/remoting/attribute/‘
humidityinnen=’https://my.zipato.com/zipato-web/remoting/attribute/‘
co2=’https://my.zipato.com/zipato-web/remoting/attribute/‘
presure=’https://my.zipato.com/zipato-web/remoting/attribute/‘
db=’https://my.zipato.com/zipato-web/remoting/attribute/‚
# Die Werte werden hier eingelesen
netatmovalues=`cat /tmp/netatmo-werte`
# Hier werden die Werte aufgesplitet
tempinnen1=`cat /tmp/netatmo-werte |grep ‚“Temperature“ :‘ | awk ‚{print $3}‘ | sed ’s/\,//g‘ | sed ‚1d’`
tempaussen1=`cat /tmp/netatmo-werte |grep ‚“Temperature“ :‘ | awk ‚{print $3}‘ | sed ’s/\,//g‘ | sed ‚2d’`
humidityaussen1=`cat /tmp/netatmo-werte |grep ‚“Humidity“ :‘ | awk ‚{print $3}‘ | sed ’s/\,//g‘ | sed ‚2d’`
humidityinnen1=`cat /tmp/netatmo-werte |grep ‚“Humidity“ :‘ | awk ‚{print $3}‘ | sed ’s/\,//g‘ | sed ‚1d’`
co21=`cat /tmp/netatmo-werte |grep ‚“CO2″ :‘ | awk ‚{print $3}‘ | sed ’s/\,//g’`
presure1=`cat /tmp/netatmo-werte |grep ‚“Pressure“ :‘ | awk ‚{print $3}‘ | sed ’s/\,//g’`
db1=`cat /tmp/netatmo-werte |grep ‚“Noise“ :‘ | awk ‚{print $3}‘ | sed ’s/\,//g’`
# Hier schicken wir die Daten an die Zipabox
curl $tempinnen$tempinnen1
curl $tempaussen$tempaussen1
curl $humidityaussen$humidityaussen1
curl $humidityinnen$humidityinnen1
curl $co2$co21
curl $presure$presure1
curl $db$db1
Das Script könntet ihr entweder nach dem editieren per FTP Client auf den Server hochladen, oder aber ihr übertragt das Script per copy/paste.
Solltet ihr euch schon ein wenig mit Linux auskennen, dann nehmt einfach den Editor eures Vertrauens, in meinem Fall vi, und editiert die Datei.
Es muss in der Mitte des Scripts die E-Mail Adresse und das Password ausgetauscht werden, das steht aber auch in der Zeile darüber.
Danach müssen nur noch die URLs unter folgendem Punkt geändert werden:
# Variablen Zipato URL
Wie bekommt ihr diese URL´s?
Klickt auf den Geräte-Manager
Dann klickt ihr auf Virtual Network, denn da befindest sich das neu angelegte Gerät.
Jetzt auf das Gerät klicken das wir angelegt haben, in meinem Fall heißt es Netatmo.
Klappt einfach mal alle Gerät aus, dann sollte es so aussehen
Jetzt klickt ihr einfach auf das Zahnrad und gebt dem Kind einen Namen.
Der Name sollte natürlich zu den Werten passen, damit ihr sie nachher besser zuordnen könnt.
In der Zeile URLs kopiert ihr jetzt die URL und fügt sie im Script unter Variablen ein.
Das ganze soll dann folgendermaßen aussehen:
co2=’KOPIERTE URL‘
Und das Ganze wiederholt ihr für alle Werte.
Wenn ihr das jetzt für alle Wert geändert habt, könnt ihr das Script einfach mal ausführen und schauen ob die Werte schon in der Zipabox erscheinen.
Die Werte könnte ihr im Punkt HTTP der Zipabox Oberfläche einsehen
Im RuleCreator tauchen die Werte natürlich auch schon auf
Solltet ihr die Werte aber noch „nativ“ gelistet haben wollen, also z.B. die Netatmo Temperaturen auch im Temperaturfeld der Zipabox, könntet ihr noch folgende Änderungen durchführen.
Ihr klickt noch einmal auf das Zahnrad der Geräte
Und dort definiert ihr einfach den Typ.
Das könnt ihr natürlich halten wie die Dachdecker, aber ich habe es folgendermaßen gemacht
Temperaturen: Temperatur (wer hätte das gedacht?)
Lautstärke: Volumen messen
Luftdruck: Luftdruck messen
Luftfeuchtigkeit: Feuchtigkeit messen
CO2: Belüftung
Und schon sind die Werte in der Zipabox-Oberfläche, in den entsprechenden Tabs zu finden.
Hier nochmal der Downloadlink zum Script: netatmo.sh
Und jetzt viel Spass damit. Lasst es mich bitte wissen, wenn es Probleme mit dem Script gibt oder ihr ein paar mehr Infos braucht was den Linux-Teil angeht.
Hallo Helle …
ich finde Dein Engagement für die Zipabox ganz toll, Zipato muss Dir sehr dankbar sein. Leider haben viele Zipabox-User keinen Raspberry, keine Linux-Kenntnisse und können auch keine Bash Scripte schreiben. Hast Du einen Tipp wie man sich diese Kenntnisse schnell und einfach aneignen kann, denn es scheint, dass SmartHome erst mit diesen Zusatztools richtig wirksam wird.
Beste Grüße – Caspar Molto – 11.12.2015 – 09:26
Hallo Caspar,
ich würde sage, einfach anfangen und Fragen stellen 🙂
Ich werde dann helfen so gut es geht, und die Kommentare helfen dann evt. noch anderen Usern.
Gruß Helle
Moin Helle 🙂
Vielen Dank für das Skript – Leider funktioniert es nur für das Netatmo „Startpaket“ mit einem Aussen- und einem Innenmodul. Ich habe allerdings das volle Programm (mehrere zusätzliche Innenmodule, einen Regenmesser und demnächst auch den Windmesser), ist geplant dass noch dahin gehend zu modifizieren ? Außerdem ist die Verzögerung durch die remote API recht hoch (im Moment dauert eine einzelne Änderung über diese bei mir etwa 10 Minuten), gibt es auch die Möglichkeit „direkt“ im Intranet auf die Box zuzugreifen oder geht das nur remote ?
Max
Hi,
also ich hab die Werte alle 5 Minuten drin……
Wenn du mir den JSON Output zur Verfüfung stellst, könnte ich das für dich bauen.
Gruß Helle
Moin Helle,
entschuldige dass ich mich nicht mehr gemeldet habe, ich habe die Netatmo Integration wieder zu openhab verschoben. Zipato ist in vielen Punkten wirklich richtig gut, aber gerade die Integration eigener Dinge funktioniert unter openhab noch ein wenig einfacher und stabiler, daher nutze ich momentan noch beide Systeme.
Max
Hallo,
super. danke für dein Engagement. Ich werde es auf meinen NAS versuchen . Bin noch Anfänger.
Wie sieht es aus, wenn man zwei Netatmo Stationen hat? Wie wird die Station ausgesucht?
Hi Christian,
das müsste ich selber testen, da ich nur eine habe……
Gruß Helle
Funktioniert das Script noch?
Bei mir tut sich leider gar nichts.
Wenn ich die einzelnen Zipato Urls direkt im Browser mit einem Wert versehe und aufrufe funktioniert das.
Passwort und Benutzername für Netatmo hätte ich auch gesetzt.
Was könnte noch falsch sein?
Der Gregor ist schon dabei ein neues Script in Phyton zu schreiben…….
Das wird dann natürlich um Welten besser
Gruß Helle
Danke für die Antwort.
Freue mich schon darauf.
LG
Christoph
Moin Moin,
spannend und toll, wie hier Netatmo intgriert wird.
Arbeitet Ihr auch ggf. an einer Lösung bzw. gibt es Hinweise darauf, wir man die Kamera von NetAtmo mit einbinden kann? Wir haben es versucht, doch so richtig haben wir den dreh nicht raus.
Die finden wir recht „charmant“, sei es die „Presence“ oder die „schlichte“ IP Kamera mit Gesichtserkennung – was meint Ihr dazu? Finde die steht dem Zipa-Universe gut zu Gesicht…
LG
Christian
Hi,
liefert die Kamera den einen RTSP oder MJPEG Stream aus?
Gruß Helle
Vielen Dank für das Skript.
Funktioniert prima. Ich plane, meine Netatmo demnächst noch um den Regenmesser zu erweitern, dann werde ich versuchen das Skript zu erweitern.
Grüße
Markus
Hi Markus,
das wäre echt cool.
Sag einfach bescheid, dann update ich den Beitrag mal.
Gruß Helle
Hi.
Ist Regenmesser und Windmesser schon unterstützt ???
mfg, interested
Hi,
habe die Netatmo schon lange nicht mehr…deswegen kann ich das leider nicht mehr weiterentwickeln….sorry
Gruß Helle
ich habe einige fragen zu netatmo:
– welche linux soll an Raspberry PI sein (noobs, raspian)
– wie installiere ich json_pp & curl
– wie soll die anderung aussehen bei benutzer nahme und password
net=$(listDevices „email@gmail.com“ „password“ ); echo $net | /usr/bin/json_pp > ${NETATMO_TMP}
– wie starte ich dieses netatmo.sh script automatisch bei boot
Danke.
mfg, interested.
Hi interested.
– welche linux soll an Raspberry PI sein (noobs, raspian)
ist denke ich egal.
– wie installiere ich json_pp & curl
sudo apt install json_pp curl
– wie soll die anderung aussehen bei benutzer nahme und password
net=$(listDevices „deinemail@deinprovider.com“ „deinpassword“ ); echo $net | /usr/bin/json_pp > ${NETATMO_TMP}
– wie starte ich dieses netatmo.sh script automatisch bei boot
Google mal nach „cron“
Vielleicht klappt ja die Integration über ConradConnect.
Hi,
ich nutze das Skript seit einiger Zeit und mir ist aufgefallen, dass die Temperatur und Feuchtigkeitswerte für innen und aussen mit jedem neuen Abruf vertauscht werden.
Eine genauere Betrachtung zeigte, dass das heruntergeladene JSON jedes mal in anderer Reihenfolge geschrieben wird.
Da das Skript die Werte in einer bestimmten Reihenfolge erwartet, werden sie jedes mal vertauscht.
Daher habe ich es mit jq (ein JSON Parser für die Kommandozeile) erweitert. Dazu müsst ihr mit „sudo apt install jq“ das entwprechende Paket installieren und dann im Skript die Befehle zum aufsplitten der Werte mit folgendem Ersetzen:
tempinnen1=`jq .body.devices[0].dashboard_data.Temperature /tmp/netatmo-werte`
tempaussen1=`jq .body.modules[0].dashboard_data.Temperature /tmp/netatmo-werte`
humidityaussen1=`jq .body.modules[0].dashboard_data.Humidity /tmp/netatmo-werte`
humidityinnen1=`jq .body.devices[0].dashboard_data.Humidity /tmp/netatmo-werte`
co21=`jq .body.devices[0].dashboard_data.CO2 /tmp/netatmo-werte`
presure1=`jq .body.devices[0].dashboard_data.Pressure /tmp/netatmo-werte`
db1=`jq .body.devices[0].dashboard_data.Noise /tmp/netatmo-werte`
Damit sollten sich auch weitere Module problemlos einbinden lassen.
Grüße
Markus