FHEM Forum

FHEM => Automatisierung => Thema gestartet von: th0nix am 26 November 2020, 21:35:07

Titel: [gelöst] Nutzung einer Variablen in Perl code
Beitrag von: th0nix am 26 November 2020, 21:35:07
Hi Leute,

ich komm hier einfach nicht mehr weiter.
Ich habe hier einen notify, welcher mir beim öffnen eines Fensters die Heizung ausmachen soll. Das geht alles.
Jedoch wenn zwischen 8:00 und 9:30 das Fenster geschlossen wird soll noch zusätzlich die Temperatur aus Dummy gelesen werden.

Jedoch bekomme ich folgendes Ergebnis:

set Heizung desired-temp  : wrong format, see commandref
Fenster.stop return value: wrong format, see commandref

defmod Fenster.stop notify (Fenster:doorWindow.*) { \
my $s1 = ReadingsVal('Fenster','doorWindow','');;\
if ($s1 eq "on") { \
  fhem('set Heizung tmOff');;\
  fhem('set Fenster.STATUS offen');;\
}else{ \
  fhem ('set Heizung tmHeating');;\
  fhem ('set Fenster.STATUS geschlossen');;\
  my $hm = sprintf("%02d:%02d", $hour, $min);;\
  if ($hm gt "08:00" && $hm lt "09:30") {\
    fhem ('set Heizung desired-temp Heizung.Tags');;\
  }\
}\
}


Bei dem Versuch ein wenig den Fehler einzugrenzen habe ich folgendes mit in den if eingebaut.


my $t1 = ReadingsVal('Heizung.Tags','','');
system("/bin/echo Debug . $t1  >> /opt/fhem/log/fhem-2020-11.log");


Erkenntnis es kommt kein Wert an.

Config von dem Dummy Wert
defmod Heizung.Tags dummy
setstate Heizung.Tags 20
setstate Heizung.Tags 2020-11-22 22:14:36 state 20


Hat hier noch jemand eine Idee ??



Vielen Dank schon mal
Thonix
Titel: Antw:Nutzung einer Variablen in Perl code
Beitrag von: betateilchen am 26 November 2020, 21:47:02
Zitat von: th0nix am 26 November 2020, 21:35:07

my $t1 = ReadingsVal('Heizung.Tags','','');
system("/bin/echo Debug . $t1  >> /opt/fhem/log/fhem-2020-11.log");


Wo hast Du denn das her?

Debug $t1;

funktioniert doch viel einfacher.


my $t1 = ReadingsVal('Heizung.Tags','','');


Falsche Syntax für ReadingsVal(). Du gibst zwar einen deviceName mit, aber keinen readingName.
Deshalb kommt logischerweise immer ein Nullstring als Ergebnis.


  fhem('set Heizung tmOff');;\
  fhem ('set Heizung tmHeating');;\


Was soll denn tmOff und tmHeating sein?


fhem ('set Heizung desired-temp Heizung.Tags')


desired-temp erwartet bei allen mir bekannten Geräten einen numerischen Temperaturwert.
Titel: Antw:Nutzung einer Variablen in Perl code
Beitrag von: Deckoffizier am 27 November 2020, 19:20:14
Hallo betateilchen,

grätsche mal dazwischen.

ZitatWas soll denn tmOff und tmHeating sein?

Vermute mal es geht um ZWave Thermostaten Modi tm = thermostat Modi.

Zitatdesired-temp erwartet bei allen mir bekannten Geräten einen numerischen Temperaturwert.

Heizung.Tags  eventuell handelt es sich hier um einen dummy  oder DOIF.

Gruß
Hans-Jürgen

Titel: Antw:Nutzung einer Variablen in Perl code
Beitrag von: betateilchen am 27 November 2020, 20:03:36
Zitat von: Deckoffizier am 27 November 2020, 19:20:14
Heizung.Tags  eventuell handelt es sich hier um einen dummy  oder DOIF.

Vermutlich nicht. Das ist aber auch egal, die Syntax ist trotzdem in beiden Fällen falsch.

set Heizung desired-temp  : wrong format, see commandref
Titel: [gelöst] Antw:Nutzung einer Variablen in Perl code
Beitrag von: th0nix am 27 November 2020, 21:50:22
Danke für den Tipp mit dem Debug - das andere habe ich hier im Forum gefunden - gibt dann schon komplizierte Ansätze - ging aber ;-)

  fhem('set Heizung tmOff');;\
  fhem ('set Heizung tmHeating');;\


ist bei dem Thermostat der Modus um diese auszuschalten oder wieder in betrieb zu nehmen. (https://wiki.fhem.de/wiki/Z-Wave-Eurotronic_Spirit_Thermostat (https://wiki.fhem.de/wiki/Z-Wave-Eurotronic_Spirit_Thermostat)

Zitat
desired-temp erwartet bei allen mir bekannten Geräten einen numerischen Temperaturwert.

Heizung.Tags  eventuell handelt es sich hier um einen dummy  oder DOIF.
Korrekt - ich möchte desired-temp aus einen Dummy Wert steuern.

Das mit dem leeren readingName war ein Versuch. Habe gerade auch mein Fehler gefunden. ich hatte STATE Großgeschrieben.
so geht es
my $t1 = ReadingsVal('Heizung.Tags','state','');
fhem ('set Bad.Heizung desired-temp '. $t1);


Dank euch !