DOIF-Perl - Im Ausführungsteil Atribut lesen und als String verwenden ?

Begonnen von dirk_69, 09 November 2025, 17:50:46

Vorheriges Thema - Nächstes Thema

dirk_69

Hallo zusammen,
ich habe ein Problem, welches ich mit tagelangem Probieren und Forum-Recherche nicht gelöst bekomme.
Ich bekomme die Kombi aus DOIF, PERL, Attribute, Zeichenketten usw einfach nicht auf die Reihe.

Aufgabe:
DOIF erstellt ein Device und Trägt in den "Alias" den Inhalt des "Alias" vom Trigger.
Der letzte Teil gelingt nicht.

Meine Versuche (einige hatte ich schon gelöscht, bevor ich mit dem Auskommentieren anfing)
defmod DI_TEST_OnForV2 DOIF WatchErzeugen {\
  $_counter= [":on-for-timer":"[^set\_on\-for\-timer ]* (\d+)",600];;\
  fhem("defmod watches_$device watches Digital");;\
##  fhem("attr watches_$device alias {AttrVal($device,alias,0)} ");;\
##  fhem("attr watches_$device alias [$device,alias] ");;\
##  fhem("attr watches_$device alias [device,alias] ");;\
  { my $eff = "[device,alias]";; fhem("attr watches_$device alias ".$eff) }\
##  fhem("attr watches_$device alias [$device,$alias]");;\

Wenn es nicht vollkommen fehlschlägt, bekomme ich maximal das folgende ins Attribut eingetragen:
::InternalDoIf(HASH(0x557a88cf8b30),'device','STATE','alias')
Wie müsste solch eine Zeile aussehen, um das gewünschte zu erreichen?
Kann mir da jemand helfen?

Vielen Dank
Dirk

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dirk_69

Einfach nur geraten. Und offensichtlich falsch.
In den DOIF-PERL-beispielen ist folgendes zu finden:    define di_lamp DOIF {if ([lamp:state] eq "on) {fhem("push lamp on")}}
Ich habe alle möglichen und unmöglichen Varianten, die ich irgendwo in FHEM gesehen habe (oder glaube gesehen zu haben) durchprobiert.
Wie gesagt, habe ich dazu nichts gefunden, was mir geholfen hätte.

Hast du einen Tip, wie es funktioniert oder wo steht, wie es geht?

Danke

Damian

Für Attribute kannst du die FHEM-Funktion AttrVal benutzen.

AttrVal($device,"alias",0)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dirk_69

Das hatte ich bei meinen zahlreichen Versuchen bestimmt auch schon.
Eine Zeile bei welcher die Anführungszeichen fehlen ist sogar noch in den "Resten".
Leider passiert bei
fhem("attr watches_$device alias {AttrVal($device,"alias",0)} ");garnichts. Bestimmt habe ich die Klammern komplett falsch gesetzt.
... oder muss ich das in ein "Miniscript" einbauen?
Dirk

dirk_69

Danke.
Jetzt hat es geklappt.
mit
  { my $eff = AttrVal($device,"alias",0); fhem("attr watches_$device alias ".$eff) };
Passiert das gewünschte.
Anregungen für Optimierungen nehme ich natürlich gerne an.

TomLee

Zitat von: dirk_69 am 09 November 2025, 23:21:10Anregungen für Optimierungen nehme ich natürlich gerne an.

Hallo,

die Variable kannst dir sparen und das AttrVal direkt anhängen:

{ fhem("attr watches_$device alias ".AttrVal($device,"alias",0)) }