Autor Thema: neue Features: ereignisgesteuertes Perl - DOIF-Perl  (Gelesen 71555 mal)

Offline spi3845

  • Full Member
  • ***
  • Beiträge: 122
Antw:neue Features: ereignisgesteuertes Perl - DOIF-Perl
« Antwort #255 am: 10 März 2022, 11:50:48 »
Hallo,

kann man inzwischen eine Perl-Variable innerhalb von [] verwenden?

Also etwas der Art:
defmod di_text DOIF {
my $geraet="sensor123";;

if ([$geraet:gesperrt,1] eq 0) {
Log 1, "es geht";;
}

}

Danke schon mal!

Noch ein Nachtrag:

wie halte ich es dann mit z. B.
set_Exec("timer", 30, 'fhem("setreading $geraet gesperrt 0")');;
Muss ich hier dann $_geraet statt $geraet deklarieren und nutzen?
« Letzte Änderung: 10 März 2022, 12:58:27 von spi3845 »

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 10148
Antw:neue Features: ereignisgesteuertes Perl - DOIF-Perl
« Antwort #256 am: 10 März 2022, 14:27:51 »
Hallo,

kann man inzwischen eine Perl-Variable innerhalb von [] verwenden?

Also etwas der Art:
defmod di_text DOIF {
my $geraet="sensor123";;

if ([$geraet:gesperrt,1] eq 0) {
Log 1, "es geht";;
}

}

Danke schon mal!

Noch ein Nachtrag:

wie halte ich es dann mit z. B.
set_Exec("timer", 30, 'fhem("setreading $geraet gesperrt 0")');;
Muss ich hier dann $_geraet statt $geraet deklarieren und nutzen?

Man kann keine Variablen als Triggerinformation nutzen.

statt

'fhem("setreading $geraet gesperrt 0")'
definierten:

"fhem('setreading $geraet gesperrt 0')"
damit $geraet vor der Ausführung ausgewertet wird und nicht erst danach - das ist eine Perleigenschaft.

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

Offline spi3845

  • Full Member
  • ***
  • Beiträge: 122
Antw:neue Features: ereignisgesteuertes Perl - DOIF-Perl
« Antwort #257 am: 10 März 2022, 15:24:27 »
Man kann keine Variablen als Triggerinformation nutzen.
Ja, das hatte ich irgendwo schon gesehen und es hat auch nicht geklappt. Hatte gehofft, es gibt inzwischen einen Workaround. Danke aber für die Info!

statt

'fhem("setreading $geraet gesperrt 0")'
definierten:

"fhem('setreading $geraet gesperrt 0')"
damit $geraet vor der Ausführung ausgewertet wird und nicht erst danach - das ist eine Perleigenschaft.

Danke! Der Teufel steckt im Detail. Es könnte so einfach sein, wenn es nur eine Art von Klammern und Anführunsgzeichen gäbe  8)

« Letzte Änderung: 10 März 2022, 16:33:51 von spi3845 »

Offline jkriegl

  • Full Member
  • ***
  • Beiträge: 351
Antw:neue Features: ereignisgesteuertes Perl - DOIF-Perl
« Antwort #258 am: 01 Februar 2023, 21:02:24 »
Nutze den di_counter, möchte aber gerne den Timer auf vor Mitternacht ändern.
Dazu muss in midnight_.* if ($mday==1) geändert werden.
Den Ultimo+1, also ist der nächste Tag der erste?, bekomme ich mit
defmod next_day DOIF ([20:10:30] ) (setReading test_ultimo day {(strftime('%e', localtime+86400))})
Mir gelingt es nicht die obige if-Abfrage durch das Ermitteln des ultimo+1 ($mday) im TPL zu ersetzen.
   if ((strftime("%e", localtime+86400)==1)) {
     set_Reading ("$3_last_month", get_Reading("$3_month",0),1);
     set_Reading ("$3_month",0,1);
   }
Rpi 3, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 10148
Antw:neue Features: ereignisgesteuertes Perl - DOIF-Perl
« Antwort #259 am: 02 Februar 2023, 15:23:05 »
Du könntest den Aufruf so anpassen:

Zitat
mid {[23:59];;                          ## Sicherung der Daten um Mitternacht\
  for (my $i=0;;$i<@{$_counter};;$i++) { ## Für jeden Zähler wird die Funktion midnight aufgerufen\
    midnight($_counter[$i][0],$_counter[$i][1],strftime("%e", localtime+120,strftime("%Y", localtime+120);;\
  }\
}\
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline jkriegl

  • Full Member
  • ***
  • Beiträge: 351
Antw:neue Features: ereignisgesteuertes Perl - DOIF-Perl
« Antwort #260 am: 02 Februar 2023, 17:30:03 »
Vielen Dank.
Das obige next_day DOIF funktioniert sowieso nicht.
Ermittle über ein at, ob es sich um den Ultimo handelt und schreibe das Ergebnis in ein Reading, das ich im TPL_counter abfrage.
Übrigens gibt es ein at_ultimo at.
Rpi 3, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly