Autor Thema: I2C Sensoren erfassen in FHEM. Aber wie?  (Gelesen 6210 mal)

Offline thymjan

  • Full Member
  • ***
  • Beiträge: 213
Antw:I2C Sensoren erfassen in FHEM. Aber wie?
« Antwort #15 am: 06 Juli 2019, 14:18:58 »
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.
« Letzte Änderung: 06 Juli 2019, 14:40:24 von thymjan »
RaspPi A+/B/B+/2 mit FHEM | FHEM2FHEM | pilight_ctrl _switch 433Mhz _temp DHT22, 1-wire DS18S20 DS18B20
Arduino mit configurableFirmata FRM USB/ENC28J60 I2C_SHT21 bzw. HTU21D-F, I2C_BMP180 | intelligente (passive) Gewölbekellerlüftung mit dewpoint / STELLMOTOR piFace

Offline hankyzoolander

  • Full Member
  • ***
  • Beiträge: 140
Antw:I2C Sensoren erfassen in FHEM. Aber wie?
« Antwort #16 am: 06 Juli 2019, 14:42:41 »
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.

Offline thymjan

  • Full Member
  • ***
  • Beiträge: 213
Antw:I2C Sensoren erfassen in FHEM. Aber wie?
« Antwort #17 am: 06 Juli 2019, 14:45:59 »
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.
RaspPi A+/B/B+/2 mit FHEM | FHEM2FHEM | pilight_ctrl _switch 433Mhz _temp DHT22, 1-wire DS18S20 DS18B20
Arduino mit configurableFirmata FRM USB/ENC28J60 I2C_SHT21 bzw. HTU21D-F, I2C_BMP180 | intelligente (passive) Gewölbekellerlüftung mit dewpoint / STELLMOTOR piFace

Offline thymjan

  • Full Member
  • ***
  • Beiträge: 213
Antw:I2C Sensoren erfassen in FHEM. Aber wie?
« Antwort #18 am: 06 Juli 2019, 15:02:14 »
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/
« Letzte Änderung: 06 Juli 2019, 17:44:49 von thymjan »
RaspPi A+/B/B+/2 mit FHEM | FHEM2FHEM | pilight_ctrl _switch 433Mhz _temp DHT22, 1-wire DS18S20 DS18B20
Arduino mit configurableFirmata FRM USB/ENC28J60 I2C_SHT21 bzw. HTU21D-F, I2C_BMP180 | intelligente (passive) Gewölbekellerlüftung mit dewpoint / STELLMOTOR piFace

Offline hankyzoolander

  • Full Member
  • ***
  • Beiträge: 140
Antw:I2C Sensoren erfassen in FHEM. Aber wie?
« Antwort #19 am: 11 Juli 2019, 14:50:52 »
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?
« Letzte Änderung: 11 Juli 2019, 19:26:40 von hankyzoolander »

Offline thymjan

  • Full Member
  • ***
  • Beiträge: 213
Antw:I2C Sensoren erfassen in FHEM. Aber wie?
« Antwort #20 am: 11 Juli 2019, 21:36:51 »
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...
RaspPi A+/B/B+/2 mit FHEM | FHEM2FHEM | pilight_ctrl _switch 433Mhz _temp DHT22, 1-wire DS18S20 DS18B20
Arduino mit configurableFirmata FRM USB/ENC28J60 I2C_SHT21 bzw. HTU21D-F, I2C_BMP180 | intelligente (passive) Gewölbekellerlüftung mit dewpoint / STELLMOTOR piFace