Mobile Alerts Sensoren mit der REST API in FHEM einbinden
Worum geht es
Daten von pro series Sensoren der Firma Mobile Alerts deren ID mit 01, 08, 09, 0B, 0E anfangen können mit Hilfe der sog. REST API von den Mobile Alerts Servern ausgelesen und in FHEM weiter verwertet werden. Ich zeige das Vorgehen am Beispiel des MA10660 Windsensors.
Bei den Sensoren die per REST API ausgelesen werden können (Stand Juli 2017) handelt es sich um:
- MA10120 (ID 01) – Temperatur und Feuchtigkeit Sensor mit Kabelsonde
- MA10241 (ID 0E) – Temperatur und Luftfeuchtigkeit Sensor
- MA10320 (ID 09) – Temperatur Sensor
- MA10650 (ID 08) – Regen Sensor
- MA10660 (ID 0B) – Wind Sensor
Vorweg
Zum Abfragen der Sensordaten von den Mobile Alerts Servern mit Hilfe der REST API muss man wissen, daß man nur den letzten Wert erhält der vom Sensor übertragen wurde. Weiterhin ist es wichtig zu wissen, dass man die Sensordaten nur 3 mal in einer Minute abfragen darf, sonst wird die Abfrage für 7 Minuten gesperrt. Das Abfrageprotokoll ist HTTPS und die Abfrage erfolgt durch eine POST Anfrage. Die Ergebnisse die geliefert werden liegen im JSON Format vor.
Glücklicherweise bringt das FHEM Modul HTTPMOD alles mit was nötig ist um das oben genannte umzusetzen.
Vorgehen
Zunächst den Windsensor in FHEM definieren:
define MyWindsensor HTTPMOD https://www.data199.com/api/pv1/device/lastmeasurement 30
Die Abfrage erfolt also alle 30 Sekunden, so ist man mit dem 3 mal pro Minuten Abfragelimit auf der sicheren Seite.
Danach muss man via Attributen festlegen was das HTTPMOD machen muss. Die ID des Sensors gibt man so an:
attr MyWindSensor requestData.* deviceids=0Bxxxxxxxx&phoneid=77xxxxxxxxx
Bei deviceids= die ID eures Sensors eingeben (unterhalb vom QR-Code) und bei phoneid= die ID eurer Mobile Alerts App. Wenn man jetzt keine App installiert hat kann man die Zahl nach phoneid= auch weglassen. Die Phone ID dient lediglich dazu Alert Zustände, die ihr in eurer App eingestellt habt als Reading sichtbar zu machen.
Die Phone ID findet ihr in eurer App unter Einstellungen ziemlich weit unten (siehe Screenshot):

Mobile Alerts App Phoneid
Weiterhin muss man dem HTTPMOD mitteilen, dass er als Antwort JSON erwarten kann Das geht mit dem follgenden Attribut:
attr MyWindSensor extractAllJSON 1
Wenn alles richtig gelaufen ist bekommt ihr folgende Readings:
devices_01_deviceid
|
0Bxxxxxxxxxx
|
2017-07-11 12:28:54
|
devices_01_lastseen
|
1499768989
|
2017-07-11 12:30:24
|
devices_01_lowbattery
|
false
|
2017-07-11 12:28:54
|
devices_01_measurement_c
|
1499769000
|
2017-07-11 12:30:24
|
devices_01_measurement_idx
|
418476
|
2017-07-11 12:30:24
|
devices_01_measurement_ts
|
1499768989
|
2017-07-11 12:30:24
|
devices_01_measurement_wd
|
14
|
2017-07-11 12:30:24
|
devices_01_measurement_wg
|
3.1
|
2017-07-11 12:30:24
|
devices_01_measurement_ws
|
1.2
|
2017-07-11 12:30:24
|
phoneid
|
77xxxxxxxxxxx
|
2017-07-11 12:28:54
|
success
|
true
|
2017-07-11 12:28:54
|
Wenn ihr in eurer Mobile Alerts App Alarmzustände (Alerts) eingestellt habt und ihr im Attribut requestData eure Phone ID eingegeben habt dann bekommt ihr nach dem Eintreten eines Alarmzustandes noch folgende Readings:
devices_01_measurement_wds
|
65535
|
2017-07-11 15:39:20
|
devices_01_measurement_wga
|
true
|
2017-07-11 15:39:20
|
devices_01_measurement_wgaactive
|
true
|
2017-07-11 15:39:20
|
devices_01_measurement_wgas
|
1
|
2017-07-11 15:39:20
|
devices_01_measurement_wsa
|
false
|
2017-07-11 15:39:20
|
devices_01_measurement_wsaactive
|
true
|
2017-07-11 15:39:20
|
devices_01_measurement_wsas
|
1
|
2017-07-11 15:39:20
|
Falls etwas falsch war bekommt ihr als Reading einen Text mit einer Fehlermeldung was falsch war wie z. B.: “429 Too Many Requests”.
Weiterhin würde ich per Attribut einstellen, dass nur Änderungen von Werten einen Event auslösen. Das sieht so aus:
attr MyWindSensor event-on-change-reading .*
Ausserdem kann man mit dem Attribut stateFormat den State einstellen, so das man die wichtigsten Daten direkt in der Übersicht sehen kann. Das geht so:
attr MyWindSensor stateFormat Geschwindigkeit: wind_speed km/h <br> Böe: wind_gust km/h <br> Richtung: wind_direction ° <br> Messung: timestamp
Das sieht dann so aus:

State mit angepasstem stateFormat
Daten weiterverarbeiten
Mit den erhaltenen Readings kann man jetzt schon was anfangen, doch mit gefiel es nicht dass die Zeitangaben im UNIX Format, die Windgeschwindigkeiten in m/s und die Windrichtung in einem speziellen Mobile Alerts Schlüssel vorlagen. Das lässt sich aber mit etwas Perl Code und dem Attribut userReadings beheben. Das Attribut sieht so aus:
attr MyWindSensor userReadings wind_direction:devices_01_measurement_wd.* { int(ReadingsVal("MyWindSensor","devices_01_measurement_wd",0))/16*360 }, wind_speed:devices_01_measurement_ws.* { ReadingsVal("MyWindSensor","devices_01_measurement_ws",0)/1000*3600 }, wind_gust:devices_01_measurement_wg.* { ReadingsVal("MyWindSensor","devices_01_measurement_wg",0)/1000*3600 }, timestamp:devices_01_measurement_ts.* { POSIX::strftime("%F %T", localtime(ReadingsVal("MyWindSensor","devices_01_measurement_ts",0))) },
Ihr bekommt noch folgende Readings zusätzlich:
timestamp
|
2017-07-11 12:43:54
|
2017-07-11 12:44:24
|
wind_direction
|
247.5
|
2017-07-11 12:37:24
|
wind_gust
|
16.56
|
2017-07-11 12:44:24
|
wind_speed
|
5.76
|
2017-07-11 12:44:24
|
Nun liegen die Geschwindigkeiten in Km/h und die Windrichtung in Grad vor. Auch die Angabe für den Zeitpunkt der Messung liegt in einer lesbaren Form vor.
Daten speichern und visualisieren
Jetzt wird es Zeit die erhaltenen Daten zu speichern. Dazu erstellt man einen Filelog mit folgendem Befehl:
define MyWindFilelog filelog ./log/wind-%Y.log MyWindSensor:timestamp.*|MyWindSensor:wind_direction:.*|MyWindSensor:wind_gust:.*|MyWindSensor:wind_speed:.*
Die Daten aus dem Filelog lassen sich zu Graphen umsetzen und man bekommt beispielsweise so was:

Windsensor Plot
Gedanken zu Schluss
Positiv:
Das Windrad ist sehr empfindlich, es dreht sich also bei geringsten lauen Lüftchen. Ich habe parallel noch eine Homematic Wetterstation und bei sehr geringen Windes steht deren Windrad während sich das des Mobile Alerts Sensors schon dreht.
Negativ:
Wie ich feststellen musste, liefert die REST API nur alle 7 Minuten einen neuen Wert. Das liegt daran, dass der Mobile Alerts Gateways zwar alle Werte zwischenspeichert, diese aber nur alle 7 Minuten auf den entsprechenden Servern hochlädt und dann habt ihr auch nur Zugriff auf den letzten Wert. Auch wenn ihr einen Alert eingestellt habt wird das Stattfinden eines Alert Ereignissen auch erst nach 7 Minuten überragen. Das ist also völlig wertlos, wenn ihr damit einen Markisenschutz programmieren wollt, denn wenn tatsächlich ein plötzlich eintretender starker Wind kommt und ihr erst 7 Minuten später darüber informiert werdet, dann liegt die Markise vielleicht schon beim Nachbarn im Garten. Schade!
Info
Die Dokumentation zur REST API findet ihr als PDF Datei auf der Seite www.mobile-alerts.eu .
Spenden
Wenn Dir der Beitrag hier gefallen oder geholfen hat und Du mir etwas zukommen lassen willst, dann erfährst du hier wie: http://tips-und-mehr.de/spenden/
Hallo, danke für die Anleitung, ich bekomme immer eine Fehlermeldung
IP address rejected
ich habe mich aber an deine Anleitung gehalten, weißt du wo ich evtl suchen kann
Grüße Markus
Du darfst Anfragen an den Mobile Alerts Server nur 3 mal pro Minute anfragen, danach werden die Anfragen von deiner IP für mehrere Minuten blockiert. Falls du den öfters als alle 20 Sekunden abfragst könnte ich mir vorstellen, dass eine solche Fehlermeldung kommt.
Hallo danke für das Tutorial, hat super funktionirt. Mit dem Regensensor bekomme ich es nich hin. Es kommt im Reading immer
“ The requested resource does not support http method ‚GET‘ “
Hat hier schonmal aus dem Regensensor Werte bekommen und könnte mir helfen?
Gruss
Franzel
Hallo,
bekommst du mit der MA App auf dem Smartphone oder Tablett denn Werte angezeigt? Ist der Regensensor evtl. einer der nicht in der pro series ist und man könnte ihn dann ohne REST Api (http://tips-und-mehr.de/ohne-rest-api-mobile-alerts-temperatur-sensor-in-fhem-einbinden/) abfragen?
I’m now not positive the place you are getting your info, however
great topic. I must spend a while finding out much more or understanding more.
Thanks for excellent info I used to be on the lookout for this information for my mission.
Hallo, wäre die Einbindung der Pro sensoren(z.B. 10120) mit der API auch in Home Assistant möglich, bzw. wie?? Vielen Dank
Mir ist nichts bekannt.
Hallo, gäbe es auch eine Möglichkeit bzw. Anleitung mittels RestAPI die Pro Sensoren (ID01) in Home Assistant einzubinden??
Mir ist nichts bekannt.