I2C Sensoren erfassen in FHEM. Aber wie?

Begonnen von Burny4600, 18 Juli 2016, 14:12:51

Vorheriges Thema - Nächstes Thema

thymjan

#15
Zitat von: hankyzoolander am 06 Juli 2019, 13:29:29
Wo ich noch nicht ganz durchblicke, ist mit der justierung des Sensors.
Wurde bis jetzt aus den Internet Beispielen noch nicht erleuchtet :o ::)
Also wenn da jemand ein paar Tips hätte wär das toll.

Such mal nach "AS3935 demoboard pdf". Bei dieser Lektüre sind mir die Parameter etwas klarer geworden.
Und schau direkt bei GitHub in den python Quelltext der Bibliothek. Da hats gute Erklärungen.
https://github.com/pcfens/RaspberryPi-AS3935/blob/master/RPi_AS3935/RPi_AS3935.py

Das sind die Entscheidungen (so wie ich sie verstanden habe...):

  • drinnen/draußen (set_indoors)
  • nach wie vielen Ereignissen anschlagen (set_min_strikes)
  • Rauschpegel justieren um Fehlalarme zu vermeiden (set_noise_floor)
  • deinen Schwingkreis (mit Spule) kalibrieren, bzw. den spezifischen Board-Wert eingeben (calibrate)
  • ob Störer maskiert werden sollen (kann der IC selbst erkennen) (set_mask_disturber)

Ich habe einen Sensor, der vom Werk her vermessen und gelabelt ist (0x05).
Der Schwingkreis für die Antenne muss eine Frequenz von 500kHz erreichen.
Man kann die Frequenz auf den Interrupt pin legen (set_disp_lco), vermutlich mit einem Oszi messen und dann die Anzahl (0-15) der Kondensatoren (tun_cap) erhöhen oder erniedrigen bis die 500kHz am besten erreicht sind.

hankyzoolander

Hallo, danke für die schnelle Antwort. Super.
Ok mit deinen Tips bin ich jetzt schon mal etwas weiter.  ;)

Bleibt nur noch die Frage mit der kalibration des Sensors.
###deinen Schwingkreis (mit Spule) kalibrieren, bzw. den spezifischen Board-Wert eingeben (calibrate)###
Also auf dem Board steht GAR nix. werde mich mal durch die tiefen des Internets durchsuchen ob da jemand den selben Sensor wie ich hat.
betateilchen  <--- my personal hero

thymjan

Zitat von: hankyzoolander am 06 Juli 2019, 14:42:41
Bleibt nur noch die Frage mit der kalibration des Sensors.
###deinen Schwingkreis (mit Spule) kalibrieren, bzw. den spezifischen Board-Wert eingeben (calibrate)###
Also auf dem Board steht GAR nix. werde mich mal durch die tiefen des Internets durchsuchen ob da jemand den selben Sensor wie ich hat.

Die Crux ist, dass jedes Board anders ist. Die Jungs von
https://www.embeddedadventures.com/as3935_lightning_sensor_module_mod-1016.html
haben den Job für mich erledigt. Da klebt auch auf jedem Sensor ein anderer Wert.

thymjan

#18
Wobei, wenn ich mir das genau überlege:
Um die Frequenz von einem Digitalen Signal zu messen, muss man nur gut zählen können.
Also wie oft meldet sich der Interrupt-Pin pro Sekunde. 1 Hz bedeutet 1x pro Sekunde, 500 kHz demnach 500.000 x pro Sekunde.
Wieviel Takte benötigt man zum Zählen, welcher Mikroprozessor macht das vernünftig mit?

http://laagewitt.de/nano-scope-oszilloskop-mit-arduino-und-lcd-display/
Mit einem Arduino Nano ist bei 200Hz wohl Schluss... (für analoge Signale)

Edit:
vielleicht geht's mit dem raspi:
https://forum-raspberrypi.de/forum/thread/39413-frequenzmessung-mit-dem-raspberry-pi/?postID=337826#post337826

Hier eine Lösung mit einem Kernel-Modul:
https://www.kampis-elektroecke.de/2018/08/frequenzmessung-auf-dem-raspberry-pi/

hankyzoolander

#19
hallo,
ich hatte ganz übersehen das thymjan sein Script gepostet hat ???

Genau so hatte ich es vor. Anstatt mit import os halt import fhem.
Habe das Script auch fertig, aber lese damit nur die Entfernung aus.
War aber mal so frei und habe dein Script übernommen ;)
Gute Sache. Läuft jetzt seit einigen Tagen auch durch. Habe mir nur das StateFormat etwas angepasst und es auf entfernung und energy reduziert.
Sehr gutes Script.Tolle Arbeit
#Daumen Hoch#

Habe auch schon 3 "Blitze" geortet.
31km
27km
17km

Hab mal im Datenblatt des Sensors nach der errechneten Energie nachgelesen. Ist dort angegeben als einheit ohne Wert(Bezeichnung)
hmm... hab es einfach unter energie abgelegt ;D

Mit der Kalibration des Sensors teste ich mich einfach mal durch.
Hab ihn jetzt auf 0x05 stehen. Laut wetterbericht sollen wir hier die nächsten beiden Tagen Gewitter bekommen.
Ich warte mal ab und behalte das im Auge.

Noch ne kleine Frage:
rückst du mit Leerzeichen ein?
betateilchen  <--- my personal hero

thymjan

Zitat von: hankyzoolander am 11 Juli 2019, 14:50:52
Noch ne kleine Frage:
rückst du mit Leerzeichen ein?

Ja, ich rücke mit Leerzeichen ein.

Ganz optimal ist das Script noch nicht.
Bei der Interrupt-Behandlung im Blitz-Fall habe ich folgende Änderung vorgenommen:

    elif reason == 0x08:
        distance = sensor.get_distance()
        energy = sensor.get_energy()
        os.system('perl /opt/fhem/fhem.pl 7072 "setreading AS3935 distance '+str(distance)+';setreading AS3935 energy '+str(energy)+'"')

Gelegentlich hatte ich hier Readings mit energy=0, da vermutlich bei der Abfrage des Sensor zu viel Zeit verstrichen ist.

Und ich habe noch eine Fehler-Behandlung eingebaut, da ich gelegentlich einen IOError habe und der heartbeat trotzdem weiter läuft:

while True:
    try:
        if counter > 30:
            counter = 0
            os.system('perl /opt/fhem/fhem.pl 7072 "setreading AS3935 heartbeat present;setreading AS3935 error absent"')
        counter = counter + 1
        time.sleep(2.0)

    except Exception as ex:
        os.system('perl /opt/fhem/fhem.pl 7072 "setreading AS3935 error %s present;setreading AS3935 heartbeat absent"' % (ex-message))
        GPIO.cleanup()

Aber ich kenn' mich da nicht wirklich aus...

chris8868

Hallo Zusammen

Hab nun auch den Blitz Sensor angeschlossen.
Kann mir jemand helfen, wie und wo ich das Script als Service installieren muss?

Vielen Dank und Grüsse
Chris

uwirt

Ich möchte von der zentralen FHEM Instanz aus die Werte des Blitzsensors der sich an in einem RPI im Estrich befindet abfragen.

Weiss jemand wie?
FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS100-C6-O|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart

uwirt

#23
Ich habe das jetzt damit hingegkriegt, indem ich das fhem Python modul auf dem Estrich-RPI benutze.

noch eine Frage:



Zitat von: thymjan am 11 Juli 2019, 21:36:51

    except Exception as ex:
        os.system('perl /opt/fhem/fhem.pl 7072 "setreading AS3935 error %s present;setreading AS3935 heartbeat absent"' % (ex-message))
        GPIO.cleanup()

Das sieht bei mir jetzt so aus:


except Exception as ex:
  fh.send_cmd("setreading " + Device + "error %s present " , "setreading " + Device + "heartbeat absent " % (ex-Message))
  GPIO.cleanup()


Nur leider kriege ich da einen Fehler:

Traceback (most recent call last):
  File "lightning.py", line 72, in <module>
    if counter > 30:
NameError: name 'counter' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "lightning.py", line 78, in <module>
    fh.send_cmd("setreading " + Device + "error %s present " , "setreading " + Device + "heartbeat absent " % (ex-Message))
TypeError: unsupported operand type(s) for -: 'NameError' and 'str'
FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS100-C6-O|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart

thymjan

Hallo Urs,

anbei meine aktuelle Version. Hab nun schon länger nichts mehr daran gemacht.
Ich vermute dass meine Fehlerbehandlung am Schluß etwas Schmuh ist, ich hab' das nicht wirklich kapiert als ich das vor einem Jahr zusammengeschustert habe.
Vielleicht kann uns da ein Profi noch Tips geben?
Mein Sensor liefert auch nur enttäuschende Werte, hab ihn aussen am Fenster montiert, aber unser Dach ist mit Kupfer abgedeckt. Das schirmt vermutlich ziemlich viel ab, bzw. Signale aus der Wohnung etc. werden reflektiert und falsch interpretiert.

Grüße,
Stefan