Der Windsensor am Raspberry Pi mit (Python)

Begonnen von hankyzoolander, 08 Juni 2019, 22:35:19

Vorheriges Thema - Nächstes Thema

hankyzoolander

Hallo,
wie schon in dem anderen Thread erwähnt, https://forum.fhem.de/index.php?topic=54488.0 habe ich für mich eine Lösung gefunden den Wind-Speed-Sensor am Raspberry Pi auszuwerten und die Messungen in fhem zu übertragen.
Da dies ein fertiger code ist denke ich, das diese Kategorie richtig ist.

Nach ewigem suchen und rumtesten stieß ich auf die python-API.
Habe mir das mal angesehen und festgestellt das dies genau das ist was ich suche.

Hier mal der Code des python scripts
#!/usr/bin/python

import RPi.GPIO as GPIO
import time, math
import fhem

fh = fhem.Fhem("127.0.0.1")

pin = 21
count = 0

def calculate_speed(time_sec):
    global count
    km_per_hour = count * 2.14 / time_sec
    return km_per_hour

def spin(channel):
    global count
    count += 1
#    print (count)

GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.IN, GPIO.PUD_UP)
GPIO.add_event_detect(pin, GPIO.FALLING, callback=spin)

interval = 5

while True:
    count = 0
    time.sleep(interval)
    wind = (calculate_speed(interval))
    fh.send_cmd("setreading WIND speed  "+str(wind))
#    print wind


In fhem habe ich einen dummy erstellt mit dem Namen WIND. Dieser dummy hat ein userReading mit dem Namen speed.
Mit der Zeile fh.send_cmd("setreading WIND speed  "+str(wind)) wird das reading speed vom Gerät WIND mit daten gefüttert.

Ich habe das script auf dem Raspberry Pi als service laufen. Dieser ist dann ähnlich wie fhem stop und startbar.
sudo service windmessung start
sudo service windmessung stop
sudo service windmessung status

Die Datei wind2.sh startet nach der service installation immer automatisch mit dem Raspi.


Im moment misst das Programm immer 5 sekunden die Umdrehung, errechnet den Wert in Km/h um und übergibt ihn in fhem.
Die Zeilen mit print count und print wind sind auskommentiert. Diese dienten nur zum Testen. Werden diese aktiviert, werden die zähl und Messergebnisse in die Console geschrieben.

Die Datei wind2.sh kommt nach /opt/fhem/FHEM
Im Home Verzeichnis wird ein Ordner mit dem Namen windmessung erstellt.
Dort kommen folgende Dateien rein:
installWindService.sh
removeWindService.sh
startWindService.sh
stopWindService.sh
windmessung.service

Der Ordner wird startbar gemacht mit
sudo chmod u+x /*windmessung

----------------------------------
In fhem wird bei dem dummy WIND, das attribut stateFormat angepasst mit
{sprintf("%.1f",ReadingsVal($name,"speed",0))." Km/h"}

Somit ist dann das state z.b. 5.7Km/h

#ob die Messung im Interwall von 5 Sekunden sinnvoll ist, kann ich nicht sagen.Wenn man die Windgeschwindigkeit plotten möchte,gibt das bestimmt ein tolles Zackenmuster.
#Da wäre es wohl sinnvoller wie der Dr. schon in dem anderen Thread erwähnt hatte, den Intervall auf 900 Sekunden zu erhöhen(oder noch höher)
#Im Moment ist es für mich so in Ordnung, jeder andere kann sich den Intervall anpassen wie er das möchte.



betateilchen  <--- my personal hero

Beta-User

Hallo,

deinen Eifer in Ehren, aber wäre es nicht sinnvoll, auch ein Wort über die kritschen Anmerkungen zu verlieren, die zu deinem Thread hier https://forum.fhem.de/index.php/topic,54488.msg460739.html#msg460739 gekommen sind?

Insbesondere:

Zitat von: Prof. Dr. Peter Henning am 07 Juni 2019, 08:00:25
Es ist ein bekanntes Problem, dass einlaufende Impulse an den GPIO-Ports zu großen Latenzen im Raspberry Pi führen können (groß kann auch 90 Minuten heißen...). I konkreten Fall kann das dazu führen, dass das Zählen socher Impulse außerhalb von FHEM dasselbe ausbremst.

Besser ist, eine dezidierte Zählerhardware einzusetzen.
[...]
Zitat von: Prof. Dr. Peter Henning am 12 Juni 2016, 06:31:46
[...]
2. FHEM ist nicht dafür gemacht, einenen Sensor 1x pro Sekunde abzufragen.[...]

Kurz: Auch imo ist das Projekt so nicht zur Nachahmung empfohlen, sondern kann allenfalls mit externer Zählerhardware (z.B. (ungetestet): Arducounter) halbwegs was werden (es gelten aber auch dabei die kritischen Hinweise zur (fehlenden) "Exaktheit" des "anemometer factor"...)

Just my2ct,

Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Topgun

Ich habe den Eltako Windsensor (ca. 50 Euro) mit einem Wemos D1 mini verbunden (ca 2 Euro).
Die Werte gehen über WLAN und MQTT direkt an FHEM (MQTT2_SERVER).

Die Programmierung des Wemos D1 mini habe ich mit ESPhome (yaml-Datei) gemacht.

Die Lösung ist sehr einfach und schnell.
Code und Verdrahtung (Schaltplan kann man das nicht nennen ;)) kann ich gerne bereitstellen.

Sonalshinde


Gambit

Zitat von: Topgun am 17 Juli 2019, 18:10:24
Ich habe den Eltako Windsensor (ca. 50 Euro) mit einem Wemos D1 mini verbunden (ca 2 Euro).
Die Werte gehen über WLAN und MQTT direkt an FHEM (MQTT2_SERVER).

Die Programmierung des Wemos D1 mini habe ich mit ESPhome (yaml-Datei) gemacht.

Die Lösung ist sehr einfach und schnell.
Code und Verdrahtung (Schaltplan kann man das nicht nennen ;)) kann ich gerne bereitstellen.

Hallo,

hätte ich Interesse dran :-)

Gruss,
Michael

Topgun