Hallo zusammen,
leider habe ich nichts im Netzt dazu gefunden und meine Versuche laufen nur teilweise. Ich hoffe, als Anfänger hier richtig zu sein.
Folgendes Scenario: Ich empfange an meinem Cul einen Temp/Hum Sensor aus der Nachbarschaft. Das stört mich nicht weiter. Habe ihn ein einem Raum Fremde Sensoren angelegt.
Device: Prologue_145
Die Readings sehen so aus:
battery ok 2017-05-31 13:35:07
channel 0 2017-06-11 06:21:28
humidity 34 2017-06-11 06:20:49
mode normal 2017-01-09 13:49:46
state T: 22.1 2017-06-11 10:42:03
temperature 22.1 2017-06-11 10:42:03
Seit ein paar Tagen habe ich im Pool der Kids einen Pool-Thermometer.
der wird ebenfalls als Prologue_145 erkannt, sendet aber auf Kanal 1
Somit sehen die Readings nahezu identisch aus nur anhand des channels kann ich die Temperaturen unterscheiden:
battery ok 2017-05-31 13:35:07
channel 1 2017-06-11 06:21:28
humidity 34 2017-06-11 06:20:49
mode normal 2017-01-09 13:49:46
state T: 22.1 2017-06-11 10:42:03
temperature 22.1 2017-06-11 10:42:03
Ich habe nun ein Notify auf den Kanal gemacht. Das funktioniert auch gut, solange der fremde Sensor sendet. Leider schneit der aber ab und zu aus zu sein und ich bekomme dann das Notify nicht mehr getriggert.
define n_Pooltemp notify Prologue_145:channel:.1 { fhem("set log_Pooltemperatur ".ReadingsVal('Prologue_145','temperature',''));; my $d= ReadingsVal("log_Pooltemperatur","state",0);; fhem("setreading log_Pooltemperatur temperature $d")}
Wie kann ich die Werte nutzen, die über Kanal 1 kommen.
Es ist in FHEM nur ein Device!
Danke schon jetzt für eure Unterstützung
RUDI
hier nochmal das ganze Device
Hey Barnie1989,
Bitte keine Device Bilder, sondern ein List des Device. Weiterhin kannst du über den EventMonitor gehen und mit dessen Hilfe dir die passende RegEx abfrage für ein Notify ausgeben lassen: https://wiki.fhem.de/wiki/Event_monitor
OK, hier der List:
Internals:
CFGFN /opt/fhem/FHEM/00_include_fremde_sensoren.cfg
CODE CUL_TCM97001_145
CUL_433_MSGCNT 1810
CUL_433_RAWMSG s91810E9008EF; 576: 8624
CUL_433_TIME 2017-06-11 12:12:09
DEF CUL_TCM97001_145
LASTInputDev CUL_433
MSGCNT 1810
NAME Prologue_145
NR 1025
RSSI -82.5
STATE T: 23.3
TYPE CUL_TCM97001
lastH 0
lastT 1497175929
Readings:
2017-05-31 13:35:07 battery ok
2017-06-11 12:04:12 channel 1
2017-06-11 12:04:09 humidity 34
2017-01-09 13:49:46 mode normal
2017-06-11 12:12:09 state T: 23.3
2017-06-11 12:12:09 temperature 23.3
Attributes:
event-min-interval .*:300
event-on-change-reading .*
model Prologue
room FremdeSensoren
Leider stehe ich immer noch auf dem schlauch, wie ich das temperature auslesen kann, wenn der cannel auf 1 ist. Ist er auf 0, dann ignorieren..
eben hat der Nachbar mal wieder gesendet... :)
Internals:
CFGFN /opt/fhem/FHEM/00_include_fremde_sensoren.cfg
CODE CUL_TCM97001_145
CUL_433_MSGCNT 10
CUL_433_RAWMSG s91000E3238DC; 448: 9152
CUL_433_TIME 2017-06-11 12:36:39
DEF CUL_TCM97001_145
LASTInputDev CUL_433
MSGCNT 10
NAME Prologue_145
NR 1025
RSSI -92
STATE T: 22.7 H: 35
TYPE CUL_TCM97001
lastH 0
lastT 1497177399
Readings:
2017-05-31 13:35:07 battery ok
2017-06-11 12:36:39 channel 0
2017-06-11 12:36:39 humidity 35
2017-01-09 13:49:46 mode normal
2017-06-11 12:36:39 state T: 22.7 H: 35
2017-06-11 12:36:39 temperature 22.7
Attributes:
event-min-interval .*:300
event-on-change-reading .*
model Prologue
room FremdeSensoren
Das will ich ignorieren
Warum hast du im notify vor der 1 noch einen . stehen?
Bin mit regex und Notify nicht so fit, bei Ei em doif könntest du mit [<device>:channel] == 1 arbeiten.
Zitat von: Amenophis86 am 11 Juni 2017, 14:14:44
Warum hast du im notify vor der 1 noch einen . stehen?
Bin mit regex und Notify nicht so fit, bei Ei em doif könntest du mit [<device>:channel] == 1 arbeiten.
Das Notify greift so, aber wen der Nachbarsensor nicht zwischendurch auf Kanal 0 was sendet, wird das Notify nur einmal beim Wechsel von 0 auf 1 ausgelöst.
ich möchte eigentlich auf die Temp triggern, aber nur wenn bei Kanal 1 drin steht
Ich frage mal anders, was genau au willst du machen. Für was willst du welchen Wert angreifen und was damit machen?
das mit dem Notify macht folgendes:
Sobald sich das Reading cannel auf 1 ändert, dann wird das Reading Temperature in ein Dummy geschrieben. Dieser Dummy wird in der Datenbank geloggt und eine Grafik erzeugt.
Solange beide Sensoren (Kanal 0 und Kanal 1) senden funktioniert mein Konstrukt auch super. Nur passiert es ab und zu, dass der Senor (irgendwo in der Nachbarschaft Kanal 0) nicht mehr sendet. Somit kommen nur noch Werte mit dem Reading Kanal 1 an. Da sich der Kanal nicht mehr ändert, greift auch der Notify (Wechsel auf 1) nicht mehr und die Tempwerte werden nicht mehr in den Dummy und somit nicht in die Datenbank geschrieben.
Ich suche einen anderen Weg, der die Temperatrur ausliest, wenn in dem Reading cannel 1 steht und in den Dummy schreibt.
Works as designed.
Also normal musst du ja auch nur eine Änderung Loggen, bis dahin ist der Wert ja gleich. Willst du mehr Loggen, dh auch, wenn der Wert sich nicht ändert, dann kannst du zum Beispiel mit http://fhem.de/commandref_DE.html#event-min-interval arbeiten.
Zitat von: Amenophis86 am 11 Juni 2017, 18:07:48
Works as designed.
Also normal musst du ja auch nur eine Änderung Loggen, bis dahin ist der Wert ja gleich. Willst du mehr Loggen, dh auch, wenn der Wert sich nicht ändert, dann kannst du zum Beispiel mit http://fhem.de/commandref_DE.html#event-min-interval arbeiten.
das ist schon klar, nur dann erwische ich evt werte aus Kanal 0
Dann musst du andersherum das notify aufbauen. Setz es auf Temp und bau eine if Abfrage ein, die den Kanal testet und davon abhängig den Wert loggt, oder nicht.
genau do wollte ich hin :) nur muss ich mich mal einlesen... Vielleicht gibt es ja noch einen anderen Weg so ein Multichannel Device sauber zu loggen... Evt. kommt ja der Kanal 2 noch dazu :)
Hier mal ein Tipp:
define n_Pooltemp notify Prologue_145:temp.* { if (...
Wie gesagt, alternativ auch mit DOIF möglich, aber Geschmackssache.