[gelöst] formulieren DOIF Abfrage bei 1wire interface device

Begonnen von Torchwood, 25 Juni 2018, 14:34:11

Vorheriges Thema - Nächstes Thema

Torchwood

Hallo zusammen,

ich möchte mit DOIF den Status einer 1-wire Schnittstelle auswerten und das Ergebnis in ein Dummy schreiben. Die Schnittstelle liefert mir für die beiden Heizungspumpen eine 1 wenn läuft, eine 0 wenn nicht. Das Problem besteht wohl in der Zuordnung des Wertes zu einem der beiden Eingangskanäle, ich schaffe ich es nicht eine Abfrage zu formulieren die auf den Trigger reagiert  :(
Vermutlich ist die Lösung ganz einfach, aber ich hatte schon so viele Fehlversuche. Ich nehme an, das Problem ist das Verarbeiten von Spalte 3 und Spalte 4 in einem Ausdruck

Das steht in der Logdatei:

2018-06-23_06:03:00 Heizung_Pumpe sensed.A: 1
2018-06-23_06:11:16 Heizung_Pumpe sensed.A: 0
2018-06-23_06:11:31 Heizung_Pumpe sensed.A: 1
2018-06-23_06:30:01 Heizung_Pumpe sensed.A: 0
2018-06-23_14:26:48 Heizung_Pumpe sensed.A: 1
2018-06-23_14:44:27 Heizung_Pumpe sensed.A: 0
2018-06-23_20:04:39 Heizung_Pumpe sensed.A: 1
2018-06-23_20:41:26 Heizung_Pumpe sensed.A: 0
2018-06-23_22:10:12 Heizung_Pumpe sensed.B: 1
2018-06-23_22:10:27 Heizung_Pumpe sensed.B: 0
2018-06-23_23:59:00 Heizung_Pumpe sensed.A: 0  sensed.B: 0   << addLog
2018-06-24_00:01:00 Heizung_Pumpe sensed.A: 0  sensed.B: 0   << addLog
2018-06-24_06:03:00 Heizung_Pumpe sensed.A: 1
2018-06-24_06:10:46 Heizung_Pumpe sensed.A: 0
2018-06-24_06:11:01 Heizung_Pumpe sensed.A: 1
2018-06-24_06:22:43 Heizung_Pumpe sensed.A: 0
2018-06-24_13:43:26 Heizung_Pumpe sensed.A: 1
2018-06-24_14:01:33 Heizung_Pumpe sensed.A: 0
2018-06-24_19:38:28 Heizung_Pumpe sensed.A: 1
2018-06-24_19:54:40 Heizung_Pumpe sensed.A: 0
2018-06-24_20:18:06 Heizung_Pumpe sensed.A: 1



Abfrage:

define VL_Pumpe dummy
attr VL_Pumpe event-on-change-reading .*
attr VL_Pumpe room Heizung
attr VL_Pumpe setList Ein Aus
define di_VL_Pumpe DOIF ([Heizung_Pumpe:sensed.A] eq "1") (set VL_Pumpe Ein) (set VL_Pumpe Aus)
attr di_VL_Pumpe do always

define WW_Pumpe dummy
attr WW_Pumpe event-on-change-reading .*
attr WW_Pumpe room Heizung
attr WW_Pumpe setList Ein Aus
define di_WW_Pumpe DOIF ([Heizung_Pumpe:sensed.B] eq "1") (set WW_Pumpe Ein) (set WW_Pumpe Aus)
attr di_WW_Pumpe do always


Hat wer einen Tip für mich? Ich krieg den Perl Ausdruck nicht hin.

Gruß
Volker

Beta-User

Vielleicht kommst du in dem Fall mit einem ReadingsProxy schneller zum Ziel. Dieses Modul dient dazu, einzelne Readings aus "Großdevicen" mit mehreren Kanälen darzustellen; gibt glaube ich im 1-wire-Bereich im Wiki auch Beispiele dazu.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Ellert

Zitat von: Torchwood am 25 Juni 2018, 14:34:11
Hallo zusammen,

ich möchte mit DOIF den Status einer 1-wire Schnittstelle auswerten und das Ergebnis in ein Dummy schreiben. Die Schnittstelle liefert mir für die beiden Heizungspumpen eine 1 wenn läuft, eine 0 wenn nicht. Das Problem besteht wohl in der Zuordnung des Wertes zu einem der beiden Eingangskanäle, ich schaffe ich es nicht eine Abfrage zu formulieren die auf den Trigger reagiert  :(
Vermutlich ist die Lösung ganz einfach, aber ich hatte schon so viele Fehlversuche. Ich nehme an, das Problem ist das Verarbeiten von Spalte 3 und Spalte 4 in einem Ausdruck

Das steht in der Logdatei:

2018-06-23_06:03:00 Heizung_Pumpe sensed.A: 1
2018-06-23_06:11:16 Heizung_Pumpe sensed.A: 0
2018-06-23_06:11:31 Heizung_Pumpe sensed.A: 1
2018-06-23_06:30:01 Heizung_Pumpe sensed.A: 0
2018-06-23_14:26:48 Heizung_Pumpe sensed.A: 1
2018-06-23_14:44:27 Heizung_Pumpe sensed.A: 0
2018-06-23_20:04:39 Heizung_Pumpe sensed.A: 1
2018-06-23_20:41:26 Heizung_Pumpe sensed.A: 0
2018-06-23_22:10:12 Heizung_Pumpe sensed.B: 1
2018-06-23_22:10:27 Heizung_Pumpe sensed.B: 0
2018-06-23_23:59:00 Heizung_Pumpe sensed.A: 0  sensed.B: 0   << addLog
2018-06-24_00:01:00 Heizung_Pumpe sensed.A: 0  sensed.B: 0   << addLog
2018-06-24_06:03:00 Heizung_Pumpe sensed.A: 1
2018-06-24_06:10:46 Heizung_Pumpe sensed.A: 0
2018-06-24_06:11:01 Heizung_Pumpe sensed.A: 1
2018-06-24_06:22:43 Heizung_Pumpe sensed.A: 0
2018-06-24_13:43:26 Heizung_Pumpe sensed.A: 1
2018-06-24_14:01:33 Heizung_Pumpe sensed.A: 0
2018-06-24_19:38:28 Heizung_Pumpe sensed.A: 1
2018-06-24_19:54:40 Heizung_Pumpe sensed.A: 0
2018-06-24_20:18:06 Heizung_Pumpe sensed.A: 1



Abfrage:

define VL_Pumpe dummy
attr VL_Pumpe event-on-change-reading .*
attr VL_Pumpe room Heizung
attr VL_Pumpe setList Ein Aus
define di_VL_Pumpe DOIF ([Heizung_Pumpe:sensed.A] eq "1") (set VL_Pumpe Ein) (set VL_Pumpe Aus)
attr di_VL_Pumpe do always

define WW_Pumpe dummy
attr WW_Pumpe event-on-change-reading .*
attr WW_Pumpe room Heizung
attr WW_Pumpe setList Ein Aus
define di_WW_Pumpe DOIF ([Heizung_Pumpe:sensed.B] eq "1") (set WW_Pumpe Ein) (set WW_Pumpe Aus)
attr di_WW_Pumpe do always


Hat wer einen Tip für mich? Ich krieg den Perl Ausdruck nicht hin.

Gruß
Volker
Ausgangspunkt für Events und damit für den Triggerausdruck ist immer der Eventmonitor und nicht die Logdatei.
Es stellt sich die Frage, ob sensed.B ein Reading von Heizung_Pumpe ist
(set WW_Pumpe Ein) (set WW_Pumpe Aus)
Pumpe ein und gleich wieder aus erscheint sinnlos, was soll da wirklich passieren?

Torchwood

#3
Äh, wusste ich doch, dass es wohl nur eine Kleinigkeit ist  ;)

Da hab ich irgendwann das DOELSE wegoptimiert, kaum macht man's richtig, funktioniert es auch schon ;D


define di_WW_Pumpe DOIF ([Heizung_Pumpe:sensed.B] == 1) (set WW_Pumpe Ein) DOELSE (set WW_Pumpe Aus)


Ich hatte mich so auf die Abfrage konzentriert, dass das komplett untergegangen ist -jetzt geht's - Dankeschön!
sensed.B war schon korrekt (siehe device Definition)

Volker

Ellert

Ja, Bilder sind beim Antworten nicht zu sehen und vorher habe ich sie mir nicht angesehen.

Daher ist es immer besser die Ausgabe von list <devicename> zu posten, statt Bilder.