Programm setzt Variable bei Reboot falsch

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

meistermoin
Beiträge: 13
Registriert: 08.03.2016, 13:16

Programm setzt Variable bei Reboot falsch

Beitrag von meistermoin » 20.01.2018, 20:45

Hallo zusammen,

ich habe mir ein Programm gebaut, welches eine Schalterschnittstelle auf den Zustand offen/geschlossen überwacht und daraufhin eine Systemvariable setzt, ob meine Pumpe läuft oder nicht.
Dies funktioniert soweit auch wie gewünscht.
Das Problem liegt nur darin, dass bei jedem Reboot der Zentrale die Systemvariable der Pumpe auf "läuft nicht" gesetzt wird obwohl der Zustand der Schalterschnittstelle offen ist.
Anbei ein Screenshot des Programmes.
Hat jemand eine Idee warum, oder wie man dies beheben kann?

Achso, ich verwende als Zentrale RasberryMatic, ich denke allerdings nicht, das dadurch ein Problem bei dem Programm entsteht.

Danke und Viele Grüße,
Jan
Dateianhänge
2018-01-20 20_37_45-HomeMatic WebUI.png

Benutzeravatar
jmaus
Beiträge: 9844
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 462 Mal
Danksagung erhalten: 1863 Mal
Kontaktdaten:

Re: Programm setzt Variable bei Reboot falsch

Beitrag von jmaus » 20.01.2018, 21:03

Bei einer CCU und somit auch bei RaspberryMatic ist es so, das bei Neustart genauso wie bei manuellem Start eines Programmes immer der erste Dann.. Zweig ausgeführt wird und die Bedingungen bis auf einfache Vergleiche des Wertes einer Systemvariable komplett ignoriert werden. D.h. Du solltest dein Programm umstellen das im ersten Dann.. das ausgeführt wird was du nach einem Neustart erwarten würdest.

Diesbzgl. gibt es übrigens ein Enhancement Ticket um diese doch recht ungewöhnliche Verhalten zu verändern (siehe https://github.com/jens-maus/RaspberryMatic/issues/229 bzw. https://github.com/jens-maus/RaspberryMatic/issues/223).
RaspberryMatic 3.75.6.20240316 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal / ☕️

meistermoin
Beiträge: 13
Registriert: 08.03.2016, 13:16

Re: Programm setzt Variable bei Reboot falsch

Beitrag von meistermoin » 20.01.2018, 21:59

Danke für das schnelle Feedback :)
Ich habe das Gefühl, dass beide Else Zweige ausgeführt werden.
Vom ersten If und vom Elseif. Kann das sein?
Selbst nach der von dir Empfohlenen Änderung ist immer noch das selbe verhalten.
Zuletzt geändert von alchy am 20.01.2018, 22:01, insgesamt 1-mal geändert.
Grund: sinnloses Fullquote entfernt

NickHM
Beiträge: 3733
Registriert: 23.09.2017, 12:04
Hat sich bedankt: 66 Mal
Danksagung erhalten: 120 Mal

Re: Programm setzt Variable bei Reboot falsch

Beitrag von NickHM » 20.01.2018, 23:35

Guten Abend

Du verwendest eine HM-SCI ??

Ich sehe das Problem nicht beim Programm, sondern beim Zustand der Schalterschnittstelle, die nicht mit der Realität übereinstimmt.
Hast Du direkt nach dem Booten mal den Status der SCI angesehen.
Der ist "geschlossen" oder"offen" , muss aber nicht mit dem wirklichen Zustand identisch sein. Ich habe ein ähnliches Problem mit einem SCI an einem Regensensor. Sobald die CCU neu gebootet ist, regnet es (auf der Anzeige)
Anfangs habe ich dann den Regensensor mit etwas Wasser befeuchtet. Da der SCI nicht mit Batterie, sondern einem Netzteil betrieben wird, schalte ich die Versorgungsspannung kurz aus / an. Dann stimmt der Status wieder.
Also die CCU weiss erst nach der ersten Änderung und damit verbundenen Funkübertragung, wie der Status des SCI wirklich ist.
Das ist das gleiche Problem wie mit den Fensterkontakten.

nimmnenkeks
Beiträge: 453
Registriert: 30.11.2016, 20:24
Hat sich bedankt: 43 Mal
Danksagung erhalten: 19 Mal

Re: Programm setzt Variable bei Reboot falsch

Beitrag von nimmnenkeks » 21.01.2018, 12:53

jmaus hat geschrieben:Bei einer CCU und somit auch bei RaspberryMatic ist es so, das bei Neustart genauso wie bei manuellem Start eines Programmes immer der erste Dann.. Zweig ausgeführt wird und die Bedingungen bis auf einfache Vergleiche des Wertes einer Systemvariable komplett ignoriert werden. D.h. Du solltest dein Programm umstellen das im ersten Dann.. das ausgeführt wird was du nach einem Neustart erwarten würdest.
hmmmm......
FRÜHER  war es doch mal so, das bei CCU-Reboot dort das gesamte Programm durchlaufen wurde (kann sich ja geändert haben, ich nutze halt noch eine alte Firmware).
NICHT nur das erste "Dann" ausgeführt.

Ssoweit mir bekannt wird "Nur" bei manueller Auslösung des Programms wird das erste "Dann" ausgeführt, bei CCU-Reboot jedoch immer das ganze Programm, aber das kann ja in aktuelleren Firmwareversionen "anders" sein.

Hinzu kommt, dass der (wie schon erwähnt) SCI bei CCU-Reboot erst einmal den Status "unbekannt" hat, bis er betätigt wird, oder 24h rum sind (siehe auch ELV).

Da würde es auch nicht helfen auf einen abgeschlossenen Reboot zu warten, denn erst nach 24h, oder Betätigung wird der tatsächlich Status des SCI's der CCU bekannt sein und die Logikvariable hat den richtigen Wert.

Abgesehen davon, dass nur ein Abwarten des CCU-Reboots "über wie ne Schubkarre Möhren" ist, denn in TE's Problem würde es auch nicht helfen (s.o.).


Damit es keine Probleme beim Reboot mehr gibt, wurde von BadenPower unter

viewtopic.php?f=31&t=39187

eine geniale Umsetzung zur "geordnetem" Reboot veröffentlicht!

Das ist meiner Meinung die einzig vernünftige Ansatz für einen sauberen Reboot.

Dort setzt man SysVars für solche HM-Komponenten wie den SCI erst einmal an Bootreihenfolge 1-x auf "unbekannt". Damit kann man ja dann entsprechend in Programmen arbeiten.

Abeitet man nach BadenPowers einmaliger Programmstruktur, die KEINE "Wenn's" nutzen und den Bootstatus berücksichtigen (Id), würde das Programm so wie gefordert laufen und den "unbekannten Status" des SCI's nach CCU-Reboot auch richtig über die SysVar abbilden.


Es würde sich im o.g. Fall dann anbieten mit einer Werteliste zu arbeiten.

SysVar "Pumpenüberwachung"
Typ "Werteliste" 
Werte "unbekannt geschlossen offen"


..

meistermoin
Beiträge: 13
Registriert: 08.03.2016, 13:16

Re: Programm setzt Variable bei Reboot falsch

Beitrag von meistermoin » 21.01.2018, 16:14

Ich verwende HomeMatic Funk-Schließerkontaktschnittstelle 3-fach.
Du hast recht, der Status vom Aktor ist bei reboot auf "geschlossen".
Dadurch wird die Variable falsch gesetzt.
Ich werde mal das Schließer-Relais durch ein Öffner-Relais tauschen und die Logik vom Programm umdrehen sodass bei geöffnetem Zustand die Variable auf "läuft nicht" gesetzt wird.

Danke,
Jan
NickHM hat geschrieben:Guten Abend

Du verwendest eine HM-SCI ??

Ich sehe das Problem nicht beim Programm, sondern beim Zustand der Schalterschnittstelle, die nicht mit der Realität übereinstimmt.
Hast Du direkt nach dem Booten mal den Status der SCI angesehen.
Der ist "geschlossen" oder"offen" , muss aber nicht mit dem wirklichen Zustand identisch sein. Ich habe ein ähnliches Problem mit einem SCI an einem Regensensor. Sobald die CCU neu gebootet ist, regnet es (auf der Anzeige)
Anfangs habe ich dann den Regensensor mit etwas Wasser befeuchtet. Da der SCI nicht mit Batterie, sondern einem Netzteil betrieben wird, schalte ich die Versorgungsspannung kurz aus / an. Dann stimmt der Status wieder.
Also die CCU weiss erst nach der ersten Änderung und damit verbundenen Funkübertragung, wie der Status des SCI wirklich ist.
Das ist das gleiche Problem wie mit den Fensterkontakten.

NickHM
Beiträge: 3733
Registriert: 23.09.2017, 12:04
Hat sich bedankt: 66 Mal
Danksagung erhalten: 120 Mal

Re: Programm setzt Variable bei Reboot falsch

Beitrag von NickHM » 21.01.2018, 16:29

meistermoin hat geschrieben:Ich verwende HomeMatic Funk-Schließerkontaktschnittstelle 3-fach.
Du hast recht, der Status vom Aktor ist bei reboot auf "geschlossen".
Dadurch wird die Variable falsch gesetzt.
Ich werde mal das Schließer-Relais durch ein Öffner-Relais tauschen und die Logik vom Programm umdrehen sodass bei geöffnetem Zustand die Variable auf "läuft nicht" gesetzt wird.
[/quote]

Guten Abend

das musst Du Dir gut überlegen. Es vermeidet evtl. einen ungewollten Fehlalarm beim Booten, aber Du hast trotzdem nicht den aktuellen Status der Pumpe.
So etwas kann man nur sicher lösen, indem ein Wired Eingangsmodul verwendet wird, dessen Status abgefragt werden kann.
Das o.g. Verhalten ist leider einer der unlösbaren Nachteile der Funk Sensoren der HM.

Beispiel Fensterkontakt (TFK)
Nach dem Booten sind alle Fenster geschlossen, jedenfalls in der CCU. Ist ein Fenster offen, kann man trotzdem die "Alarmanlage" scharf schalten und der Einbrecher macht später das schon offene Fenster einfach weiter auf. In der CCU bleibt es weiterhin geschlossen.

Man kann das in gewissem Masse über die Abbildung der Kontakte in einer SysVar kompensieren, wenn der Zustand der SsyVar vor dem Reboot gespeichert wird. Bei einem Spannungsausfall ist das z.B. nicht sicher gestellt. und es bleibt wieder ein Schlupfloch ... wenn der Status sich in der zeit des Reboot ändert.

Für Fälle, wo andere Anlagen wie Pumpen oder Heizungen überwacht werden sollen ist ein SCI oder sonstiger Funksensor einfach ... mit einem gewissen Risiko behaftet.

meistermoin
Beiträge: 13
Registriert: 08.03.2016, 13:16

Re: Programm setzt Variable bei Reboot falsch

Beitrag von meistermoin » 21.01.2018, 18:00

Guten Abend :)

Ja, das stimmt. Allerdings interessiert mich ja "nur" die Änderung des Status.
Ich habe es nun auf einen Öffnungskontakt am SHT 5000 Wassermelder umgebaut.
Und sobald der Auslöst und den Kontakt öffnet wir die Variable korrekt gesetzt, egal ob nach einem Reboot oder nicht.
Die für mich passende Lösung wie in beigefügtem Bild :)

NickHM hat geschrieben:
meistermoin hat geschrieben:Ich verwende HomeMatic Funk-Schließerkontaktschnittstelle 3-fach.
Du hast recht, der Status vom Aktor ist bei reboot auf "geschlossen".
Dadurch wird die Variable falsch gesetzt.
Ich werde mal das Schließer-Relais durch ein Öffner-Relais tauschen und die Logik vom Programm umdrehen sodass bei geöffnetem Zustand die Variable auf "läuft nicht" gesetzt wird.
Guten Abend

das musst Du Dir gut überlegen. Es vermeidet evtl. einen ungewollten Fehlalarm beim Booten, aber Du hast trotzdem nicht den aktuellen Status der Pumpe.
So etwas kann man nur sicher lösen, indem ein Wired Eingangsmodul verwendet wird, dessen Status abgefragt werden kann.
Das o.g. Verhalten ist leider einer der unlösbaren Nachteile der Funk Sensoren der HM.

Beispiel Fensterkontakt (TFK)
Nach dem Booten sind alle Fenster geschlossen, jedenfalls in der CCU. Ist ein Fenster offen, kann man trotzdem die "Alarmanlage" scharf schalten und der Einbrecher macht später das schon offene Fenster einfach weiter auf. In der CCU bleibt es weiterhin geschlossen.

Man kann das in gewissem Masse über die Abbildung der Kontakte in einer SysVar kompensieren, wenn der Zustand der SsyVar vor dem Reboot gespeichert wird. Bei einem Spannungsausfall ist das z.B. nicht sicher gestellt. und es bleibt wieder ein Schlupfloch ... wenn der Status sich in der zeit des Reboot ändert.

Für Fälle, wo andere Anlagen wie Pumpen oder Heizungen überwacht werden sollen ist ein SCI oder sonstiger Funksensor einfach ... mit einem gewissen Risiko behaftet.[/quote]
Dateianhänge
Pumpenüberwachung.png

Benutzeravatar
robbi77
Beiträge: 13847
Registriert: 19.01.2011, 19:15
System: CCU
Wohnort: Landau
Hat sich bedankt: 181 Mal
Danksagung erhalten: 738 Mal

Re: Programm setzt Variable bei Reboot falsch

Beitrag von robbi77 » 21.01.2018, 18:09

Warum wird hier alles gequotet was geht? Die Antworten beziehen sich doch eh auf den Post davor.


Gruß
Roberto
Bei Risiken und Nebenwirkungen fragen Sie den Elektriker Ihres geringsten Mißtrauens!
http://www.eq-3.de/service/downloads.html
Tips und Tricks für Anfänger: viewtopic.php?t=22801
Programmlogik: viewtopic.php?f=31&t=4251
Webui-Handbuch: https://www.eq-3.de/downloads/download/ ... h_eQ-3.pdf
Script und Linksammlung: viewtopic.php?f=26&t=27907
Troll des Forums ...

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Programm setzt Variable bei Reboot falsch

Beitrag von alchy » 21.01.2018, 18:36

jmaus hat geschrieben:Bei einer CCU und somit auch bei RaspberryMatic ist es so, das bei Neustart genauso wie bei manuellem Start eines Programmes immer der erste Dann.. Zweig ausgeführt wird und die Bedingungen bis auf einfache Vergleiche des Wertes einer Systemvariable komplett ignoriert werden. D.h. Du solltest dein Programm umstellen das im ersten Dann.. das ausgeführt wird was du nach einem Neustart erwarten würdest.
Ohje das geht so aber nicht. :shock:
Seit wann werden bei einem CCU Neustart automatisch und ungeprüft alle DANN ausgeführt, auch wenn sie ein WENN enthalten?
Woher kommt denn diese Weisheit? Hoffentlich glaubt dir das keiner. :!:
nimmnenkeks hat geschrieben: Ssoweit mir bekannt wird "Nur" bei manueller Auslösung des Programms wird das erste "Dann" ausgeführt, bei CCU-Reboot jedoch immer das ganze Programm, aber das kann ja in aktuelleren Firmwareversionen "anders" sein.
Lass dir nichts einreden. :wink:
Ich habe zig Programme, deren DANN glücklicherweise bei einem Neustart nicht automatisch ausgeführt wird.
Ob "einfache Vergleiche des Wertes einer Systemvariablen" oder andere Bedingungen im WENN - auch mit aktueller Firmware.
Aber vielleicht wird das in einer neuen Firmware ungefordert umgesetzt und als Neuheit verkauft.
Must have: "Klick dir zusammen was du willst, ein Neustart führt immer zu einem Chaos". :roll:
Man kann es nicht wissen, wollen wir hoffen das dem nicht so ist.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“