Programm setzt Variable bei Reboot falsch
Moderator: Co-Administratoren
-
- Beiträge: 13
- Registriert: 08.03.2016, 13:16
Programm setzt Variable bei Reboot falsch
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
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
- 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
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).
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 /
-
- Beiträge: 13
- Registriert: 08.03.2016, 13:16
Re: Programm setzt Variable bei Reboot falsch
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.
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
Grund: sinnloses Fullquote entfernt
-
- 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
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.
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.
-
- 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
hmmmm......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.
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"
..
-
- Beiträge: 13
- Registriert: 08.03.2016, 13:16
Re: Programm setzt Variable bei Reboot falsch
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
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.
-
- 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
[/quote]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.
-
- Beiträge: 13
- Registriert: 08.03.2016, 13:16
Re: Programm setzt Variable bei Reboot falsch
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
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]
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
Guten AbendNickHM 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.
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]
- 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
Warum wird hier alles gequotet was geht? Die Antworten beziehen sich doch eh auf den Post davor.
Gruß
Roberto
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 ...
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 ...
-
- 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
Ohje das geht so aber nicht.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.
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.
Lass dir nichts einreden.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.
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".
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.