[gelöst] Nutzung einer Variablen in Perl code

Begonnen von th0nix, 26 November 2020, 21:35:07

Vorheriges Thema - Nächstes Thema

th0nix

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

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Deckoffizier

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

FHEM 5.8 auf "yakkaroo Emu A1FL.1" mit CUL 868MHz, SIGNALduino,2 1Wire USB Busmaster, diverse 1 Wire Sensoren,Landroid,Aeotec USB Dongle Z-Wave Plus

betateilchen

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
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

th0nix

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

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 !