Wertübergabe von Lichtsensor -> Notify -> S7_AWrite

Begonnen von Thomas41587, 18 September 2017, 14:55:35

Vorheriges Thema - Nächstes Thema

Thomas41587

Hallo zusammen,

in meinem aktuellen Testaufbau habe ich einen TSL2561 Lichtsensor (I2C_TSL2561) via I2C (RPII2C) an meinem raspberry angeschlossen. Dieser liefert auch zuverlässig seine Werte. Zusätzlich ist eine LOGO! 8 angeschlossen, auf die ich mittels S7_AWrite zugreifen kann. Das manuelle Schreiben eines Analogwerts über den Set Befehl in FHEM funktioniert hier auch zuverlässig.
Jetzt möchte ich den Lichtwert vom Sensor über ein Notify an die LOGO übergeben, was leider nur unzuverlässig funktioniert. Teilweise funktioniert es einige Stunden, dann ändert sich der Wert in der Logo nicht mehr (manuelles setzen funktioniert weiterhin).
Habe ich irgendwo einen Denkfehler? Mache ich das ganze hier zu kompliziert?

Logo:
defmod kg_logo_master_nai31 S7_AWrite db 0 502 s16
attr kg_logo_master_nai31 IODev kg_logo_master
attr kg_logo_master_nai31 alias Wohnzimmer Licht Nord Logo
attr kg_logo_master_nai31 room Wohnzimmer


Sensor:
defmod pub_eg_wz_nord_tsl2561 I2C_TSL2561 0x29
attr pub_eg_wz_nord_tsl2561 IODev priv_eg_wz_i2c_3
attr pub_eg_wz_nord_tsl2561 alias Wohnzimmer Licht Nord
attr pub_eg_wz_nord_tsl2561 autoGain 1
attr pub_eg_wz_nord_tsl2561 autoIntegrationTime 1
attr pub_eg_wz_nord_tsl2561 floatArithmetics 1
attr pub_eg_wz_nord_tsl2561 group Sensoren
attr pub_eg_wz_nord_tsl2561 poll_interval 1
attr pub_eg_wz_nord_tsl2561 room Wohnzimmer
attr pub_eg_wz_nord_tsl2561 stateFormat {"Licht: " . ReadingsVal($name,"luminosity",0) . "lx - IR: " . ReadingsVal($name,"ir",0) . "lx" }


Übergabenotify:
defmod priv_eg_wz_nord_tsl2561_uebergabe notify pub_eg_wz_nord_tsl2561:luminosity.* set kg_logo_master_nai31 $EVTPART1\
attr priv_eg_wz_nord_tsl2561_uebergabe room Wohnzimmer

bzw.
defmod priv_eg_wz_nord_tsl2561_uebergabe notify pub_eg_wz_nord_tsl2561:luminosity.* set kg_logo_master_nai31 sprintf("%.0f",$EVTPART1)\
attr priv_eg_wz_nord_tsl2561_uebergabe room Wohnzimmer


rudolfkoenig

Das \ am Ende der notify ist falsch (oder zumindest nicht offensichtlich richtig).
Weiterhin kann man nicht FHEM-Befehle (set) mit perl (sprintf) einfach mischen, man muss alles in perl schreiben:
defmod priv_eg_wz_nord_tsl2561_uebergabe notify pub_eg_wz_nord_tsl2561:luminosity.* { fhem("set kg_logo_master_nai31 ".sprintf("%.0f",$EVTPART1)) }
(ungetestet)

Thomas41587

Danke für die Hilfe, jetzt funktioniert es!  :)
Falls jemand mal das gleiche Problem haben sollte:
Offenbar gab es zwei Probleme. Zum einen liefert der Sensor bei kleinen Werten keine Ganzzahlen, sondern Kommazahlen. Der Analogwert der LOGO kann aber nur Ganzzahlen annehmen. Dadurch kam es offenbar zu einem Problem. Diese Problem wollte ich mittels Runden umgehen, hatte aber Codes vermischt. Seit der Korrektur funktioniert jetzt alles wie gewünscht