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.
Mobotix Texteinblendung

Hier der Feinstaubsensor, jetzt ja das #airrohr, wie auf luftdaten.info beschrieben:
Feinstaubsensor luftdaten.info

Meine Feinstaub-Texteinblendung auf einer Mobotix Kamera sieht so aus:
Mobotix Texteinblendung Feinstaub

Damit der Text auf der Mobotix dargestellt wird, unter Setup Darstellungs- und Texteinstellungen wie folgt treffen:
Mobotix Setup Feinstaubdaten
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.

Getagged mit: , , ,

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.