[vz-users] DHT11 - Script

Peer Janssen peer at pjk.de
Sat Jan 26 01:00:16 CET 2019


So, hier ist mein funktionierendes Script zum direkten Eintragen der
Werte eines DHT11 in die Datenbank der Middleware.

Es wird mittels cron aufgerufen. Ich nutze dafür python 2.7.

Voraussetzung sind die "Adafruit_DHT" Bibliothek (siehe web) und
"python-mysqldb" (per apt installierbar).


$ cat dht11_mysql.py

#!/usr/bin/python
import time
ts = time.time()
timestamp = int(ts * 1000)

import Adafruit_DHT
sensor = Adafruit_DHT.DHT11
pin = 17
humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)

import MySQLdb
db = MySQLdb.connect('localhost', 'vz-admin', 'secure', 'volkszaehler')
c = db.cursor()

if temperature is not None:
        channel_id = 2
        c.execute('INSERT INTO data (channel_id, timestamp, value)
VALUES (%s, %s, %s)', (channel_id, timestamp, temperature))

if humidity is not None:
        channel_id = 3
        c.execute('INSERT INTO data (channel_id, timestamp, value)
VALUES (%s, %s, %s)', (channel_id, timestamp, humidity))

db.commit()

Wer das nutzen möchte, muss vermutlich den "pin" und die "channel_id"
für Temperatur und Luftfeuchtigkeit anpassen.

Für die beiden Kanäle in der Middleware die Sensoren für Temperatur und
Luftfeuchtigkeit wählen. Für die "channel_id" muss dann mit der
phpmysql-Adminoberfläche aus der Tabelle "entities" für die "uuid" der
beiden Kanäle jeweils die "id" des Kanals ausgelesen werden.

Gruß, Peer



Am 25.01.19 um 19:02 schrieb Peer Janssen:
> Moin!
>
> Ich habe einen DHT11 am Raspi, der auch seine Werte liefert.
>
> Genutzt habe ich die Anleitung nach
> https://wiki.volkszaehler.org/_export/code/hardware/channels/sensors/dht22?codeblock=3,
> allerdings das Script loldht durch die aktuellere Version des
> "AdafruitDHT.py" ersetzt, das auch den DHT11 abfragen kann (außerdem
> DHT22 und noch eine andere Type). Die Werte meines etwas veränderten
> Scripts (aufgerufen durch cron) landen in einer Logdatei, die so aussieht:
>
> 2019-01-25_18:31 [DHT11] Temp=18.0*  Humidity=16.0%
> 2019-01-25_18:32 [DHT11] Temp=18.0*  Humidity=16.0%
> 2019-01-25_18:33 [DHT11] Temp=20.0*  Humidity=23.0%
> 2019-01-25_18:34 [DHT11] Temp=18.0*  Humidity=16.0%
>
> Nun bin ich mit dem Beispielscript aber nicht zufrieden. Um diese zwei
> Werte in die Middleware zu schicken, werden nacheinander folgende
> Programme aufgerufen:
>
> bash, loldht, grep, date, echo, awk, echo, awk, echo, sed, echo, sed,
> echo, wget, echo, echo, sed, echo, sed, wget
>
> Das sind 20 Programmaufrufe -- das sieht mir nach Overkill aus. Da ich
> loldht nicht mehr verwende, sondern AdafruitDHT.py (das auch nur ein
> wrapper um eine python-Library ist), kann ich die Werte auch direkt im
> Python-Script formatieren wie gebraucht. Das wäre dann nur ein einziger
> Script-Aufruf im cron-Job statt mehrerer anderer. Allerdings weiß ich
> nicht, wie ich die Ausgabe formatieren müsste, sodass sie dann direkt,
> ähnlich wie im Beispielscript, mit wget in die Middleware geschickt
> werden kann, ohne x mal echo, sed und awk zu belästigen. Ich kenne
> nämlich bash und deren (interne!) string-Dissektoren nicht gut genug
> dafür. Hat da jemand eine Idee? Falls nicht, ließe sich die middleware
> aber auch direkt im python-Script ansprechen.
>
> Nun sehe ich aber, dass vzlogger so konfiguriert werden kann, dass ein
> Script aufgerufen und anhand eines Formatstrings der Wert aus dessen
> Rückgabewert entnommen wird. Ist damit die alte Lösung mit dem
> Beispielscript im Grunde obsolet? Ich habe nämlich den Eindruck, dass
> das VZ-Wiki in einem Status zwischen einer alten und einer neuen Version
> ist, bei der mir nicht recht klar ist, ob da Altes schon Obsoletes
> geworden ist. Nun weiß ich aber nicht, ob der Formatstring so angegeben
> werden kann, dass ich die beiden Werte aus der Scriptausgabe extrahieren
> kann. Falls nicht, erscheint mir doch ein cron-Job mit einem eigenen
> Script in Python die bessere Lösung.
>
> Tipps dazu?
>
> Gruß, Peer
>
>
-- 
Peer Janssen - peer at pjk.de




More information about the volkszaehler-users mailing list