Hey,
mir ist grade was sehr merkwürdiges aufgefallen, was wie ein Bug auf mich wirkt:
Ich habe mehrere Structures für die Lampen in den jeweiligen Räumen.
Nun habe ich auch ein DOIF, welches, wenn die Personengruppe "Jemand" auf off geht, alles mögliche ausschaltet:
define WeggehNote DOIF ([Jemand:"off"]) (set Wohnzimmer_Lampen off ; set Wohnzimmer_Geraete off ; set Schlafzimmer_Lampen off ; set Kueche_Lampen off ; set HUEDevice65542 off ; set Badezimmer_Lampen off ; set BettLautsprecher off ; set HM_5CCB28 off)
Das spannende ist nun: seit Kurzem schaltet im ersten Structure (Wohnzimmer_Lampen) nicht mehr alles. Genauer gesagt bleibt nur beim Auslösen von diesem Code die "SchreibtischLampe" (Teil des Structures "Wohnzimmer_Lampen") auf on.
Ich habe das Ganze dann mal weiter eingeschränkt: Führe ich nur
set Wohnzimmer_Lampen off ; set Wohnzimmer_Geraete off ; set Schlafzimmer_Lampen off ; set Kueche_Lampen off
bzw. sogar nur set Wohnzimmer_Lampen off ; set Kueche_Lampen off
aus, besteht schon das Problem, dass "SchreibtischLampe" auf on bleibt.
Grundsätzlich funktioniert das Structure aber: Befehle ich NUR "set Wohnzimmer_Lampen off", geht SchreibtischLampe korrekt mit aus.
Dann dachte ich während der Fehlersuche: ich tausche die beiden mal:
Aus set Wohnzimmer_Lampen off ; set Kueche_Lampen off
wird set Kueche_Lampen off ; set Wohnzimmer_Lampen off
Und siehe da: Es geht. Aber nicht so voreilig!
Nun steht also im gesamten Konstrukt:
set Wohnzimmer_Lampen off ; set Wohnzimmer_Geraete off ; set Schlafzimmer_Lampen off ; set Kueche_Lampen off ; set HUEDevice65542 off ; set Badezimmer_Lampen off ; set BettLautsprecher off ; set HM_5CCB28 off
also das selbe wie vorher, nur eine andere Reihenfolge und peng...: nun schaltet ein Device aus dem Structure "Schlafzimmer_Lampen" nicht mehr!
Das ist doch verrückt?!
Habt ihr schon mal davon gehört, dass Structures nicht komplett/sauber/vollständig schalten, wenn man mehrere hintereinander/auf einmal schaltet?
Vermutlich braucht ihr mehr Infos über meine Config, oder? Ich lasse euch gerne alles zukommen. Ich weiß aber logisch grad überhaupt nicht, wie das passieren kann und bin daher nicht sicher, was ich euch noch posten soll.
Viele Grüße
Patrick
Moin,
ein "list" einer structure würde vielleicht helfen. Was ich mir vorstellen kann: Wenn so viel hintereinander geschaltet wird (ich weiß ja nicht wie, aber ich vermute viel Funk) überlagern sich die Signale und es kommt zu Fehlern. Möglicherweise hilft ein "async_delay" oder eine kleine Verzögerung mittels "wait"-Attribut im DOIF.
Grüße,
Oli
Man kann es auch so machen das man einzelne Struktur Devices in eine große Haus oder Wohnungs Strukturen passt und dann nur diese schaltet wenn alles aus soll. Nur so als Tipp.
Hy Habe sowas auch am laufen nur
structure_Bewohner:absent.* set HUEGroup0,BOSE_D05FB8AAE204,BOSE_50722498B361,BOSE_50722498905A,GHoma_d35994,ESPEasy_Sonoff7_PUMP,
ESPEasy_Sonoff4_PUMP,ESPEasy_Sonoff5_PUMP,ESPEasy_Sonoff12_PUMP,ESPEasy_Sonoff2_PUMP off
und es wird immer alles geschaltet
Hey,
ja, dass es generell funktioniert weiß ich ja auch. ;) Spannend ist eben nur warum das hier nicht 100% der Fall ist und so unerklärbare Ausfälle, die aber reproduzierbar sind zeigt.
Hier die "list" von Wohnzimmer_Lampen:
Internals:
ATTR room
CHANGEDCNT 4
DEF room KommodeLampe SchreibtischLampe RegalLampe VitrineLampe TetrisLampe KnubbigLampe SubwooferLampe KerzeLichterketteLampe HUEDevice65538 HUEDevice65537
FUUID 5cd0935b-f33f-0d46-af4a-aba987afcbe95980
NAME Wohnzimmer_Lampen
NR 177
NTFY_ORDER 50-Wohnzimmer_Lampen
STATE on
TYPE structure
READINGS:
2020-01-01 23:37:33 LastDevice HUEDevice65538
2020-01-01 23:37:33 LastDevice_Abs HUEDevice65538
2020-01-01 23:37:33 state on
Attributes:
alias Lampen
clientstate_behavior relative
clientstate_priority on off
genericDeviceType switch
group Generalschalter
homebridgeMapping On=state,valueOn=on,valueOff=off,cmdOn=on,cmdOff=off
room Wohnzimmer,HomeKit01
und Kueche_Lampen:
Internals:
ATTR room
CHANGEDCNT 1
DEF room ErkerLampe TischLampe KlemmLampe DunstabzugshaubeLampe HUEDevice65541
FUUID 5cd0935b-f33f-0d46-0756-5219d661f5efde7f
NAME Kueche_Lampen
NR 280
NTFY_ORDER 50-Kueche_Lampen
STATE off
TYPE structure
READINGS:
2020-01-01 23:36:57 LastDevice HUEDevice65541
2020-01-01 23:36:57 LastDevice_Abs HUEDevice65541
2020-01-01 23:36:57 state off
Attributes:
alias Lampen
clientstate_behavior relative
clientstate_priority on off
genericDeviceType switch
group Generalschalter
homebridgeMapping On=state,valueOn=on,valueOff=off,cmdOn=on,cmdOff=off
room Küche,HomeKit01
Danke euch. :)
Hy du schaltest alles per HUE?
Dann Bau doch mal so um wie ich das habe, meine bei dem Aufbau wie du früher mal Probleme gehabt zu haben.
Bei meinem Heizungs DOIF bei dem jeder Raum andere Werte bekommt klappt es mit Semikolon ([Aussen:temperature] < 12 and [structure_Bewohner] eq "present") (set Bad desiredTemperature 19;set FL desiredTemperature 17;set KU desiredTemperature 18;set WCO desiredTemperature 16;set WCU desiredTemperature 17;set ZU desiredTemperature 19;set WZ desiredTemperature 20;set Esszimmer_structure desiredTemperature 18.5;set Schlafzimmer_structure desiredTemperature 18;set Zimmer_Oben_structure desiredTemperature 18.5) DOELSEIF ([Aussen:temperature] < 12 and [structure_Bewohner] eq "absent") (set Bad desiredTemperature 16;set FL desiredTemperature 16;set KU desiredTemperature 16;set WCU desiredTemperature 16;set ZU desiredTemperature 16;set WZ desiredTemperature 16;set Esszimmer_structure desiredTemperature 16;set Schlafzimmer_structure desiredTemperature 16;set Zimmer_Oben_structure desiredTemperature 16) DOELSEIF ([Aussen:temperature] > 12) (set Bad desiredTemperature 4.5;set FL desiredTemperature 4.5;set KU desiredTemperature 4.5;set WCO desiredTemperature 4.5;set WCU desiredTemperature 4.5;set ZU desiredTemperature 4.5;set WZ desiredTemperature 4.5;set Esszimmer_structure desiredTemperature 4.5;set Schlafzimmer_structure desiredTemperature 4.5;set Zimmer_Oben_structure desiredTemperature 4.5) DOELSE
wenn alle den selben Befehl bekommen mit kommastructure_Bewohner:absent.* set HUEGroup0,BOSE_D05FB8AAE204,BOSE_50722498B361,BOSE_50722498905A,GHoma_d35994,ESPEasy_Sonoff7_PUMP,
ESPEasy_Sonoff4_PUMP,ESPEasy_Sonoff5_PUMP,ESPEasy_Sonoff12_PUMP,ESPEasy_Sonoff2_PUMP off
ich weiß nicht warum aber es ist so.
Das Problem tritt aktuell wieder / immer noch auf.
Um helfen zu koennen muss das Problem eingegrenzt werden:
- gibt es Probleme, wen man die Befehle _ohne_ DOIF ausfuehrt: wenn nein, bitte an DOIF wenden, sonst bitte alle weiteren Experimente ohne DOIF
- gibt es Probleme, wenn man einen der Strukturen alleine ausfuehrt? Wenn nein: welche Strukturen braucht man?
- sind im FHEM-Log im Problemfall alle set Befehle aufgefuehrt? Wenn nein: bitte ein "attr global verbose 5" Log des Schaltens zeigen.
- Sonst ist das vmtl. ein Funkproblem, evtl. hilft async_delay in den Strukturen, bzw ein FHEM-sleep zwischen set der unterschiedlichen Strukturen.
Ist das Trennzeichen für mehrere Befehle in einem DOIF-Zweig nicht das Komma?
So wie ich das sehe verwendest du ein Semikolon.
Zitat von: rudolfkoenig am 16 April 2020, 09:47:26
Um helfen zu koennen muss das Problem eingegrenzt werden:
- gibt es Probleme, wen man die Befehle _ohne_ DOIF ausfuehrt: wenn nein, bitte an DOIF wenden, sonst bitte alle weiteren Experimente ohne DOIF
- gibt es Probleme, wenn man einen der Strukturen alleine ausfuehrt? Wenn nein: welche Strukturen braucht man?
- sind im FHEM-Log im Problemfall alle set Befehle aufgefuehrt? Wenn nein: bitte ein "attr global verbose 5" Log des Schaltens zeigen.
- Sonst ist das vmtl. ein Funkproblem, evtl. hilft async_delay in den Strukturen, bzw ein FHEM-sleep zwischen set der unterschiedlichen Strukturen.
Hey, danke für deine Antwort!
Ja, ohne DOIF gibts den Fehler auch.
Das mit dem Verbose 5 werde ich mal testen! Danke für den Tipp.
Funkproblem ist es leider definitiv nicht. Ich kann in der Structure die Reihenfolge der Geräte ändern, dann schaltet in dieser Konstellation genau ein anderes nicht. :/
ZitatFunkproblem ist es leider definitiv nicht. Ich kann in der Structure die Reihenfolge der Geräte ändern, dann schaltet in dieser Konstellation genau ein anderes nicht. :/
Klingt nach Funkproblem fuer mich :), und wuerde mit async_delay anfangen.
Mach mal mehrere doif mit den einzelnen paaren die zusammen funktionieren.
Gesendet mit Tapatalk
Zitat von: rudolfkoenig am 05 Mai 2020, 16:24:51
Klingt nach Funkproblem fuer mich :), und wuerde mit async_delay anfangen.
Sorry, aber ist definitiv kein Funkproblem. Vielleicht hab ich es komisch erklärt:
Ich kann das Device 30x individuell schalten, alles gut. In genau dieser Konstellation der Structures funktioniert es dann 10/10 mal NICHT (100% Fehlerquote). Tausche ich im Structure dieses Device in der Reihenfolge mit einem anderen (was ich 30x ohne Probleme schalten kann und auch auf ZigBee basiert, also viel weniger störungsanfällig ist) funktioniert das andere in dieser Structure-Konstellation nicht und das erste dann schon - wieder beides in 10/10 Fällen. Also definitiv ein Softwarebug irgendwo! :)
Das mit den mehreren DOIFs ginge zwar, klingt aber schon wieder nach einem Workaround um den eigentlich Bug, oder?
Wenn man per Funk schaltet, dann werden fuer ein Schaltvorgang fuer mehrere ms lang Funksignale gesendet, bei FS20 z.Bsp. 210ms lang. Dies ist fuer Menschen kurz, fuer Computer eine Ewigkeit. Wenn man mehrere Geraete vom Programm schalten will, dann muss man das Ende von einem Schaltvorgang abwarten, bevor man mit dem naechsten anfaengt, sonst ueberlappen sich die Signale.
FHEM implementiert fuer bestimmte Protokolle diese Serialisierung (z.Bsp. ZWave, oder CUL-basierte Protokolle), aber nicht ueber unterschiedliche Protokolle hinweg, und manchmal auch nicht, wenn man mehr als einen Transceiver (vulgo USB-Stick) fuer das gleiche Protokoll verwendet. Zu ZigBee kann ich nichts sagen.
structure bietet mit async_delay die Moeglichkeit, die Ueberlappung der Signale zu vermeiden.
Bei mehreren unterschiedlichen structures muss man zusaetzlich dafuer sorgen, dass zwischen den Struktur-Aktionen eine passende Pause eingelegt wird, entweder mit (FHEM) sleep, oder mit einem ubergeordneten Struktur, und einen entsprechend groess gewaehlten async_delay.
Btw. die Theorie ist einfach im FHEM-Log zu pruefen: beim jedem Schalten sollte (bei der Voreinstellung verbose 3), eine Zeile im Log erscheinen. Wenn das nicht der Fall ist, dann sollte man verbose erhoehen, und das Log analysieren.
Das erklärt nach wie vor nicht, dass es z.B. auch passiert, wenn ich an die Position im Struct des 433MHz Geräts dann das ZigBee Gerät schiebe.
Glaub mir - so unkomfortabel das sein mag - ich habe genug getestet: es ist KEIN Funkproblem, sondern ein Software-Bug. :D
Aber ja, das mit dem Log auf 5 werde ich sobald ich dazu komme auswerten.
Ersetze doch bitte im Befehlsteil die Semikolons durch Kommas, so wie in der DOIF-CommandRef vorgeschrieben.
Vielleicht mag DOIF einfach keine Semikolons.