Variable nach at

2,203 views
Skip to first unread message

Hubert Melzer

unread,
Oct 28, 2012, 1:35:22 PM10/28/12
to fhem-...@googlegroups.com
Hallo FHEM-Freunde,

nachdem ich mich einige Zeit nicht mit FHEM beschäftigen konnte, habe ich nun wieder angefangen und bin gleich auf ein Problem gestoßen, was ich nicht zu lösen vermag.

Hier der Auszug aus meiner Konfigurationsdatei:


define uptime dummy

define Handsender_oben FS20 0eb8 00

define uptime_init notify Handsender_oben \
{if ($we){fhem "set uptime 12:00"} \
else \
{fhem "set uptime 08:00"} \
{Log 1,'Der Wert für uptime beträgt: '.Value('uptime')}}

define Aktion at *{Value('uptime')} \
{Log 1,'Der Wert für uptime beträgt: '.Value('uptime')}


Das Problem besteht nun darin, dass zwar der Status von uptime in Abhängigkeit von der Bedingung durch notify geändert wird, das steht auch so im Log, jedoch schaffe ich es mit keiner Variante, dass die Aktion dann auch zu der in uptime gespeicherten Zeit ausgefürt wird.
Je nach dem, was für eine Variante ich nach at * wähle, immer kommt entweder

the at function "Value('uptime')" must return a timespec and not ???
oder
Wrong timespec Value('uptime'): either HH:MM:SS or {perlcode}
oder vergleichbares.

Ersetze ich die Variable mit einer Zeit wie in folgendem Beispiel

define Aktion at *18:15 {Log 1,'Der Wert für uptime beträgt: '.Value('uptime')}

findet sich im Log auch der entsprechende Eintrag zum Inhalt von uptime.


Das gleiche Problem tritt übrigen auch auf, wenn ich auf, wenn ich auf die Definition des Dummy-Devices verzichte und die Variable als Perl-Variable nach folgendem Muster anlege:

define uptime_init notify Handsender_oben \
{my $uptime;; if ($we){$uptime = '12:00'} \
else \
{$uptime = '08:00'} \
{Log 1,'Der Wert für uptime beträgt: '.($uptime)}}

Hier kommt erschwerend noch hinzu, dass
$uptime außerhalb des notify nicht mehr gültig ist.
Meine Frage hierzu ist nun:
Ist es überhaupt möglich, nach at mit einer Variablen zu arbeiten oder sehe ich nur nicht, wie die Konstruktion aussehen muss?
Wenn ja, wie muss im ersten Fall die Konstruktion dann aussehen?
Wie mache ich im zweiten Fall
$uptime auch außerhalb des Notify gültig?

Viele Grüße Hubert

Fritz!Box 7390, Firmware-Version: 84.05.22
Fhem 5.2 (DEVELOPMENT), $Id: fhem.pl 1946 2012-10-11 18:11:14Z borisneubert $

rallle74

unread,
Oct 28, 2012, 5:32:29 PM10/28/12
to fhem-...@googlegroups.com
Wie wärs mit dem "modify"-Befehl, um die Zeit der at-Aktion zu ändern (und ohne dummy).

Also z.B. so, weiß nicht, obs 100%ig stimmt!



define Handsender_oben FS20 0eb8 00
define Aktion at *08:00 mach_irgendwas

define uptime_init notify Handsender_oben \
{if ($we){fhem ("modify Aktion *12:00")} \
else {fhem ("modify Aktion *08:00")}

Hubert Melzer

unread,
Oct 29, 2012, 3:39:16 PM10/29/12
to fhem-...@googlegroups.com
On Sunday, October 28, 2012 10:32:29 PM UTC+1, rallle74 wrote:
Wie wärs mit dem "modify"-Befehl, um die Zeit der at-Aktion zu ändern (und ohne dummy).

Danke für den Tipp aber modify hat mir nicht so gefallen.
Jetzt weiß ich auch warum:
Wenn ich das so wie unten angegeben umsetze folgt, wer weiß warum:

Aktion already defined, delete it first
 
Also z.B. so, weiß nicht, obs 100%ig stimmt!


define Handsender_oben FS20 0eb8 00
define Aktion at *08:00 mach_irgendwas

define uptime_init notify Handsender_oben \
{if ($we){fhem ("modify Aktion *12:00")} \
else {fhem ("modify Aktion *08:00")}


Es würde mich interessieren, ob das nur bei mir so ist oder ob andere die gleichen Probleme haben.
Tatsächlich geht es darum, dass in den Termen der if-Bedingung Variable bzw. perl-Funktionen zum Einsatz kommen sollen.
Die müssten dann auch nach modify so stehen. Da ich bereits bei dem einfachen Befehl scheitere, kann ich gar nicht ausprobieren, was folgt, wenn dann so etwas steht.

Gruß Hubert

UliM

unread,
Oct 29, 2012, 3:59:41 PM10/29/12
to fhem-...@googlegroups.com


Am Montag, 29. Oktober 2012 20:39:16 UTC+1 schrieb Hubert Melzer:

Aktion already defined, delete it first
 
wer weiß warum:

Ich :)
Ein Objekt namens Aktion existiert bereits. Wenn Du es erneut anlegen willst, kommt sinnvollerweise diese Meldung.

uptime bezeichnet normalerweise die Laufzeit eines Systems seit seinem Einschaltzeitpunkt, wenn ich richtig interpretiere willst Du damit Deine Aufstehzeit darstellen, richtig?

Schau Dir mal den folgenden Wiki-Eintrag an, der wohl recht genau das macht, was Du erreichen möchtest:
http://www.fhemwiki.de/wiki/Wakeuplight

Den Teil mit dem dimmen kannst Du ja durch das ersetzen, was Du mit "Aktion" meinst.

Und Dein notify muss wirklich modify verwenden, da sonst der ganze Aktionsteil flöten geht:

define uptime_init notify Handsender_oben {if ($we){fhem "modify uptime 12:00"} else {fhem "modify uptime 08:00"} }

Geht aber flexibler mit nem slider wie im wiki beschrieben,

Gruß, Uli
 

Hubert Melzer

unread,
Oct 30, 2012, 8:24:58 AM10/30/12
to fhem-...@googlegroups.com
Hallo Uli,

natürlich gibt es das Objekt Aktion bereits, siehe auch mein Skript.
Jedoch wird das Objekt Aktion in meinem Skript auch kein zweites Mal angelegt. Lediglich das Einfügen von

define uptime_init notify Handsender_oben {if ($we){fhem "modify uptime 12:00"} else {fhem "modify uptime 08:00"} }

in des Skript führt zu dem angegebenen Fehler. Und in dieser Zeile wird das Objekt Aktion wohl nicht ein zweites Mal angelegt, sondern nur der Teil nach at modifiziert.
Es geht mir im Augenblick auch nicht in erster Linie darum, was ich wie anders machen kann, sondern um das eingangs geschilderte Problem und die damit gestellten Fragen:

Ist es überhaupt möglich, nach at mit einer Variablen zu arbeiten oder sehe ich nur nicht, wie die Konstruktion aussehen muss?
Wenn ja, wie muss im ersten Fall die Konstruktion dann aussehen?
Wie mache ich im zweiten Fall
$uptime auch außerhalb des Notify gültig?
Tritt der Fehler bei anderen genau so auf, auch der welcher bei modify auftritt?

Jedoch werde ich den Gedanken noch einmal aufgreifen und uptime anders benennen. Ich fürchte jedoch, dass das Problem bleibt.

Gruß Hubert

UliM

unread,
Oct 30, 2012, 5:53:38 PM10/30/12
to fhem-...@googlegroups.com

Gerade ausporbiert, bei mir funzt alles:

fhem> define uptime dummy
fhem> set uptime 09:00
fhem> define testtimer at {Value("uptime")} set ez_Schreibtisch on
fhem> list testtimer
Internals:
   NAME       testtimer
   NTM        09:00:00
   STATE      Next: 09:00:00


fhem> set uptime 08:00
fhem> modify testtimer {Value("uptime")}
fhem> list testtimer
Internals:
   CFGFN
   DEF        {Value("uptime")} set ez_Schreibtisch on
   NAME       testtimer
   NTM        08:00:00
   STATE      Next: 08:00:00

fhem> delete uptime
fhem> delete testtimer

Hubert Melzer

unread,
Nov 1, 2012, 2:07:36 PM11/1/12
to fhem-...@googlegroups.com
Hallo Uli,



On Tuesday, October 30, 2012 10:53:39 PM UTC+1, UliM wrote:

Gerade ausporbiert, bei mir funzt alles:

Du hast recht, aber nur bis zu einem gewissen Grade!
 
fhem> define uptime dummy
fhem> set uptime 09:00
fhem> define testtimer at {Value("uptime")} set ez_Schreibtisch on
fhem> list testtimer
Internals:
   NAME       testtimer
   NTM        09:00:00
   STATE      Next: 09:00:00

Wenn du hiernach ein save machst, um die Änderungen in die fhem.cfg zu schreiben, wirst du zwar den definierten Dummy finden, nicht aber den Testtimer, da der schon ein Problem mit der Variable hat.
Machst du nun anschließend ein rereadcfg gibt es ersten die Fehlermeldung:

define: the at function "Value("uptime")" must return a timespec and not ???

und zweites verschwindet der Testtimer bei den aufgelisteten Geräten.
Der Rest ist dann natürlich geschenkt und ich komme wieder zu meinen eingangs gestellten Fragen.

Gruß Hubert

UliM

unread,
Nov 2, 2012, 4:29:24 AM11/2/12
to fhem-...@googlegroups.com
Hi,
ah - oh! Immerhin hab ich jetzt das Problem verstanden.

Da muss Rudi ran :)

=8-)

UliM

unread,
Nov 2, 2012, 4:29:25 AM11/2/12
to fhem-...@googlegroups.com

UliM

unread,
Nov 2, 2012, 4:47:52 AM11/2/12
to fhem-...@googlegroups.com
... bzw: hast Du sichergestellt, dass in Deiner fhem.cfg die Definition von uptime VOR der Definition des timers erfolgt?
die Meldung mit dem ??? heisst ja nur, dass uptime zum Zeitpunkt des Einlesens des timers keinen Wert zurückliefert...
=8-)

Hubert Melzer

unread,
Nov 2, 2012, 4:52:13 AM11/2/12
to fhem-...@googlegroups.com
Hallo Uli,

natürlich, ich habe die Definition genau so vorgenommen, wie du es auch gemacht, bzw. vorgeschlagen hast. Auch mit den

fhem> set uptime 09:00

nach der Definitin des Dummy. Dann sollte der WErt doch gesetzt sein.

Gruß Hubert
Reply all
Reply to author
Forward
0 new messages