Wert einer Dummyvariablen innerhalb eines DOIF ins Logfile schreiben

Begonnen von willybauss, 21 August 2016, 22:38:58

Vorheriges Thema - Nächstes Thema

willybauss

Das DOIF macht manchmal unerklärliche Sachen. Um dem auf den Grund zu gehen möchte ich die Kriterien (Werte von Variablen) bei der Ausführung ins Logfile schreiben, sh. die vier "Log ..." Zeilen im Code kurz vor Ende. Das Resultat ist aber lediglich

Zitat2016.08.21 20:02:06 2: extraVent_ALL: {Log 1,"extraVent_Wohnzimmer_value: $extraVent_Wohnzimmer_value"}: Global symbol "$extraVent_Wohnzimmer_value" requires explicit package name at (eval 948291) line 1.

2016.08.21 20:02:06 2: extraVent_ALL: {Log 1,"extraVent_Schlafzimmer_value: $extraVent_Schlafzimmer_value"}: Global symbol "$extraVent_Schlafzimmer_value" requires explicit package name at (eval 948292) line 1.

2016.08.21 20:02:06 2: extraVent_ALL: {Log 1,"Mythz:Rel_humidity: $Mythz:$Rel_humidity"}: Global symbol "$Mythz" requires explicit package name at (eval 948293) line 1.
Global symbol "$Rel_humidity" requires explicit package name at (eval 948293) line 1.

Beim googeln kam mir der Verdacht, dass durch die geschweiften Klammern die Variablen evtl. nur innerhalb der {} gültig sind, somit die 'echten' Variablen innerhalb der {} unbekannt sind. Aber wie mache ich es dann richtig? Die {} brauche ich ja wohl (?).

Besten Dank für Tipps und gute Ratschläge.
Willy


define extraVent_Schlafzimmer_value dummy
define extraVent_Wohnzimmer_value dummy

define extraVent_ALL DOIF (( ([extraVent_Wohnzimmer_value] == 3) \
   or ([extraVent_Schlafzimmer_value] == 3) )\
  and ([Mythz:sGlobal:[inputVentilatorPower. (\d+)]] < 55) )\
((set Mythz p07FanStageDay 3), \
(set Mythz p08FanStageNight 3), \
(attr extraVent_ALL cmdpause 7200:7200:7200:7200),\
{Log 1,"Ventilation set to level 3"})\
DOELSEIF\
   (( ([extraVent_Wohnzimmer_value] == 2) \
   or ([extraVent_Schlafzimmer_value] == 2)\
   or ([Mythz:Rel_humidity] > 70) ) \
and ( ([Mythz:sGlobal:[inputVentilatorPower. (\d+)]] > 55) \
   or  ([Mythz:sGlobal:[inputVentilatorPower. (\d+)]] < 30) ))\
((set Mythz p07FanStageDay 2), \
(set Mythz p08FanStageNight 2), \
(attr extraVent_ALL cmdpause 1:7200:7200:7200),\
{Log 1,"Ventilation set to level 2"},\
{Log 1,"extraVent_Wohnzimmer_value: $extraVent_Wohnzimmer_value"},\
{Log 1,"extraVent_Schlafzimmer_value: $extraVent_Schlafzimmer_value"},\
{Log 1,"Mythz:Rel_humidity: $Mythz:$Rel_humidity"})\
DOELSEIF\
   ...


Die Werte der Variablen

  • extraVent_Wohnzimmer_value
  • extraVent_Schlafzimmer_value
  • Mythz:Rel_humidity
werden an anderer Stelle im Code situationsabhängig verändert. Das funktioniert; deshalb habe ich hier auf den Code verzichtet.
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

KernSani

wenn ich mich richtig erinnere kannst du in perl code im DOIF die "Variablen" genauso in eckigen Klammern ansprechen, wie außer halb der geschweiften Klemmern, also sowas wie
{Log 1,"extraVent_Wohnzimmer_value: [extraVent_Wohnzimmer_value]"},\
sollte funktionieren...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Damian

Zitat von: willybauss am 21 August 2016, 22:38:58

Die Werte der Variablen

  • extraVent_Wohnzimmer_value
  • extraVent_Schlafzimmer_value
  • Mythz:Rel_humidity
werden an anderer Stelle im Code situationsabhängig verändert. Das funktioniert; deshalb habe ich hier auf den Code verzichtet.

Das sind keine Variablen, sondern dummys bzw. Readings. Die kannst du einfach in eckigen Klammern angeben:

{Log 1,"Mythz:Rel_humidity: [Mythz:Rel_humidity]"}

Gruß

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

willybauss

Besten Dank für die Antworten. Ich habe jetzt die [] eingebaut.

Ich verstehe allerdings nicht, warum es sich bei Dummys nicht um Variablen handeln soll. Man wird ja immer erzogen, sich an die CommandRef zu halten. Dort steht:

Zitatdummy
Definiert eine Pseudovariable ...
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

Damian

Zitat von: willybauss am 22 August 2016, 08:18:12
Besten Dank für die Antworten. Ich habe jetzt die [] eingebaut.

Ich verstehe allerdings nicht, warum es sich bei Dummys nicht um Variablen handeln soll. Man wird ja immer erzogen, sich an die CommandRef zu halten. Dort steht:

Es ist eben nur eine Pseudovariable und keine Perlvariable. Daher lässt sie sich auch nicht wie eine Perlvariable nutzen, da reicht es eben nicht einfach ein Dollarzeichen davor zu setzen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF