Hauptmenü

[gelöst] Perlcode in set_Exec

Begonnen von FHEMAN, 04 Oktober 2021, 22:19:27

Vorheriges Thema - Nächstes Thema

FHEMAN

Hallo,
laut Dokumentation kann ich Perlcode in set_Exec im Doif Perlmodus aufrufen. Außerdem möchte ich Perl-Variablen verwenden. Beides bekomme ich nicht richtig hin. Was mache ich falsch?
Fehlermeldung: condition c01: Bad name after Autobeschattung', line 44

if (!get_Exec("sleep.Wait.Autobeschattung.$compass")) {
set_Exec("sleep.Wait.Autobeschattung.$compass",$waitDown,'if ([struc.Rollos.$compass:state] ne "$dir" && [Autobeschattung:state] eq "on") { fhem("setex Rollos.$compass $dir-force Autobeschattung:$compass:$dir:$waitDown")}');
}

Mein Ziel ist es, sleep zu vermeiden.
Danke für jede Hilfe.

Ronny
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Damian

#1
Zitat von: FHEMAN am 04 Oktober 2021, 22:19:27
Hallo,
laut Dokumentation kann ich Perlcode in set_Exec im Doif Perlmodus aufrufen. Außerdem möchte ich Perl-Variablen verwenden. Beides bekomme ich nicht richtig hin. Was mache ich falsch?
Fehlermeldung: condition c01: Bad name after Autobeschattung', line 44

if (!get_Exec("sleep.Wait.Autobeschattung.$compass")) {
set_Exec("sleep.Wait.Autobeschattung.$compass",$waitDown,'if ([struc.Rollos.$compass:state] ne "$dir" && [Autobeschattung:state] eq "on") { fhem("setex Rollos.$compass $dir-force Autobeschattung:$compass:$dir:$waitDown")}');
}

Mein Ziel ist es, sleep zu vermeiden.
Danke für jede Hilfe.

Ronny

Du musst beim if-Befehl $compass auflösen, daher muss if in doppelten Anführungszeichen stehen, der Rest dann logischerweise in einfachen. Variablen funktionieren aber grundsätzlich nicht in DOIF-spezifischer Syntax in eckigen Klammern [...], hier musst du ReadingsVal nutzen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FHEMAN

Zitat von: Damian am 04 Oktober 2021, 22:27:05
Du musst beim if-Befehl $compass auflösen, daher muss if in doppelten Anführungszeichen stehen, der Rest dann logischerweise in einfachen. Variablen funktionieren aber grundsätzlich nicht in DOIF-spezifischer Syntax in eckigen Klammern [...], hier musst du ReadingsVal nutzen.
- außer bei $SELF und den internen Variablen, oder?

Korrekt wäre dann also

set_Exec("sleep.Wait.Autobeschattung.$compass",$waitDown,"if (Value('struc.Rollos.$compass' ne '$dir' && [Autobeschattung:state] eq 'on') { fhem('setex Rollos.$compass $dir-force Autobeschattung:$compass:$dir:$waitDown')}");

Das bring zumindest keine Fehlermeldung. Ich werde es morgen erst tagsüber final testen können.
Danke Dir soweit, Damian!
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Damian

ja, $SELF und $DEVICE sind keine echten Perlvariablen, sondern nur Platzhalter
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF