OldValue ist FHEM nicht bekannt?

Begonnen von Tommyland78, 07 Dezember 2014, 15:27:08

Vorheriges Thema - Nächstes Thema

Tommyland78

Hallo zusammen

{ $value{Tom_at_Home} }

führt bei mir zur Ausgabe: present - So hatte ich das auch erwartet.
Leider funktioniert

{ $oldvalue{Tom_at_Home} }

bei mir nicht. Das führt zur Ausgabe: HASH(0x1a3e408) - Was ich nicht erwarte.

Im Grunde wollte ich folgendes in ein DOIF einbauen:


(([Tom_at_Home:state] eq "present") and [22:00-06:00|0123456]) and (OldValue([Tom_at_Home:state]) != Value([Tom_at_Home:state]))

(set FHEM_Tablet ttsSay Hallo Tom <break time="200ms"/> Einen schönen guten Abend <break time="200ms"/> und Willkommen zu Hause,set FHEM_Tablet keepScreenOn on,set FHEM_Tablet screenBrightness 1)


Könnt Ihr mir helfen? Gibt es oldvalue nicht oder ist mein Syntax falsch?

Grüße und Danke,
Der Tom

Elektrolurch

Hallo,

der OldValue existiert für ein fhem-Objekt nur während des notifies, bei dem sich das Objekt bzgl. des Wertes ändert.
Statt über die fhem-Globale würde ich über die Funktion :

OldValue('Objektname')

analog zu Value('Objektname')

zugreifen.

Wenn das notify zu der Änderung des Values eines Objektes abgeschlossen ist, so wird auch OldValue gelöscht.

Gruß

Elektrolurch
configDB und Windows befreite Zone!

Tommyland78

#2
Hi,

danke für Deinen Vorschlag. Wenn ich Dich richtig verstanden habe, dann müsste es so aussehen?


(([Tom_at_Home:state] eq "present") and [22:00-06:00|0123456] and Value('Tom_at_Home') =! OldValue('Tom_at_Home'))
(set FHEM_Tablet ttsSay Hallo Tom <break time="200ms"/> Einen schönen guten Abend <break time="200ms"/> und Willkommen zu Hause,set FHEM_Tablet keepScreenOn on,set FHEM_Tablet screenBrightness 1)


Der Code als solches wird zwar von FHEM angenommen, führt dann aber zu einem PERL-Fehler.

perl error in condition: (ReadingValDoIf('Tom_at_Home','state','') eq "present") and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"0123456") and Value('Tom_at_Home') =! OldValue('Tom_at_Home'): Can't modify non-lvalue subroutine call in scalar assignment at (eval 56384) line 2, at EOF

Weitere Vorschläge oder Ideen?

Grüße
Der Tom