[GELÖST] DOIFs zusammenfassen

Begonnen von manne44, 29 April 2020, 03:24:22

Vorheriges Thema - Nächstes Thema

manne44

Hallo, ich habe mal eine kleine Frage bezüglich DOIF. Für verschiedene Fenster, deren Zustände in Readings gespeichert sind, habe ich für das Schließen für jedes Fenster ein eigenes DOIF:

define di_Closed_WohnWT DOIF ([oWD:winBad] eq "closed") ( {setValveTempWinClosed("Bad")} )
define di_Closed_WohnV DOIF ([oWD:winWohnV] eq "closed") ( {setValveTempWinClosed("WohnV")} )
define di_Closed_WohnL DOIF ([oWD:winWohnL] eq "closed") ( {setValveTempWinClosed("WohnL")} )
...

Geht das denn nicht eleganter mit einem DOIF? Ich habe verschiedene Schreibweisen aus der CommandRef versucht, habe aber keinen Erfolg gehabt.

define di_Closed DOIF ([oWD:win*] eq "closed") ( {setValveTempWinClosed("???")} )

Wie kann ich dann zu meinem Funktionsargument kommen, das das triggernde Reading angibt?
Es funktioniert zwar mit den 13 DOIFs, aber nur eins wäre eleganter. Vielleicht kennt sich jemand besser aus und kann mir einen Tip geben.
Vielen Dank.
RPI4-Buster mit SSD, RPI-Zero mit Bookworm

MadMax-FHEM

#1
Ich bin ja nicht so in DOIF...

Aber wildcards: *
Ist Dateisystem


Regex: .*
heisst weiteres und unbekannt wieviel davon

Vermutlich könnte das schon helfen...

EDIT: und für "hinten" könnte es $DEVICE für den Gerätenamen sein!?

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

manne44

Vielen Dank, aber das geht so offenbar nicht, denn im Bedingungsteil vorn schon, aber wie bekomme ich das Funktionsargument, also das Reading für die Funktion?
RPI4-Buster mit SSD, RPI-Zero mit Bookworm

manne44

Und $DEVICE habe ich auch versucht, dann kommt das Device und nicht das auslösende Reading.
RPI4-Buster mit SSD, RPI-Zero mit Bookworm

MadMax-FHEM

Dann poste doch mal ein list der beteiligten Geräte...

Wo kommt denn "Bad", "WohnV" etc. her!?

Sind das Attribute beteiligter/auslösender Geräte!?

Dann Abfragen mit AttrVal...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MadMax-FHEM

Zitat von: manne44 am 29 April 2020, 09:24:01
Und $DEVICE habe ich auch versucht, dann kommt das Device und nicht das auslösende Reading.

Das auslösende Reading sollte $READING sein...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

manne44

Ja, das mit dem $READING habe ich in der CommandRef nicht gesehen und werde es mal versuchen. Das Device ist ein Dummy, das ich durch eine Vielzahl von Readings "aufgerüstet" habe, mache ich an vielen Stellen. Wenn ich wüsste wie man sich einen eigenen Typ machen könnte, dann würde ich in diesen Fällen einen eigenen Typ fabrizieren und das so machen, aber ich weiß es nicht.
RPI4-Buster mit SSD, RPI-Zero mit Bookworm

MadMax-FHEM

Zitat von: manne44 am 29 April 2020, 09:30:12
Ja, das mit dem $READING habe ich in der CommandRef nicht gesehen und werde es mal versuchen. Das Device ist ein Dummy, das ich durch eine Vielzahl von Readings "aufgerüstet" habe, mache ich an vielen Stellen. Wenn ich wüsste wie man sich einen eigenen Typ machen könnte, dann würde ich in diesen Fällen einen eigenen Typ fabrizieren und das so machen, aber ich weiß es nicht.

Du kannst auch bestehende Devices "erweitern"...

Mittels userattr für Attribute und setreading "einfach so"...

Ich hatte zu Beginn auch einige Dummy für "solche Dinge".
Gehe aber dazu über auch vorhandene Devices nach Bedarf zu "erweitern"...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Damian

Zitat von: manne44 am 29 April 2020, 03:24:22
Hallo, ich habe mal eine kleine Frage bezüglich DOIF. Für verschiedene Fenster, deren Zustände in Readings gespeichert sind, habe ich für das Schließen für jedes Fenster ein eigenes DOIF:

define di_Closed_WohnWT DOIF ([oWD:winBad] eq "closed") ( {setValveTempWinClosed("Bad")} )
define di_Closed_WohnV DOIF ([oWD:winWohnV] eq "closed") ( {setValveTempWinClosed("WohnV")} )
define di_Closed_WohnL DOIF ([oWD:winWohnL] eq "closed") ( {setValveTempWinClosed("WohnL")} )
...

Geht das denn nicht eleganter mit einem DOIF? Ich habe verschiedene Schreibweisen aus der CommandRef versucht, habe aber keinen Erfolg gehabt.

define di_Closed DOIF ([oWD:win*] eq "closed") ( {setValveTempWinClosed("???")} )

Wie kann ich dann zu meinem Funktionsargument kommen, das das triggernde Reading angibt?
Es funktioniert zwar mit den 13 DOIFs, aber nur eins wäre eleganter. Vielleicht kennt sich jemand besser aus und kann mir einen Tip geben.
Vielen Dank.

z. B. im DOIF-Perl-Mode (geht auch im DOIF-FHEM-Mode):

define di_Closed DOIF {if (["^oWD$:^win",0]  eq "closed") {setValveTempWinClosed ($event)}}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

manne44

Vielen Dank, aber

define di_ClosedWin DOIF {if (["^oWD$:^win",0] eq "closed") {tstWinClosed ($event)}}

triggert überhaupt nicht.

Aber das triggert.

define di_ClosedWin DOIF (["^oWD$:^win",0] eq "closed") ({tstWinClosed ($event)})

Gibt aber Errors:

2020.04.29 10:13:34 1: ERROR evaluating my $NAME='winHolzR';my $EVENT='closed';my $SELF='notify_WinHolzR';my $EVTPART0='closed';my $TYPE='CUL_HM';my $DEV='oWD';{tstWinClosed ($event)}: Global symbol "$event" requires explicit package name (did you forget to declare "my $event"?) at (eval 4389790) line 1.
2020.04.29 10:13:34 2: di_ClosedWin: {tstWinClosed ($event)}: Global symbol "$event" requires explicit package name (did you forget to declare "my $event"?) at (eval 4389790) line 1.

Offenbar existiert eine Variable $event nicht.

In der aufrufenden Funktion soll nur der Name des Funktionsparameters ausgegeben werden:

sub
tstWinClosed($) {
my ($name) = @_;
Log(2,'TEST:'.$name);
}
RPI4-Buster mit SSD, RPI-Zero mit Bookworm

manne44

Aber

define di_ClosedWin DOIF (["^oWD$:^win",0] eq "closed") ({tstWinClosed ($NAME)})

scheint zu funktionieren.
Diese DOIF-Bedingung hatte ich schon versucht, weil sie in der CommandRef beschrieben ist, habe aber den Default-Parameter mit "open" angegeben, weil mir eine 0 da komisch vorkam, und scheiterte.
Ergo:
Es funktioniert und die vielen DOIFs schrumpfen auf eine einzige.
Vielen Dank für die Hilfe.
RPI4-Buster mit SSD, RPI-Zero mit Bookworm