Unstellung auf Featurelevel 5.7 - Problem mit FHEM2FHEM ?

Begonnen von pantau, 29 November 2015, 17:41:52

Vorheriges Thema - Nächstes Thema

pantau

Hallo,

ich habe gestern mal wieder meine FHEM Server upgedated (das letzte Mal im Juli) auf featurelevel 5.7.

Dabei bin ich an folgender Funktion hängengeblieben:
Sie soll dafür sorgen das mein Backup Server übernimmt, falls mein Master Server abschmiert.

[Backup]
define bkp2main FHEM2FHEM 192.168.99.164 LOG:.* aa
define bkpCmp dummy
define bkpGet dummy
define bkp2main_ret dummy
define bkpExec notify mainDummy {fhem "%"}

#define bkpExec notify mainDummy { fhem "$EVENT" }

define bkpCheck at +*00:20:00 {if(Value("bkpCmp") ne Value("bkpGet")) {\
        fhem "set bkpCmp " . Value("bkpGet")\
        }\
        else {\
        fhem "include /etc/fhem/take_over_beebox" if(Value("bkp2main_ret") ne 0);;\
        fhem "include /etc/fhem/bkp2main_retry" if(Value("bkp2main_ret") eq 0)\
        }}


[Master]
define mainDummy dummy
define mainSet at +*00:10:00 set mainDummy set bkpGet $min


Gemäß der Anleitung ( @ und % im notify/etc gibts nicht mehr, genauso wie %NAME, %EVENT. Bitte stattdessen $NAME, $EVENT verwenden.) habe ich "%" durch "$EVENT" ersetzt. Die Funktion lief aber nicht mehr. Mit attr global featurelevel 5.6 läuft der ursprüngliche Code noch.

Was habe ich übersehen?

Außerdem ist mir aufgefallen, das im Commandref (unter notify) steht:
Anstelle von % und @, können die Parameter %EVENT (funktionsgleich mit %), %NAME (funktionsgleich mit @) und %TYPE (enthält den Typ des Gerätes, z.B. FHT) benutzt werden.
Müßte das nicht $EVENT, $NAME etc heißen?

betateilchen

Die fett markierte Zeile ist auskommentiert und wird überhaupt nicht ausgeführt.
Die Zeile davor ist nur kompatibel zu FL 5.6

So ganz verstehe ich Deine Frage noch nicht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

pantau

#2
Die fette Zeile war der Versuch auf 5.7 umzustellen (und wie erwähnt damit läuft es nicht, bzw, der Vergleich ist immer "gleich"). Dabei war naklar die Zeile drüber auskommentiert, welche der originale Code ist.
Ich bin nicht sicher ob an der Stelle das ersetzen von "%" nach "$EVENT" nicht dasd richtige ist, oder ob ich noch was anderes für featurelevel 5.7 ändern muss?

rudolfkoenig

Zitatdefine mainSet at +*00:10:00 set mainDummy set bkpGet $min
Duerfte nie funktioniert haben, da $min in einem FHEM-Befehl nicht bekannt ist

ZitatAußerdem ist mir aufgefallen, das im Commandref (unter notify) steht:
...
Stimmt, allerdings steht das in einem Absatz mit dem Ueberschrift:
ZitatAchtung: Folgende Vorgehensweise ist abgekündigt, funktioniert bis featurelevel 5.6 und wird in einem zukünftigen Release von FHEM nicht mehr unterstützt.

pantau

Vielen Dank für die Antwort.

> Duerfte nie funktioniert haben, da $min in einem FHEM-Befehl nicht bekannt ist

Tut es aber, (mit attr global featurelevel 5.6) auf Backup Server:

list bkpGet
Internals:
   NAME       bkpGet
   NR         668
   STATE      28
   TYPE       dummy
   Readings:
     2015-11-30 11:28:48   state           28
Attributes:


Mit 5.7 kommt da state $min, wie es wohl auch "richtig" ist?
Habe mir an dem "richtigen" Syntax mit 5.7 aber schon die Zähne ausgebissen. set bkpGet {$min}, set bkpGet Value($min), etc.
Könntest Du mir da bitte einen Hinweis geben ...?

Vielen Dank!

rudolfkoenig

Ich gehe davon aus, dass mit $min die aktuelle Minute gemeint ist.

ZitatTut es aber, (mit attr global featurelevel 5.6) auf Backup Server:
Glaube ich nicht. Weder die Theorie gibt das her, noch konnte ich das per Test verifizieren.

Was funktioniert (unabhaengig vom featurelevel):
{ fhem("set bkpGet $min") }

pantau

Hi Rudi,
wenn nicht der Glaube und die Theorie, dann muss es die Praxis sein:  ;)
Den Code habe ich übrigens vor Jahren hier geklaut und leicht abgewandelt:
https://groups.google.com/forum/?fromgroups=#!topic/fhem-users/SPV5Uh58FIQ
Makroskopisch lief der immer, sprich der Backup Server hat übernommen, wenn er sollte und war im Standby wenn der Master lief.

Ein set bkpGet $min auf dem Backup Server lokal liefert auch bei mir nur state $min zurück, unabhängig vom featurelevel.
Aber ein define mainSet at +*00:10:00 set mainDummy set bkpGet $min auf dem Master, das per FHEM2FHEM übertragen und ein define bkpExec notify mainDummy {fhem "%"} auf dem Backup liefert auf dem Backup bei list bkpGet im state den Wert (also die Minuten) von $min, sogar alle 10min neu ... bei featurelevel 5.6. Ich habe auch meine komplette cfg durchsucht, nirgends sonst wird bkpGet angefasst.

Ich habe Dein Vorschlag auf dem Master umgesetzt:
define mainSet  at +*00:10:00 set mainDummy { fhem("set bkpGet $min") }

Den Backup habe ich erst mal unverändert gelassen:
attr global featurelevel 5.6
define bkpExec notify mainDummy {fhem "%"}


Dann finde ich im Log vom Backup Server:
2015.11.30 14:49:22 1: PERL WARNING: Bareword found where operator expected at (eval 658) line 1, near ""{ fhem("set"
2015.11.30 14:49:22 3: eval: {fhem "{ fhem("set bkpGet $min") }"}
2015.11.30 14:49:22 1: PERL WARNING: String found where operator expected at (eval 658) line 1, near "$min") }""
2015.11.30 14:49:22 3: eval: {fhem "{ fhem("set bkpGet $min") }"}
2015.11.30 14:49:22 3: bkpExec return value: syntax error at (eval 658) line 1, near ""{ fhem("set bkpGet "


Damit ist das fhem doppelt und zeigt warum es mit
define mainSet at +*00:10:00 set mainDummy set bkpGet $min
auf dem Master geht.
Dann steht nämlich auf dem Backup genau das da, was Du vorschlägst { fhem("set bkpGet $min") }.
Allerdings muss  ich dann noch define bkpExec notify mainDummy {fhem "%"} featurelevel 5.7 kompatibel machen und define bkpExec notify mainDummy {fhem "$EVENT"} läuft bei mir nicht. Hier scheint dann die Übersetzungsregel % => $EVENT nicht zu passen? Oder habe ich Deine Realesenote zu 5.7 auch falsch verstanden?

rudolfkoenig

Lösung 1:
master:
define mainSet  at +*00:10:00 { fhem("set mainDummy set  bkpGet $min") }
Client:
define bkpExec notify mainDummy $EVENT


Weitere folgen :)

rudolfkoenig

Lösung 2 (erst nach einem update morgen nach 8:00):
master:
define mainSet  at +*00:10:00 set mainDummy set  bkpGet {($min)}
client (bleibt):
define bkpExec notify mainDummy $EVENT


pantau

Vielen Dank!!
Lösung 2 funktioniert prima nach fhem update.