Mobotix Kamera mit Feinstaub-Infos
Mobotix Kameras zeigen oft als Texteinblendung den Standort. Dieser Text kann auch über einen HTTP-Request gesetzt werden. Das ist der Weg um die Daten von meinem Feinstaubsensor ins Bild eintragen zu können.
Hier der Feinstaubsensor, jetzt ja das #airrohr, wie auf luftdaten.info beschrieben:
Meine Feinstaub-Texteinblendung auf einer Mobotix Kamera sieht so aus:
Damit der Text auf der Mobotix dargestellt wird, unter Setup Darstellungs- und Texteinstellungen wie folgt treffen:
Im Kommentarfeld wird immer der zuletzt über den HTTP-Request erzeugte Text gezeigt.
Die Feinstaubsensoren bekommen eine Nummer auf der Karte und über diese Nummer und die API von luftdaten.info kann der Feinstaubsensor (und der meist mitverbaute DHT22) abgefragt werden.
Der Code für das einblenden des Textes mit Python auf einem Raspberry Pi:
# Uebertragung an die Mobotix
url_m='http://admin:meinsm@192.168.22.197/control/control?set'
payload = (('section','imagecontrol'),('print',stammdaten+message))
r = requests.get(url_m, params=payload)
Wichtig ist bei der message, dass ein Zeilenumbruch nicht mit \n
sondern mit %0A
erzeugt wird.
Die Sensorabfrage und das Einblenden des Textes als komplettes Python Skript:
#!/usr/bin/python
# -*- coding: cp1252 -*-
# File: feinstaub-mobotix.py
# Autor: Peter Fürle, Twitter @Alpensichtung
# Mobotix Setup, Darstellungs- und Texteinstellungen,
# Texteinblendungen auf 'EIN' stellen, Grösse und Farbe vorgeben
# Die Werte eines #airrohr Sensors werden eingelesen und im Bild eingeblendet
import requests
import json
# url der Mobotix mit Standardpasswort, IP und API Aufruf
url_m='http://admin:meinsm@192.168.22.197/control/control?set'
def pick_values(sensor):
# Sensordaten für SDS011 und DHT11 abfragen
# dazu die api von luftdaten.info nutzen
# Peter Fürle @Alpensichtung Hotzenwald 05/2017
# linefeed in der Mobotix API durch '%0A' statt '\n'
r = requests.get(sensor)
json_string = r.text
parsed_json = json.loads(json_string)
# es kommen nicht immer alle Daten von jedem Sensor
l = len(parsed_json)-1
a = len(parsed_json[l]['sensordatavalues'])
if a == 1:
result=" "+(parsed_json[l]['sensordatavalues'][0]['value_type'])+": "+(parsed_json[l]['sensordatavalues'][0]['value']+' %0A')
if a == 2:
result=" "+(parsed_json[l]['sensordatavalues'][0]['value_type'])+": "+(parsed_json[l]['sensordatavalues'][0]['value']+' %0A')
result=result+" "+(parsed_json[l]['sensordatavalues'][1]['value_type'])+": "+(parsed_json[l]['sensordatavalues'][1]['value']+' %0A')
return(result)
stammdaten = ' Feinstaubsensor Nova SDS011 und DHT22%0A'
# Beispiel mit spezifischer Sensornummer
# die Feinstaub-Sensornummer +1 ist in der Regel der DHT22
url = 'http://api.luftdaten.info/static/v1/sensor/1716/'
message = pick_values(url)
# Feinstaub-Sensornummer meist Nova SDS011
url = 'http://api.luftdaten.info/static/v1/sensor/1715/'
message = message + " " + pick_values(url)
# message nachbereiten
message = message.replace('temperature: ','Temperatur: ')
message = message.replace(' P1:','P10 :')
message = message.replace('P2:','P2.5:')
# Uebertragung an die Mobotix
payload = (('section','imagecontrol'),('print',stammdaten+message))
r = requests.get(url_m, params=payload)
Viel Spass bei eigenen Versuchen, schickt mir eine Info bei Erfolg, oder bei Verbesserungsvorschlägen zum Code.
Schreibe einen Kommentar