Hauptmenü

Reading inkrementieren in Perl

Begonnen von BeetleX, 06 Februar 2022, 13:48:09

Vorheriges Thema - Nächstes Thema

BeetleX

Hallo,

ich habe Probleme, im Ausführungsteil von DOIF auf Perl umzustellen. Es soll später komplexer werden, hier aber der simple Fall: ein Reading inkrementieren und entsprechend setzen.

(set MQTT2_WLED effect {([MQTT2_WLED:effect]+1);})
funktioniert wie erwartet.

{my $eff = [MQTT2_WLED:effect]+1; fhem_set("MQTT2_WLED effect ".$eff) }}
wirft 'Argument "set 2" isn't numeric in addition (+)'

Was mache ich falsch?

Damian

bei mir funktioniert alles wie es soll:

defmod di_inc DOIF {my $eff = [test]+1;; fhem_set("test ".$eff) }

die Rekursion wird von FHEM unterbunden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

BeetleX

Rekursion? Ich habe doch nur den Ausführungsteil angegeben, komplett steht dort
defmod di.wled DOIF {if([+:01]) {my $eff = [MQTT2_WLED:effect]+1; fhem_set("MQTT2_WLED effect ".$eff) }}

Im MQTT2-device WLED sehe ich allerdings, dass das Reading "effect" nach einem manuellen Setzen kurz auf z.B. "set 3" steht, dann gleich auf "3".
Das DOIF triggert nach 1 min, trotzdem scheint die Bewertung [MQTT2_WLED:effect] ein "set 3" zu liefern. Das addiert mit 1 ergibt 1 und den Fehler 'Argument "set 3" isn't numeric in addition (+)'.
Warum lese ich 1 min nach set "set 3", obwohl das Reading schon lange auf "3" steht? FIFO?


Damian

Zitat von: BeetleX am 06 Februar 2022, 18:27:46
Rekursion? Ich habe doch nur den Ausführungsteil angegeben, komplett steht dort
defmod di.wled DOIF {if([+:01]) {my $eff = [MQTT2_WLED:effect]+1; fhem_set("MQTT2_WLED effect ".$eff) }}

Im MQTT2-device WLED sehe ich allerdings, dass das Reading "effect" nach einem manuellen Setzen kurz auf z.B. "set 3" steht, dann gleich auf "3".
Das DOIF triggert nach 1 min, trotzdem scheint die Bewertung [MQTT2_WLED:effect] ein "set 3" zu liefern. Das addiert mit 1 ergibt 1 und den Fehler 'Argument "set 3" isn't numeric in addition (+)'.
Warum lese ich 1 min nach set "set 3", obwohl das Reading schon lange auf "3" steht? FIFO?

Du bist im Perlmodus und hier hast du zwei Trigger eingebaut: [+:01] und [MQTT2_WLED:effect]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

BeetleX

ausgelöst wird aber erst nach der vollen Minute. Und da zeigt mir das Device schon lange eindeutig "3". Ich verstehe den Mechanismus nicht, wie/wann sich das "set 3" dort reinmogelt - ?

Damian

Zitat von: BeetleX am 06 Februar 2022, 18:42:08
ausgelöst wird aber erst nach der vollen Minute. Und da zeigt mir das Device schon lange eindeutig "3". Ich verstehe den Mechanismus nicht, wie/wann sich das "set 3" dort reinmogelt - ?

Das kann ich dir nicht sagen, ich würde den unnützen Trigger [MQTT2_WLED:effect] dennoch deaktivieren mit: [?MQTT2_WLED:effect]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

BeetleX

OK, das war´s. Trotzdem verstehe ich nicht, wie die Events hier herumtrollen.
Dann müsste der Ausführungsteil ja unabhängig von der DOIF-Bedingung zumindest bewertet werden?. Wirft dann zuerst den Fehler, müßte aber doch später bei der vollen Minute funktionieren? Macht er aber nicht. Kann das jemand erklären?  :-[