EDIT : Solved:
- FHEM update hat scheinbar einiges bereinigt.
Nun geht es wie erwartet.
Hallo
ich wollten den Offset variabel halten und habe ihn mit einem dummy berechnet.
da ich dann den Offset mal vor bzw. nach Sonnenaufgang/-untergang benötige dachte ich ich multipliziere ihn mit -1.
Ein einfaches Voranstellen von Minus geht ja wohl nicht : sunrise(-Value("Z_V_SunRiseSet_Offset")
*{sunrise(Value("Z_V_SunRiseSet_Offset")*-1,"06:30","09:15")} set TA_ESP0128 open
habe das dann geändert in : (erst ReadingsVal , dann nun ReadingsNum)
*{sunrise(ReadingsNum("Z_V_SunRiseSet_Offset")*-1,"06:30","09:15")} set TA_ESP0128 open
Trotzdem kommt immer noch die Perl Warning. Warum verstehe ich nicht.
2020.10.06 06:37:59.913 1: PERL WARNING: Argument "" isn't numeric in multiplication (*) at (eval 444) line 1, <$fh> line 22718.
2020.10.06 06:37:59.913 1: eval: {sunset((ReadingsNum('Z_V_SunRiseSet_Offset','state','')*-1),"16:00","21:50")}
2020.10.06 06:37:59.913 1: stacktrace:
Kennt jemand den Grund ?
Danke für die Hilfe
VG T
ZitatReadingsNum("Z_V_SunRiseSet_Offset")
Falsche Syntax bei der Verwendung von ReadingsNum().
Korrekt wäre beispielsweise
ReadingsNum('Z_V_SunRiseSet_Offset','state',0)
Abgesehen davon, dass die Syntax falsch ist, würde ich es mal mit
...)*(-1)
versuchen.
Zitat von: betateilchen am 06 Oktober 2020, 08:21:22
Falsche Syntax bei der Verwendung von ReadingsNum().
Korrekt wäre beispielsweise
ReadingsNum('Z_V_SunRiseSet_Offset','state',0)
sorry , das war falsch von mir gepostet. hatte das schon so gemacht. -> trotzdem der Fehler non numeric,
Werde es mal mit *(-1) versuchen.
Melde mich dann Danke
Update. Scheinbar hat das Klammer geholfen.
{sunset(ReadingsNum('Z_V_SunRiseSet_Offset_Plus','state','')*(-1))}
in der Commandozeile liefert korrektes ergebnis.
So einfach kann es sein.
Nochmal eine Verständnisfrage hierzu bzw . zu dem Defaultwert. Etwas off Topic .
ReadingsNum('device','state','')
Wenn ich ein numerisches Feld erwarte, mit ReadingsNum, dann mit
sprintf formatiere und der Default Wert is '' , gibt das dann eine non
PERL Numeric Warning Muss man besser immer ein numerischen Default werde setzen wie -1 ?
Danke für die Hilfe
VG T
Mist, leider zu früh gefreut.
immer noch die Meldung Warning non numeric
sogar in 2 verschiedenen Versionen:
Testweise: mit Value("dev") unabhängig von der -1 Multiplikation und ReadingNum()
Es ist zwar nur ein Warning, müllt mir aber das Log voll.
{sunset(ReadingsNum('Z_V_SunRiseSet_Offset_Plus','state','')*(-1))}
2020.10.06 10:09:59.210 1: PERL WARNING: Argument "" isn't numeric in multiplication (*) at (eval 461) line 1, <$fh> line 23568.
2020.10.06 10:09:59.210 1: eval: {sunset(ReadingsNum('Z_V_SunRiseSet_Offset_Plus','state','')*(-1))}
2020.10.06 10:09:59.210 1: stacktrace:
2020.10.06 10:09:59.210 1: main::__ANON__ called by (eval 461) (1)
2020.10.06 10:09:59.210 1: (eval) called by fhem.pl (1149)
2020.10.06 10:09:59.211 1: main::AnalyzePerlCommand called by fhem.pl (1178)
2020.10.06 10:09:59.211 1: main::AnalyzeCommand called by fhem.pl (3630)
2020.10.06 10:09:59.211 1: main::GetTimeSpec called by ./FHEM/90_at.pm (76)
2020.10.06 10:09:59.211 1: main::at_Define called by fhem.pl (3806)
2020.10.06 10:09:59.211 1: main::CallFn called by fhem.pl (2103)
2020.10.06 10:09:59.211 1: main::CommandDefine called by fhem.pl (1254)
2020.10.06 10:09:59.211 1: main::AnalyzeCommand called by fhem.pl (1105)
2020.10.06 10:09:59.211 1: main::AnalyzeCommandChain called by fhem.pl (1392)
2020.10.06 10:09:59.211 1: main::CommandInclude called by fhem.pl (616)
Zitat von: riker1 am 06 Oktober 2020, 10:22:46
{sunset(ReadingsNum('Z_V_SunRiseSet_Offset_Plus','state','')*(-1))}
Kann es sein, dass der Defaultwert bei dieser Schreibweise quasi undefiniert ist?
Was passiert denn bei:
{sunset(ReadingsNum('Z_V_SunRiseSet_Offset_Plus','state','0')*(-1))}
Zitat von: Nobbynews am 06 Oktober 2020, 10:47:24
Kann es sein, dass der Defaultwert bei dieser Schreibweise quasi undefiniert ist?
Was passiert denn bei:
{sunset(ReadingsNum('Z_V_SunRiseSet_Offset_Plus','state','0')*(-1))}
das probiere ich mal.
Allerdings ist der Wert gesetzt in dem Fall und der Default greift nicht ( sollte) .
denke aber das '0' bei ReadingsNum auch zu Problemen führt und denke es sollte default nur 0 ohne ' sein.
ReadingsNum('Z_V_SunRiseSet_Offset_Plus','state',0)
--deshalb der Vermerk zu Sprintf Warning - siehe oben. die ich bei anderen Defaults habe und die Ursache für mich auch noch unklar ist.
Danke
Zitat von: riker1 am 06 Oktober 2020, 10:52:21
Allerdings ist der Wert gesetzt in dem Fall und der Default greift nicht ( sollte) .
Das sollte so sein.
Wie sieht denn ein List vom dummy Z_V_SunRiseSet_Offset_Plus aus?
Zitat von: riker1 am 06 Oktober 2020, 09:19:47
sorry , das war falsch von mir gepostet. hatte das schon so gemacht. -> trotzdem der Fehler non numeric,
Warum postest du (und andere) nicht GENAU DAS was sie versucht haben und GENAU DAS was den Fehler geworfen hat!?
Auch sowas wie: ich hab das mal vereinfacht aber das Prinzip ist dasselbe...
(das werde ich nie verstehen!)
Zitat von: riker1 am 06 Oktober 2020, 10:52:21
das probiere ich mal.
Allerdings ist der Wert gesetzt in dem Fall und der Default greift nicht ( sollte) .
denke aber das '0' bei ReadingsNum auch zu Problemen führt und denke es sollte default nur 0 ohne ' sein.
ReadingsNum('Z_V_SunRiseSet_Offset_Plus','state',0)
--deshalb der Vermerk zu Sprintf Warning - siehe oben. die ich bei anderen Defaults habe und die Ursache für mich auch noch unklar ist.
Danke
Wer lesen kann ;)
https://forum.fhem.de/index.php/topic,114794.msg1090196.html#msg1090196
Natürlich sollte (muss, gut Perl ist da recht "flexibel") der Default-Wert bei Readings
Num numerisch sein... ;)
Gruß, Joachim
Zitat von: riker1 am 06 Oktober 2020, 10:22:46
Testweise: mit Value("dev")
Streiche bitte die Funktion Value() komplett aus Deinem Denken. Damit arbeitest Du überhaupt nicht mit einem reading, sondern mit einem Internal. Und das möchte man in den allerwenigsten Fällen tatsächlich. Insbesondere, da in diesem Internal Werte auftauchen können, die Du überhaupt nicht erwartest.
Zitat von: riker1 am 06 Oktober 2020, 09:19:47
ReadingsNum('device','state','')
Wenn ich ein numerisches Feld erwarte, mit ReadingsNum, dann mit sprintf formatiere und der Default Wert is '' , gibt das dann eine non PERL Numeric Warning
Muss man besser immer ein numerischen Default werde setzen wie -1 ?
Wenn man mit ReadingsNum() arbeitet, sollte der Defaultwert immer ein numerischer Wert sein.
In allen anderen Fällen sollte man ReadingsVal() verwenden.
Zitat von: Nobbynews am 06 Oktober 2020, 08:25:26
würde ich es mal mit
...)*(-1)
versuchen.
Das ist totaler Quatsch.
Zitat von: Nobbynews am 06 Oktober 2020, 12:37:54
Das sollte so sein.
Wie sieht denn ein List vom dummy Z_V_SunRiseSet_Offset_Plus aus?
eigentlich ganz simpel.
Internals:
FUUID 5e77927c-f33f-74bb-08ce-15f0f64778f19e22
NAME Z_V_SunRiseSet_Offset_Plus
NR 106315
STATE 3600
TYPE dummy
READINGS:
2020-10-01 20:40:35 state 3600
Attributes:
room Z_Control,Z_Variablen
verbose 0
webCmd 0:900:1800:2700:3600:5600:7200
Zitat von: betateilchen am 06 Oktober 2020, 13:39:06
Das ist totaler Quatsch.
Na ja, schaden tun die Klammern jedenfalls nicht.
Es funktioniert aber auch ohne.
Versuch macht halt kluch.....
Zitat von: Nobbynews am 06 Oktober 2020, 14:03:11
Na ja, schaden tun die Klammern jedenfalls nicht.
In diesem Fall zufälligerweise (!) nicht. An anderen Stellen in perl code können "auf Verdacht gesetzte" Klammern aber zu unerwarteten Ergebnissen führen.
Tja, gerade if-Abfragen mit &&, || usw. sind da sicher entsprechende Kandidaten.
Aber bei einem numerischen Wert????
Hallo
leider geht es sogar mit einem negativen Wert auch nicht. Ohne Multiplikation.
aber keine Warning im log. aber das ReadingsNum wird einfach ignoriert scheinbar nicht aufgelöst.
{sunset(ReadingsNum('Z_V_SunRiseSet_Offset_Minus','state',0))}
ein negativer und positiver Wert direkt geht aber als fixer Eintrag.
Bei mir funktioniert das völlig problemlos, sowohl mit als auch ohne Multiplikation.
defmod Z_V_SunRiseSet_Offset_Minus dummy
setstate Z_V_SunRiseSet_Offset_Minus 3600
setstate Z_V_SunRiseSet_Offset_Minus 2020-10-06 20:38:40 state 3600
damit liefert
{sunset(ReadingsNum('Z_V_SunRiseSet_Offset_Minus','state',0)*-1)}
als Ergebnis: 42:21:21 (also morgen um 18:21:21)
Mit
{sunset(ReadingsNum('Z_V_SunRiseSet_Offset_Minus','state',0))}
bekomme ich als Ergebnis 44:21:21 (also morgen um 20:21.21)
Beide Ergebnis werden völlig korrekt berechnet, die Differenz beträgt genau zwei Stunden.
Hi
merkwürdig.
Bei mir geht es jetzt auch.
Hatte ein Fhem update gemacht. Eventuell war was am System defekt?
ich teste es nochmal durch.
Vielen vielen Danke für die Hilfe
EDIT:;
Also es geht . Es lag wohl an inkonsistenzen im System for dem Update. (Erklären kann ich mir das nicht)
defmod Z_Sunrise_hell_test at *{sunrise(ReadingsNum('Z_V_SunRiseSet_Offset_Plus','state',0))} {fhem("set Tageslicht_test ja". sunrise());;\
fhem("setreading Tageslicht_test 0_Offset_plus ". sunrise(ReadingsNum('Z_V_SunRiseSet_Offset_Plus','state',0)));;\
fhem("setreading Tageslicht_test 0_Offset_minus ". sunrise(ReadingsNum('Z_V_SunRiseSet_Offset_Plus','state',0)*-1));;\
fhem("setreading Tageslicht_test 0_Offset_Minus2 ". sunrise(ReadingsNum('Z_V_SunRiseSet_Offset_Minus','state',0)));;\
fhem("setreading Tageslicht_test 0_Offset_Plus2 ". sunrise(ReadingsNum('Z_V_SunRiseSet_Offset_Minus','state',0)*-1))\
}
nach Exec Now: sehen sie state-Werte gut aus.
setstate Tageslicht_test ja31:06:03
setstate Tageslicht_test 2020-10-06 22:15:08 0_Offset_Minus2 30:06:03
setstate Tageslicht_test 2020-10-06 22:15:08 0_Offset_Plus2 32:06:03
setstate Tageslicht_test 2020-10-06 22:15:08 0_Offset_minus 30:06:03
setstate Tageslicht_test 2020-10-06 22:15:08 0_Offset_plus 32:06:03
setstate Tageslicht_test 2020-10-06 22:15:08 state ja31:06:03