Hauptmenü

Der Windsensor

Begonnen von hankyzoolander, 10 Juni 2016, 21:49:09

Vorheriges Thema - Nächstes Thema

hankyzoolander

Hallo,
ich habe von einer alten Wetterstation einen Anemometer übrig. (siehe Bild)
Diesen möchte ich gerne in Fhem einbinden.
Der Sensor har 2 Leitungen. eine ist an 3,3Volt die andere an GPIO22.
Das ganze mit:
define test RPI_GPIO 22 in fhem eingebunden. (Sensor dreht, state geht von off auf on im wechsel.

Dann hourCounter erstelt:
define zaehler hourCounter test:Pinlevel:.high test:Pinlevel:.low   (zählt wunderbar)

Hat jemand eine Idee wie ich daraus eine Anzeige hinbekomme die mir Wind KM/h anzeigt?
Wenn der Sensor in einer Sekunde 1 Umdrehung macht, sind das 2,14KM/h Wind.
Wie oft fragt man den Sensor ab? Alle 5 Sekunden? jede Sekunde?
Es wär toll wenn er auch Windböhen anzeigen würde.

Habe gerade noch ein Python script im Netz Gefunden.
Wie könnte man das fhem tauglich basteln?

The following algorithm can be used to calculate wind speed:

    For each time period t
    --- count = recorded anemometer signals --- rotations = count / 2
    --- distance = rotations 2 pi * radius (9cm)
    --- speed = distance / t (in cm/s)

    To convert speed into km/h
    --- speed = speed / 100000 (km/s)
    --- speed = speed * 3600 (km/h)

    To compensate for anemometer factor
    --- speed = speed * 1.18








import RPi.GPIO as GPIO
import time, math

pin = 5
count = 0

def calculate_speed(r_cm, time_sec):
    global count
    circ_cm = (2 * math.pi) * r_cm
    rot = count / 2.0
    dist_km = (circ_cm * rot) / 100000.0 # convert to kilometres
    km_per_sec = dist_km / time_sec
    km_per_hour = km_per_sec * 3600 # convert to distance per hour
    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)
    print (calculate_speed(9.0, interval), "kph")
betateilchen  <--- my personal hero

Prof. Dr. Peter Henning

Ich habe einen Windsensor aus einer WS2800 Wetterstation auf 1-Wire umgerüstet: Zähler für die Geschwindigkeit, und mit Hilfe des vorhandenen Winkelcodierers auch eine Richtungsanzeige.

Als Theoretischer Physiker war ich eigentlich ganz optimistisch, dass man relativ einfach berechnen kann, welche Rotationsfrequenz zu welcher Windgeschwindigkeit gehört. Pustekuchen - denn das, was in dem obigen Post euphemistisch als "anemometer factor" bezeichnet wird, ist extrem von den Einbauverhältnissen abhängig. Ohne komplizierten Anströmtest ist das nur eine sehr vage Schätzung.

Betreffend die Messung selbst: Eine Messung alle 60 Sekunden liefert einen wild schwankenden Wert. Erst mit einem gleitenden Durchschnitt von 900 Sekunden (siehe dazu meinen Artikel im FHEM-Wiki) ist das einigermaßen sinnvoll.

LG

pah


hankyzoolander

hallo,
ich möchte den Wind nicht in einem Plot darstellen. (siehe Bild)
Aktuell habe ich einen hourCounter der die Impulse zählt.
die ich widerum mit folgendem UserReading umrechne.
wind {sprintf "%.1f", ReadingsVal("cn.zaehler","state",0)*1.18}

Ob das so stimmt, kein Plan.
Dazu noch ein notify das im Moment alle 10 Sekunden den counter auf nul stellt.
Hätte gern eine Anzeige die den aktuellen Wind in KM/h darstellt.
Möchte den Wind nicht loggen oder Plotten.
Hat jemand eine Idee?
betateilchen  <--- my personal hero

Prof. Dr. Peter Henning

Meine Güte, da ist wirklich kein Plan vorhanden  ::) ::)

1. FHEM ist nicht in Python geschrieben, man kann also kein Python-Programm "fhem tauglich basteln".

2. FHEM ist nicht dafür gemacht, einenen Sensor 1x pro Sekunde abzufragen.

3. Das Modul HourCounter ist für langsame Veränderungen gedacht, also Vorgänge der Form "Sekunden pro Impuls". Ein Windsensor liefert aber schnelle Impulse, man möchte also "Impulse pro Sekunde" auswerten.

Meine Empfehlung zur Vorgehensweise:
1. Anfängerdokumentation FHEM lesen, um zu verstehen, wie FHEM funktioniert
2. Recherchieren "Zähler mit S0-Ausgang Raspberry Pi"
3. Hier lesen https://forum.fhem.de/index.php/topic,14807.0.html

pah

hankyzoolander

So,nach genau fast 3 Jahren des letzten Posts in diesem Thread, hab ich mich mal drangesetzt und mich um den Windsensor gekümmert.

Die Anfängerdokumentation habe ich NICHT gelesen! (Da ich das schon vor Jahren gemacht habe)

Natürlich weiß ich das Fhem nicht in Python geschrieben ist.(Das wusste ich auch schon vor 3 Jahren)

Was ich damals meinte war, ob man eine Möglichkeit hätte ein Python script zu verwenden welches den Sensor auswertet und die Werte dann an fhem übergibt. Hatte meine Version mit dem HourCounter verworfen.

Jetzt habe ich eine tolle Lösung gefunden die auch sehr gut funktioniert.

                                         Mit Python
betateilchen  <--- my personal hero

pwlr

Moin,

ZitatJetzt habe ich eine tolle Lösung gefunden die auch sehr gut funktioniert.

das interessiert mich, magst Du diese Lösung genauer vorstellen ?

Danke schon mal
Bernd

Prof. Dr. Peter Henning

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.

Und einen Grund für den Einsatz von Python sehe ich immer noch nicht.


LG

pah

JoWiemann

Zitat von: Prof. Dr. Peter Henning am 07 Juni 2019, 08:00:25

Und einen Grund für den Einsatz von Python sehe ich immer noch nicht.


Ist halt im Moment hip. Wer etwas auf sich hält, programmiert in Python. Den besten Spruch habe ich vor ein paar Wochen von unseren Data Scientisten gehört: "Wir sind jetzt total modern und ganz weit vorne. Wir analysieren mit Python."

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

hankyzoolander

#8
Hallo,

gelöstes Problem mit Anleitung befindet sich hier
https://forum.fhem.de/index.php/topic,101289.0.html

Also wenn das alles so in Ordnung ist, würde ich meinen man könnte hier dicht machen.
betateilchen  <--- my personal hero