PERL WARNING: Possible precedence problem ...

Begonnen von M_I_B, 21 Januar 2018, 11:27:30

Vorheriges Thema - Nächstes Thema

betateilchen

Zitat von: M_I_B am 21 Januar 2018, 18:34:52
Woran erkennst Du das?

ZitatPERL WARNING: Use of uninitialized value $eH in multiplication (*) at ./FHEM/10_CUL_HM.pm line 4589.

Weil in der aktuellen Modulversion in Zeile 4589 nichts mit $eH steht  :P
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

M_I_B

#16
.... pfffft ... jetzt aber... in Zeile 4621  :P

BTW: Gibt es eine Möglichkeit, direkt aus einem DOIF o.ä. heraus z.B. vor dem Ausführen eines SET- Befehls eine Markerzeile ins FHEM- Log zu schreiben???

M_I_B

#17
... evtl habe ich es gefunden; wird sich zeigen ... Ist aber merkwürdig ::)

Als Kontrolle für den Zustand der Heizungsanlage (welche Pumpe läuft, Brenner aus, Vorwärmung oder an, Störung...) nutze ich eine HM-LC-SW4-BA-PCB (war über). Da das Teil nur 4 Kanäle hat, wollte ich die Vorwärmung des Brennes auf Kanal 1 zusätzlich sichtbar machen. So weit ich mich an meine damalige Vorgehensweise erinnern kann, hatte ich es erst mit dem Blink- Befehl versucht. Das ging aber irgendwie nicht; den Befehlt kennt die Platine schlichtweg nicht. Aktuell steht da "on-till 1" als Befehl drin, welches genau das macht. Also wenn die Vorwärmung in Betrieb ist, sende ich schlicht "set HM4NV1_1 on-till 1". Dann blinkt der Kanal 1; warum? Keine Ahnung... Aber offensichtlich war das die einzig funktionierende Option. Wenn nun der Brenner gestartet ist, setze ich einfach auf ON und fertig.

Nun scheint es, wie von betateilchen genau richtig erkannt, ein Problem mit dem "on-till 1" zu geben... Nur das Warum erschließt sich mir nicht...

Ich ändere das mal temporär und schaue mal, ob die Fehler verschwinden...


betateilchen

Zitat von: M_I_B am 22 Januar 2018, 11:50:22
Nun scheint es, wie von betateilchen genau richtig erkannt, ein Problem mit dem "on-till 1" zu geben... Nur das Warum erschließt sich mir nicht...

weil on-till 1 keine gültige Zeitspezifikation hh:mm[:ss] ist.

Das erklärt auch die perl warning: es wird versucht, die Zeitangabe 1 in einen Stunden- und Minutenanteil zu zerlegen, was nicht funktioniert, weil kein Doppelpunkt enthalten ist. Somit steht in $eH (Stundenanteil) nichts drin, das mit 3600 multipliziert werden könnte, um eine Dauer in Sekunden zu ermitteln.

Vielleicht hast Du einfach "on-till" mit "on-for-timer" verwechselt, dort würde die 1 bedeuten: schalte für 1 Sekunde ein und dann wieder aus.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

M_I_B

... ja, ok ... is logisch. Aber er meckert ja über $eH UND $eM...
Und erstaunlicher Weise funktioniert das ja als "Blink" Ersatz auf der Platine. Der Befehl kommt offensichtlich in irgend einer Form auf der Platine an und löst dort halt ein Blinken des CH1 mit etwa 2-3Hz aus...


frank

na hoffentlich sendet das teil dann nicht in doppelter frequenz statusmessages.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

M_I_B

...nope... der verhält sich tatsächlich so, als wenn Du an einen Blink- fähigen Aktor ein Blink sendest...

betateilchen

Mag sein, aber das Blinken kommt mit ziemlicher Sicherheit nicht von dem on-till.

Man kann auch mit einen gebrochenen Bein weiter Ski fahren, empfehlenswert ist das trotzdem nicht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

M_I_B

#23
 ;D ;D ;D Das is ja mal'n Vergleich  ::) man gut das ich nix für solche Sportarten über hab  8)

... und ja doch ... Nimm so eine Platine und feuer da ein on-till 1 drauf... suprise suprise. Mag ein Bug in der Firmware sein oder was auch immer; tut aber ...
Irgend wie bin ich ja vor ca. 9 Monaten auf den Trichter gekommen, weil "blink" bei dem Teil nicht tut. Ich kann mich zwar nicht mehr daran erinnern, was ich alles aufprobiert habe, aber mit dem "on-till 1" muss es ja ein Ergebnis dieser Art gegeben haben, sonst hätte ich das ja nicht in den Code gebaut...

Ich probiere das aber heute Abend noch mal explizit aus...

M_I_B

... ist so: Jederzeit reproduzierbar ...

Egal auf welchen Kanal eines HM-LC-SW4-BA-PCB (FW 1.1) ist einen "set on-till 1" sende, schaltet dieser Kanal seinen Ausgang durch (ohne Blinken) und die LED blinkt.

betateilchen

#25
on-till ist kein Standard-Feature von Homematic.
Es handelt sich um eine Implementierung innerhalb von FHEM, und die scheint nicht korrekt zu funktionieren.
Grundsätzlich ist wohl angedacht, die mit on-till angegebene Uhrzeit in eine Sekundendifferenz umzurechnen und dann als on-for-timer an das device zu schicken.

"set <device> blink" funktioniert bei Homematic devices deshalb nicht, weil sie keinen Befehl zum Blinken kennen. Ein Blick in die Dokumentation zu Homematic bestätigt das eindeutig.

Dass Dein Aktor jetzt blinkt, ist eher Zufall als ein korrektes Verhalten.
Es könnte auch eine Fehlermeldung sein, weil er einen Befehl bekommen hat, den er nicht kennt.



--- Edit

Oh Mann, manchmal sieht man den Wald vor lauter Bäumen nicht.

Das Blinken ist ein Zeichen dafür, dass ein on-for-timer läuft. Schau mal in die readings, da müsste beim reading "timedOn" der Wert "running" stehen.
Dieses Blinken ist bei allen Homematic Komponenten, die für on-for-timer empfänglich sind, völlig normal.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Schau doch mal ins Logfile, welcher Befehl bei einem "set <device> on-till 1" tatsächlich an das Gerät geschickt wird.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

M_I_B

PRUST... JAU, DU hast 99 Punkte, ab 100 Punkten gibt's 'n Trecker mit Licht  ;D

Eventlog auf den Kanal gefiltert und dann abgesendet ergibt:

2018.01.22 18:06:38.535 1 : PERL WARNING: Use of uninitialized value $eH in multiplication (*) at ./FHEM/10_CUL_HM.pm line 4621.
2018.01.22 18:06:38.535 1 : stacktrace:
2018.01.22 18:06:38.535 1 : main::__ANON__ called by ./FHEM/10_CUL_HM.pm (4621)
2018.01.22 18:06:38.535 1 : main::CUL_HM_Set called by fhem.pl (3491)
2018.01.22 18:06:38.535 1 : main::CallFn called by fhem.pl (1755)
2018.01.22 18:06:38.535 1 : main::DoSet called by fhem.pl (1788)
2018.01.22 18:06:38.535 1 : main::CommandSet called by fhem.pl (1171)
2018.01.22 18:06:38.536 1 : main::AnalyzeCommand called by ./FHEM/01_FHEMWEB.pm (2484)
2018.01.22 18:06:38.536 1 : main::FW_fC called by ./FHEM/01_FHEMWEB.pm (881)
2018.01.22 18:06:38.536 1 : main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (525)
2018.01.22 18:06:38.536 1 : main::FW_Read called by fhem.pl (3496)
2018.01.22 18:06:38.536 1 : main::CallFn called by fhem.pl (688)
2018.01.22 18:06:38.536 1 : PERL WARNING: Use of uninitialized value $eM in multiplication (*) at ./FHEM/10_CUL_HM.pm line 4621.
2018.01.22 18:06:38.536 1 : stacktrace:
2018.01.22 18:06:38.536 1 : main::__ANON__ called by ./FHEM/10_CUL_HM.pm (4621)
2018.01.22 18:06:38.536 1 : main::CUL_HM_Set called by fhem.pl (3491)
2018.01.22 18:06:38.536 1 : main::CallFn called by fhem.pl (1755)
2018.01.22 18:06:38.537 1 : main::DoSet called by fhem.pl (1788)
2018.01.22 18:06:38.537 1 : main::CommandSet called by fhem.pl (1171)
2018.01.22 18:06:38.537 1 : main::AnalyzeCommand called by ./FHEM/01_FHEMWEB.pm (2484)
2018.01.22 18:06:38.537 1 : main::FW_fC called by ./FHEM/01_FHEMWEB.pm (881)
2018.01.22 18:06:38.537 1 : main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (525)
2018.01.22 18:06:38.537 1 : main::FW_Read called by fhem.pl (3496)
2018.01.22 18:06:38.537 1 : main::CallFn called by fhem.pl (688)
2018-01-22 18:06:38.553 CUL_HM HM4NV1_4 set_on-till 1
2018-01-22 18:06:40.145 CUL_HM HM4NV1_4 deviceMsg: on (to VCCU)
2018-01-22 18:06:40.145 CUL_HM HM4NV1_4 level: 100
2018-01-22 18:06:40.145 CUL_HM HM4NV1_4 pct: 100
2018-01-22 18:06:40.145 CUL_HM HM4NV1_4 on
2018-01-22 18:06:40.145 CUL_HM HM4NV1_4 timedOn: running


Ich lasse den jetzt mal laufen um zu sehen, wie lange der blinkt ... Auf jeden Fall deutlich länger als das Vorwärmen des Brenners ...

M_I_B

... und es blinkt und blinkt und blinkt ...
Es wird also tatsächlich der Timer gesetzt, aber der läuft dan ewiglich; wie groß kann der Zähler maximal werden? Waren jetzt immerhin über 24h...

frank

dann setze doch besser ein langes on-for-timer.
max wahrscheinlich ähnlich gross, wie zb die delay zeiten unter get regList zu sehen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html