Denkfehler Programmierung???

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Antworten
cobalt8
Beiträge: 44
Registriert: 05.04.2017, 16:34

Denkfehler Programmierung???

Beitrag von cobalt8 » 01.06.2017, 23:43

Hallo Zusammen, ich habe folgendes Problem und hoffe, dass mir einer weiterhelfen kann.

Immer wenn ich z.B. die Aktivität mehrere Geräte über eine LED in der LED Anzeige anzeigen lassen will, oder in eine Variable schreiben lassen will, passiert mir folgender Fehler.
Beispiel siehe Bild.
In dem Fall wollte ich, dass sobald eine von drei Lampen angeschaltet wird, dass dann die LED auf gelb umspringt, und ansonsten aus geht.
Das Kuriose dann ist, dass sich bei den Homematic Ip Schaltsteckdosen genau andersherum verhält. Sobald ich beide Steckdosen einschalte (und nur dann), geht die LED aus, und sobald eine von beiden Steckdosen aus ist geht die LED an.

Bisher habe ich es danach immer geschafft, diesen Fehler zu umgehen, indem ich einfach für jeden Fall eine eigene Sonst-Wenn Schleife erstellt habe, was aber auch sehr aufwendig ist.

Ich tappe allerdings auch immer wieder in diesen Fehler, da ich bisher die Logik an dieser Stelle nicht verstanden habe. Kann mir irgendeiner erklären, warum dieser Fehler auftritt?
Dateianhänge
Problem Programm.jpg

cobalt8
Beiträge: 44
Registriert: 05.04.2017, 16:34

Re: Denkfehler Programmierung???

Beitrag von cobalt8 » 01.06.2017, 23:50

Jetzt geht es auf einmal doch. Ich verstehe es irgendwie nicht!

Familienvater
Beiträge: 7151
Registriert: 31.12.2006, 15:18
System: Alternative CCU (auf Basis OCCU)
Wohnort: Rhein-Main
Danksagung erhalten: 34 Mal

Re: Denkfehler Programmierung???

Beitrag von Familienvater » 01.06.2017, 23:56

Hi,

dazu nur gleich der gutgemeinte Hinweis:
Bei jeder Änderung, bei der der kombinierte Zustand nach wie vor wahr ist, wird erneut das Funkpaket gesendet, was die bereits leuchtende LED zum weiterleuchten in der gleichen Farbe animiert. Das ist bei einem Programm vielleicht nur halb so wild, wenn man das aber für alle 16 Kanäle mit ähnlichen Programmen macht, dann bleibt ganz schnell das Licht an oder aus, weil dann die Zentrale im Dutycycle hängt.

Da ich mir selbst mit der Logik von WebUI-Programmen nicht sicher bin, gerade was das (unnütze) Triggern durch HmIP-Aktoren mit Strommessaktor angeht (der Aktor sendet ggf. alle 2-3 Min seine "Ich Lebe noch"-Mitteilung, mit evtl. allen wichtigen und unwichtigen Statusinfos), kann das auch unbewusst dazu führen, das die LED minütlich sinnlos angefunkt wird.

Der Familienvater

UweRLP
Beiträge: 311
Registriert: 22.07.2013, 08:44
System: CCU
Hat sich bedankt: 13 Mal
Danksagung erhalten: 8 Mal

Re: Denkfehler Programmierung???

Beitrag von UweRLP » 03.06.2017, 11:00

cobalt8 hat geschrieben:Ich tappe allerdings auch immer wieder in diesen Fehler, da ich bisher die Logik an dieser Stelle nicht verstanden habe. Kann mir irgendeiner erklären, warum dieser Fehler auftritt?
Für mein Verständnis macht die CCU keinen Fehler.
Du sagst wenn ein Schalter eingeschaltet ist (oder) soll die LED orange leuchten, wenn dann aber zwei Schalter eingeschaltet sind (und) wird die LED ausgeschaltet.
Lösche mal die Aktivität sonst und erstelle ein zweites Programm
Steckdose Sonne 1 bei bei Schaltzustand aus bei Änderung auslösen
und
Steckdose Stechleucht bei bei Schaltzustand aus bei Änderung auslösen
und
HmIP-BDT bei Dimmwert gleich null bei Änderung auslösen
dann
Statusanzeige LED 9 sofort Anzeige aus
Uwe
--------------------------------------------
CCU3, ioBroker unter Windows 10 auf einem HP EliteDesk 800 G1 mit Intel(R) Core(TM) i5-4570S
Abgesichert mit einer APC Back-UPS Pro 1500 mit externem Batterie Pack BR24BPG
--------------------------------------------

cobalt8
Beiträge: 44
Registriert: 05.04.2017, 16:34

Re: Denkfehler Programmierung???

Beitrag von cobalt8 » 04.06.2017, 12:46

So einfach war das Verhalten tatsächlich nicht.
Es verhielt sich ungefähr so:
Lampe 1,Lampe 2,Dimmer aus = LED an
Lampe 1 an, Lampe 2 aus, Dimmer aus = LED aus
Lampe 1 aus, Lampe 2 an, Dimmer aus = LED aus
Lampe 1 an, Lampe 2 an, Dimmer aus = LED aus

Witzig wurde es dann,wenn ich zusätzlich am Dimmer was gestellt habe. Beim Dimmer war es tatsächlich so, dass ein Einschalten des Dimmers, die Lampe anschaltete, wenn sie aus war, und ein aussschalten aus, also genau gegensätzlich zu den beiden anderen Lampen ..... ich denke ein Neustart hat das Problem gelöst, sicher bin ich mir aber nicht, dann es funktionierte dann auf einmal.

Für den Hinweis mit dem Duty Cycle auch vielen Dank. Ich habe tatsächlich immer einen recht hohen Duty Cycle und bin deshalb für jeden Hinweis dankbar. Meine erste Idee war jetzt den Status der LED in eine Systemvariable zu schreiben, und dann ein weiteres Programm, dass eine Änderung der Variablen zum Display schickt.
Neue Idee: Ich kann ja im Programm den Status der LED prüfen lassen, und dann das Programm nur ausführen lassen, wenn die LED noch nicht entsprechend leuchtet. Meine Frage dann ist nur: Wenn ich eine LED in einem Programm überprüfen lasse, holt sich das Programm dann den Status über Funk oder aus dem Speicher der CCU2? Ich meine mal gelesen zu haben, dass ein "prüfen" nicht extra an den Aktor sendet und dieser den Status zurückmeldet, sondern dass die CCU ihr internes Gedächtnis dafür benutzt?

cobalt8
Beiträge: 44
Registriert: 05.04.2017, 16:34

Re: Denkfehler Programmierung???

Beitrag von cobalt8 » 06.06.2017, 09:17

Ok, also ich habe jetzt nach vielem Problem endlich die Lösung gefunden, auch wenn ich den Grund immernoch nicht verstehe.

Immer, wenn ich ein Programm nach obigen Muster erstelle also:
Wenn
A ein "bei Änderung auslösen"
oder
B ein "bei Änderung auslösen"
Dann mache etwas
Sonst mache etwas anderes

Immer dann tritt bei mir das Problem auf. Ein Neustart ist bei mir tatsächlich nicht die Lösung. Sondern wenn ich alle Wenn Bedingungen einmal statt auf ein auf aus ändere, die Bedingungen auslöse und dann sie im Programm wieder alle auf ein ändere (so wie es oben steht), dann funktioniert es auf einmal, auch wenn das Programm dann genauso aussieht wie vorher.

UweRLP
Beiträge: 311
Registriert: 22.07.2013, 08:44
System: CCU
Hat sich bedankt: 13 Mal
Danksagung erhalten: 8 Mal

Re: Denkfehler Programmierung???

Beitrag von UweRLP » 07.06.2017, 08:42

Das habe ich versucht zu erklären. Es sind dann keine "ODER" mehr sondern "UND" wenn zwei oder mehr zu gleichen Zeit eingeschaltet sind dann wird sonst ausgeführt. Du könntest auch versuchen das Programm anders rum zu stricken.

Wenn A aus bei Änderung
und
Wenn B aus bei Änderung
und
Wenn C aus bei Änderung
dann LED aus
sonst
LED an
Uwe
--------------------------------------------
CCU3, ioBroker unter Windows 10 auf einem HP EliteDesk 800 G1 mit Intel(R) Core(TM) i5-4570S
Abgesichert mit einer APC Back-UPS Pro 1500 mit externem Batterie Pack BR24BPG
--------------------------------------------

DrTob
Beiträge: 3426
Registriert: 29.10.2010, 08:24
Danksagung erhalten: 5 Mal

Re: Denkfehler Programmierung???

Beitrag von DrTob » 07.06.2017, 14:20

cobalt8 hat geschrieben:Ok, also ich habe jetzt nach vielem Problem endlich die Lösung gefunden, auch wenn ich den Grund immernoch nicht verstehe.

Immer, wenn ich ein Programm nach obigen Muster erstelle also:
Wenn
A ein "bei Änderung auslösen"
oder
B ein "bei Änderung auslösen"
Dann mache etwas
Sonst mache etwas anderes

Immer dann tritt bei mir das Problem auf. Ein Neustart ist bei mir tatsächlich nicht die Lösung. Sondern wenn ich alle Wenn Bedingungen einmal statt auf ein auf aus ändere, die Bedingungen auslöse und dann sie im Programm wieder alle auf ein ändere (so wie es oben steht), dann funktioniert es auf einmal, auch wenn das Programm dann genauso aussieht wie vorher.
Hört sich nach einem Bug an.

cobalt8
Beiträge: 44
Registriert: 05.04.2017, 16:34

Re: Denkfehler Programmierung???

Beitrag von cobalt8 » 11.06.2017, 11:14

Ja, es scheint tatsächlich ein Bug zu sein, der immer mit den ganzen HM-IP Schaltsteckdosen auftritt. Die Dinger haben mich dadurch tatsächlich schon fast zur Verzweiflung gebracht, da quasi kein Programm, dass einen Schaltzustand der Dinger ausliest ordentlich funktioniert.

Hab das jetzt mal ausprobiert, dass ich den Schaltsteckdosen eine Variable direkt zurordne, und dann ein kleines Programm geschrieben, dass die Variable AN oder AUS schaltet. Selbst die Variable veränderte ihren Zustand nicht. Es funktionierte erst dann, als ich in den Programmen einmal die Abfrage des Steckdosenstatusses von "Schaltzustand AN" auf Aus und dann wieder auf An gestellt habe.

cobalt8
Beiträge: 44
Registriert: 05.04.2017, 16:34

Re: Denkfehler Programmierung???

Beitrag von cobalt8 » 11.06.2017, 11:23

Das allerdings alles herauszufinden hat mich echt fast zur Verzweiflung gebracht. Vll. Kann man den Beitrag zu den Bugs schieben.

Antworten

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