(gelöst) DOIF Perl: wieso geht das nicht ?

Begonnen von Grimmschak, 25 Dezember 2019, 10:54:35

Vorheriges Thema - Nächstes Thema

Grimmschak

Hallo zusammen,

habe eine, für den Perl Versteher, dumme Frage:

Wieso funktioniert der folgende Code, in einem DOIF, nicht
{[+[3]:10]} {fhem("setreading eingang.wetter.jetzt Icon ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour)."Icon",""));;fhem("set eingang.wetter.jetzt ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour),""));;fhem("setreading eingang.wetter.jetzt ChangeOfRain ".ReadingsVal("myProPlanta","fc0_chOfRain".sprintf("%02d",$hour),""))}

Das ganze ist ein DOIF, läuft alle 3 Stunden (wie gewollt), gibt auch kein Fehler oder so aus, nur tut dummerweise nicht das was die einzel Befehle tun. Es soll ein dummy und zwei readings desselbigen gesetzt werden.
Vielleicht denke ich auch nur zu kompliziert.

Danke für jedwedige konstruktive Hilfe, Ach ja Verbose und LogLevel sind schon hoch gesetzt, trotzdem keine Meldungen im LOG.

Grimm

amenomade

Hast Du die einzelne Perl-Befehle ins Kommandofeld von Fhem probiert? Was ergibt es?
{fhem("setreading eingang.wetter.jetzt Icon ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour)."Icon",""))}

Schau mal dein Proplanta  Device. Ich vermute, es hat kein Reading fc0_weather10 oder fc0_weather11
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Grimmschak

Hi,

der Befehl funktioniert, zumindest um 3,6,9,12,15,18,21 und 0 Uhr, da es diese QuellReadings dann gibt.
Zu den anderen Zeiten gibt es einen Fehler, den ich ja vermeiden will.

Auch die anderen Beiden gehen, ist immer nur doof zu testen, da nur alle 3 Stunden :-)

G.

amenomade

Poste dann bitte ein vollständiges "list" von deinem DOIF
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Grimmschak

HI,
bitte:
Internals:
   DEF        {[+[3]:10]} {fhem("setreading eingang.wetter.jetzt Icon ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour)."Icon",""));;fhem("set eingang.wetter.jetzt ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour),""));;fhem("setreading eingang.wetter.jetzt ChangeOfRain ".ReadingsVal("myProPlanta","fc0_chOfRain".sprintf("%02d",$hour),""))}
   FUUID      5e00a2bd-f33f-8d50-65d2-1a471893ba05f9c8
   MODEL      Perl
   NAME       eingang.wetter.setDI
   NOTIFYDEV  global
   NR         353
   NTFY_ORDER 50-eingang.wetter.setDI
   STATE      ???
   TYPE       DOIF
   VERSION    20811 2019-12-22 17:45:08
   READINGS:
     2019-12-25 11:15:05   mode            enabled
     2019-12-25 11:15:05   timer_01_c01    25.12.2019 12:10:00
   Regex:
     accu:
   condition:
     0          ::DOIF_time_once($hash,0,$wday)
     1          fhem("setreading eingang.wetter.jetzt Icon ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour)."Icon",""));;fhem("set eingang.wetter.jetzt ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour),""));;fhem("setreading eingang.wetter.jetzt ChangeOfRain ".ReadingsVal("myProPlanta","fc0_chOfRain".sprintf("%02d",$hour),""))
   days:
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     globalinit 1
     last_timer 1
     sleeptimer -1
   intervalfunc:
   localtime:
     0          1577272200
   perlblock:
     0         
     1         
   realtime:
     0          12:10:00
   time:
     0          +[3]:10
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   triggertime:
     1577272200:
       localtime  1577272200
       hash:
   uiState:
   uiTable:
Attributes:
   loglevel   6
   room       Flur.EG,steuerung
   verbose    5



Damian

Du hast zwei Perlblöcke derfiniert. Du willst aber nur einen, der alle drei Stunden getriggert wird:

{[+[3]:10]; fhem("...
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

  condition:
     0          ::DOIF_time_once($hash,0,$wday)
     1          fhem("setreading eingang.wetter.jetzt Icon ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour)."Icon",""));;fhem("set eingang.wetter.jetzt ".ReadingsVal("myProPlanta","fc0_weather".sprintf("%02d",$hour),""));;fhem("setreading eingang.wetter.jetzt ChangeOfRain ".ReadingsVal("myProPlanta","fc0_chOfRain".sprintf("%02d",$hour),""))

Das kommt, weil deine Befehle nicht im gleichen Perl-Block wir die Bedingung sind. Schau mal die Beispiele im CommandRef

Damian war schneller...
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Grimmschak

Oh, danke.
Werde mal testen, ist ja bald 12... da hatte ich DOIF Perl wohl falsch verstanden.

G.

Grimmschak

Besten Dank, wie immer eine schnelle und kompetente Hilfe.
So lob ich mir eine Comunity  :) :) :)

Gruß und schöne Feiertage.
G.