openSenseMap Sensoren mit HTTPMOD lesen und schreiben

Begonnen von schroediman, 28 Dezember 2020, 12:33:57

Vorheriges Thema - Nächstes Thema

schroediman

Guten Tag,

ich habe mich mit der Opensensmap beschäftigt und wollte die Außentemperatur die von unserer Heizung gemessen wird dem Projekt zur Verfügung stellen. Leider habe ich in den großen Weiten des WEBs nichts gefunden, wie die Kommunikation zwischen fhem und openSensmap genau funktioniert. Also habe ich mir meine eigene Lösung mit dem Modul HTTPMOD gebastelt und möchte diese Lösung hier kurz vorstellen.

MfG

Schroediman


   





schroediman

   -- 1. SensboxID ermitteln: Dies ist relativ einfach, man öffnet https://opensensemap.org/ und wählt hier eine Station aus. Ich habe mich für dieses Beispiel für die Station
          "Hamburg-Stellingen" entschieden. Es handelt sich hier um eine Station mit "SDS 011"-Sensor. Nachdem Die Stations-ID ist in der Adresszeile des Browser ersichtlich:
          "https://opensensemap.org/explore/5b54905185381900195a1968".  Die von der Station zur Verfügung gestellten Daten sind PM10, PM2.5 , Temperatur und rel.
           Luftfeuchte.

    -- 2. Device in fhem anlegen. Ich habe jetzt folgendes HTTPMOD Device angelegt.

      define OSM_HHStellingen HTTPMOD https://api.opensensemap.org/boxes/5b54905185381900195a1968 120
setuuid OSM_HHStellingen 5fe9bc90-f33f-4ac4-9388-18874a1429c5b719
attr OSM_HHStellingen reading01Name PM2.5
attr OSM_HHStellingen reading01Regex "PM2.5",[\d\D]{10,150}{"value":"(-?[\d\.]+)"
attr OSM_HHStellingen reading02Name PM10
attr OSM_HHStellingen reading02Regex "PM10",[\d\D]{10,150}{"value":"(-?[\d\.]+)"
attr OSM_HHStellingen reading03Name Temperature
attr OSM_HHStellingen reading03Regex "Temperatur",[\d\D]{10,150}{"value":"(-?[\d\.]+)"
attr OSM_HHStellingen reading04Name Humidity
attr OSM_HHStellingen reading04Regex "rel. Luftfeuchte",[\d\D]{10,150}{"value":"(-?[\d\.]+)"
attr OSM_HHStellingen room OPENSENSMAP
attr OSM_HHStellingen stateFormat T:Temperature °C H:Humidity% PM 10:PM10 ug/m³ PM 2.5:PM2.5 ug/m³



Ich habe ein paar Screenshots angehängt


schroediman

Das Hochladen von Sensordaten an openSenseMap gestaltet sich natürlich etwas schwieriger als das Abrufen der Sensordaten.
   -- 1. Man muss sich bei opensensemap.org registrieren und eine Sensbox anlegen. Als Hardware habe ich "Manual configuration" gewählt.
         Ich habe einen Temperatursensor als Sensorik für diese Box definiert. Nach dem die Box erstellt wurde findet man die IDs für die Box und die Sensoren in seinem persönlichen Bereich bei openSensMap.
    Auch eine Absicherung über ein persönliches Accesstoken ist möglich und auch zu Empfehlen, da sonst jeder die Box alleine über die BoxId und die SensorId "hacken" könnte. Die Einstellungen und das Accesstoken findet man wenn man die Box über das Dashboard editiert im Bereich "Security"
   
       Der Code für meinen Temperatursensor sieht wie folgt aus:

define TempOutside_HCS HTTPMOD https://api.opensensemap.org/boxes/BoxID 60
setuuid TempOutside_HCS 5fe79e85-f33f-4ac4-b067-7f367515ff673454
attr TempOutside_HCS reading01Name Temperature
attr TempOutside_HCS reading01Regex "Temperature",[\d\D]{10,150}{"value":"(-?[\d\.]+)"
attr TempOutside_HCS room OPENSENSMAP
attr TempOutside_HCS set01Data {"value":$val}
attr TempOutside_HCS set01Method POST
attr TempOutside_HCS set01Name Temp
attr TempOutside_HCS set01URL https://api.opensensemap.org/boxes/BoxID/SensorID
attr TempOutside_HCS setHeader1 Content-Type: application/json
attr TempOutside_HCS setHeader2 Authorization:AccessTOKEN
attr TempOutside_HCS stateFormat T:[$name:Temperature:r1]°C



Die Platzhalter BoxID , SensorID und AccessTOKEN müssen natürlich durch die spezifischen der eigenen Box ersetzt werden.


Durch "set TempOutside_HCS Temp xy.c" wird die Temperatur xy.c zur Box gesendet. Durch die in der Definition angegebene URL und das Interval wird der Sensorwert alle 60-Sekunden zurückgelesen.

MfG

Schroediman