Variablenabfrage in Programm funktioniert nicht
Moderator: Co-Administratoren
-
- Beiträge: 28
- Registriert: 25.06.2013, 20:57
Variablenabfrage in Programm funktioniert nicht
Hallo zusammen,
ich habe zig funktionierende Programme/Skripte in der Homematic Zentrale aber dieses eine will einfach nicht: Ich prüfe die Variable GarageLastToggleClose (die true ist, wenn die Garage bei der letzten Aktion geschlossen worden ist) und "wenn" sie false ist, "dann" schließe ich die Garage und setze die Variable auf true, "sonst wenn" sie true ist, "dann" öffne ich die Garage und setze die Variable auf false.
Das Problem ist: Das Programm geht IMMER durch den oberen Zweig (sehe ich im Protokoll der Aktoren), egal wie der Status der Variablen ist (sehe ich in Status und Bedienung -> Systemvariable.
Hier mal so eine Art Beweis: Screenshot aus dem Protokoll bei 2x ausführen nacheinander: Ich kann nur einen erfolgreichen Durchlauf machen: er geht durch den "Wenn"-Zweig, schließt die Garage, setzt die Variable richtig, alles gut. Obwohl er laut Variablenzustand durch den "sonst wenn" Zweig gehen müsste, geht er aber immer nur durch den "wenn" Zweig und führt immer die Aktionen aus. Ich hab die CCU2 einmal stromlos gemacht und neugestartet, aber das hat nicht geholfen.
Ich habe die beiden Programmteile in "wenn" und "sonst wenn" getauscht und dann führt er auch immer den "wenn" Zweig aus und nie den "sonst wenn".
Übrigens: die reboot Variable ist immer (außer kurz nach dem CCU reboot) auf false und das scheint er richtig auszulesen, sonst würde er nie etwas machen.
ich habe zig funktionierende Programme/Skripte in der Homematic Zentrale aber dieses eine will einfach nicht: Ich prüfe die Variable GarageLastToggleClose (die true ist, wenn die Garage bei der letzten Aktion geschlossen worden ist) und "wenn" sie false ist, "dann" schließe ich die Garage und setze die Variable auf true, "sonst wenn" sie true ist, "dann" öffne ich die Garage und setze die Variable auf false.
Das Problem ist: Das Programm geht IMMER durch den oberen Zweig (sehe ich im Protokoll der Aktoren), egal wie der Status der Variablen ist (sehe ich in Status und Bedienung -> Systemvariable.
Hier mal so eine Art Beweis: Screenshot aus dem Protokoll bei 2x ausführen nacheinander: Ich kann nur einen erfolgreichen Durchlauf machen: er geht durch den "Wenn"-Zweig, schließt die Garage, setzt die Variable richtig, alles gut. Obwohl er laut Variablenzustand durch den "sonst wenn" Zweig gehen müsste, geht er aber immer nur durch den "wenn" Zweig und führt immer die Aktionen aus. Ich hab die CCU2 einmal stromlos gemacht und neugestartet, aber das hat nicht geholfen.
Ich habe die beiden Programmteile in "wenn" und "sonst wenn" getauscht und dann führt er auch immer den "wenn" Zweig aus und nie den "sonst wenn".
Übrigens: die reboot Variable ist immer (außer kurz nach dem CCU reboot) auf false und das scheint er richtig auszulesen, sonst würde er nie etwas machen.
- Black
- Beiträge: 5480
- Registriert: 12.09.2015, 22:31
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Wegberg
- Hat sich bedankt: 424 Mal
- Danksagung erhalten: 1074 Mal
- Kontaktdaten:
Re: Variablenabfrage in Programm funktioniert nicht
Wie startest du denn dieses Programm? So mal als Frage
Black
Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg
Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann
Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W
technical contribution against annoying advertising
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg
Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann
Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W
technical contribution against annoying advertising
- Baxxy
- Beiträge: 10827
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 608 Mal
- Danksagung erhalten: 2225 Mal
Re: Variablenabfrage in Programm funktioniert nicht
Interessant das dein Programm überhaupt irgendeinen Zweig durchläuft. Das kann nur sein wenn du das Programm über die WebUI manuell startest oder per Script z.B..burninhell hat geschrieben: ↑25.10.2020, 09:59Das Problem ist: Das Programm geht IMMER durch den oberen Zweig (sehe ich im Protokoll der Aktoren), egal wie der Status der Variablen ist (sehe ich in Status und Bedienung -> Systemvariable.
Da alle deine Bedingungen auf "nur prüfen" stehen wird das Programm niemals durch eine der Bedingungen getriggert.
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen
- Black
- Beiträge: 5480
- Registriert: 12.09.2015, 22:31
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Wegberg
- Hat sich bedankt: 424 Mal
- Danksagung erhalten: 1074 Mal
- Kontaktdaten:
Re: Variablenabfrage in Programm funktioniert nicht
Darauf wollte ich mit meiner fragestellung ja hinaus....
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg
Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann
Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W
technical contribution against annoying advertising
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg
Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann
Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W
technical contribution against annoying advertising
-
- Beiträge: 28
- Registriert: 25.06.2013, 20:57
Re: Variablenabfrage in Programm funktioniert nicht
Technisch über einen http get Request auf die ccu:8181. Da klebt ein NFC Sticker an der Garage, der den Request auf dem Handy auslöst.
- Black
- Beiträge: 5480
- Registriert: 12.09.2015, 22:31
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Wegberg
- Hat sich bedankt: 424 Mal
- Danksagung erhalten: 1074 Mal
- Kontaktdaten:
Re: Variablenabfrage in Programm funktioniert nicht
das beantwortet die frage aber noch nicht.
was macht dieser http request ? ein .State auf eine Variable ? ein .ProgramExecute () auf ein programm ?
was macht dieser http request ? ein .State auf eine Variable ? ein .ProgramExecute () auf ein programm ?
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg
Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann
Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W
technical contribution against annoying advertising
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg
Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann
Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W
technical contribution against annoying advertising
-
- Beiträge: 28
- Registriert: 25.06.2013, 20:57
Re: Variablenabfrage in Programm funktioniert nicht
Über ProgramExecute() wird das oben abgebildete Programm aufgerufen.
Ich habe gerade mal versucht die Variable durch eine nagelneu angelegte auszutauschen: hat nichts gebracht.
Dann habe ich versucht die Variable über ein Script auf false zu setzen, auszulesen, auf true zu setzen, auszulesen:
string val;
dom.GetObject(8345).State(0);
val=dom.GetObject(8345).Value();
WriteLine(val);
dom.GetObject(8345).State(1);
val=dom.GetObject(8345).Value();
WriteLine(val);
Das funktioniert und ändert auch die Variable so, dass ich im nachhinein in der Systemvariablenübersicht den geänderten Wert sehe.
Wäre das ein Weg das Programm von Klickibunti auf Script umzuschreiben?
Ich habe gerade mal versucht die Variable durch eine nagelneu angelegte auszutauschen: hat nichts gebracht.
Dann habe ich versucht die Variable über ein Script auf false zu setzen, auszulesen, auf true zu setzen, auszulesen:
string val;
dom.GetObject(8345).State(0);
val=dom.GetObject(8345).Value();
WriteLine(val);
dom.GetObject(8345).State(1);
val=dom.GetObject(8345).Value();
WriteLine(val);
Das funktioniert und ändert auch die Variable so, dass ich im nachhinein in der Systemvariablenübersicht den geänderten Wert sehe.
Wäre das ein Weg das Programm von Klickibunti auf Script umzuschreiben?
- Black
- Beiträge: 5480
- Registriert: 12.09.2015, 22:31
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Wegberg
- Hat sich bedankt: 424 Mal
- Danksagung erhalten: 1074 Mal
- Kontaktdaten:
Re: Variablenabfrage in Programm funktioniert nicht
ProgramExeceute() bewirkt genau wie ein manueller Programmstart IMMER das unbedingte Ausführen des ersten Dann Teiles, er wird IMMER ausgeführt, egal ob irgendwelche Bedingungen erfüllt sind oder nicht.
Das ist schon mal der Grund, warum es bei dir nicht geht.
Das ist schon mal der Grund, warum es bei dir nicht geht.
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg
Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann
Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W
technical contribution against annoying advertising
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg
Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann
Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W
technical contribution against annoying advertising
-
- Beiträge: 28
- Registriert: 25.06.2013, 20:57
Re: Variablenabfrage in Programm funktioniert nicht
Ok, das ist schonmal ein Superwertvoller Hinweis.
Mir fallen folgende Lösungsvarianten ein:
1)Wie mein letzter Vorschlag, meine Ganze Logik als Script umbauen und abspeichern.
2) Stattdessen über http eine Systemvariable call_garage.toggle auf true setzen und in einem Programm auf das Ändern dieser Variable reagieren.
Ist eine der beiden besser oder vielleicht gibt es eine bessere dritte Lösung?
Mir fallen folgende Lösungsvarianten ein:
1)Wie mein letzter Vorschlag, meine Ganze Logik als Script umbauen und abspeichern.
2) Stattdessen über http eine Systemvariable call_garage.toggle auf true setzen und in einem Programm auf das Ändern dieser Variable reagieren.
Ist eine der beiden besser oder vielleicht gibt es eine bessere dritte Lösung?
-
- Beiträge: 9679
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 700 Mal
- Danksagung erhalten: 1626 Mal
Re: Variablenabfrage in Programm funktioniert nicht
2)
Warum was neues erfinden?
Warum was neues erfinden?
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++