Wandthermostat leitet BOOST-Befehl nicht weiter

Begonnen von Dennis B., 12 März 2013, 10:07:49

Vorheriges Thema - Nächstes Thema

Dennis B.

Hallo zusammen,

ich hab ein Wandthermostat (WT) mit zwei Heizkörperthermostaten (HT) gekoppelt. Wenn ich beim WT auf die BOOST-Taste drücke, gehen auch die HTs in den BOOST-Modus. Wenn ich jedoch den BOOST-Befehl über FHEM absetze, geht zwar das WT in den BOOST-Modus aber die HTs bleiben bei dem derzeit eingestellten Programm. Woran kann das liegen?

Gruß
Dennis

mickym

Hallo - das Problem habe ich gerade in meinem Thread beschrieben. Die Koordination der Geräte über die groupid übernimmt in der Regel der cube - allerdings passiert das nicht mit FHEM, der "mode" und dazu gehört auch "boost" werden nicht vom WT an die HT weitergegeben, deswegen musst Du die Geräte selber synchronisieren.
Du wirst auch feststellen, dass wenn Du die Temperatur am WT via FHEM änderst, der WT auf manuell springt in der Standardkonfiguration und die HT zwar irgendwann die Temperatur übernehmen, aber noch auf auto bleiben. Deshalb hatte ich ja einen neuen Thread eröffnet, da habe ich das dann mit dummy Switches selbst synchronisiert.

Gruss Mic :)

Matthias Gehre

Es spricht ja nichts dagegen, die groupid in FHEM zu benutzen.

Den setter groupid gibts ja schon.

Man müsste dann noch in Zeile 270 in 10_MAX.pm
return ($hash->{IODev}{Send})->($hash->{IODev},"SetTemperature",$hash->{addr},$payload);
durch
return ($hash->{IODev}{Send})->($hash->{IODev},"SetTemperature",$hash->{addr},$payload, groudId => "01" );
ersetzen, damit die groupId beim Setzen von Temperatur/Boost mitgesendet wird.

Testet das mal mit der richtigen groupId statt 01. Wenn das solche Fehler behebt, kann
ich das "schön" einbauen.

mickym

Hallo - das probiere ich später gerne aus - aber bevor ich mir was zerschiesse, noch eine Frage (Screenshot). In den Attributen steht groupid und nicht groupId.
Ausserdem nur einstellig - ist das egal. Sorry bin da zu unerfahren, um nun in dem Modul nachzuschauen wo die ganzen Definitionen stehen. Soweit ich verstanden habe, sollte diese Änderung dann auch nicht nur bei Boost, sondern auch bei auto etc - also bei allen Temperaturänderungen mitgesendet werden. Eine kurze Bestätigung wäre noch Klasse.

Vielen Dank.

Gruss Mic :)


Dennis B.

also ich habe bei beiden HTs und dem WT den Befehl "set <name> groupid 15" ausgeführt und die Anpassungen mit der ID 15 vorgenommen. Habe die Anpassungen sowohl mit groupid als auch mit groupId ausprobiert (habe natürlich das Modul neu geladen, nachdem ich die Anpassungen vorgenommen habe). In beiden Fällen wurde der boost-Befehl nicht weitergeleitet.

@Mic: Falls du das auch testen könntest, wäre das klasse. Nicht, dass ich nachher irgendwo was falsch gemacht hab.

Matthias Gehre

In der Zeile
return ($hash->{IODev}{Send})->($hash->{IODev},"SetTemperature",$hash->{addr},$payload, groudId => "01" );
muss die groupid als zweistelle Hex-Zahl stehen. Also 15 wäre "0F"

mickym

Also ich habe getestet und es funktioniert bei mir leider auch nicht!  

Mein Wandthermostat hat die groupid 2 - siehe screenshot aus dem vorgehenden Posting. Ich habe das exakt so eingegeben (s. Screeshot) - ich habs auch mit groupid versucht - auch nicht erfolgreich und 2 ist nunmal 2 egal ob HEX oder DEC,

Wenns hilft kann ich so ein verbose 5 log anhängen - habe ich vorher gelöscht und auch alle meine eigenen Routinen zur event Steuerung entfernt - so dass da nichts dazwischen spukt.

Ich habs nur mit boost getestet - und Verhalten ist - der WT zählt die Sekunden runter - und an den HT's tut sich nichts.

Teste gerne weiter - ansonsten @Dennis - wenns dich interessiert - kann ich Dir ja meine Behelfslösung zeigen. ;)

Gruss Mic :)


Matthias Gehre

Also folgendes ist meine vermutete vorgehensweise:
1. Wandthermostat auf groupid 2 setzten
2. Heizkörperthermostat auf groupid 2 setzten
3. SetTemperature mit groupId 02 senden


Mir ist gerade aufgefallen, dass laut meinen früheren Notizen auch flags=0x04 gesetzt werden muss. Also:
return ($hash->{IODev}{Send})->($hash->{IODev},"SetTemperature",$hash->{addr},$payload, groudId => sprintf("%02x",$hash->{groupid}), flags => ( $hash->{groupid} ? "04" : "00) );

Bitte mit verbose 5 überprüfen, ob das gesendete Paket auch richtig aussieht (im Zweifel hier posten)

Dennis B.

die Flag 04 reicht schon aus, damit der Befehl weitergegeben wird. Die groupId muss nicht einmal angegeben werden. Anscheinend bewirkt die Flag, dass auch die assoziierten Geräte auf den Befehl hören, weil die HTs gehen direkt in den Boost Modus. Wenn ich beim WT auf Boost drücke, dauert es ein wenig bis die HTs reagieren. Setze ich den boost-Befehl über FHEM mit Flag 04 ab, springt direkt bei beiden HTs und dem WT der boost-Countdown an.

Danke Matthias! Frag sich nur, was für Auswirkungen die Flag 04 sonst noch hat...

Edit:
$hash->{groupId} evaluiert übrigens zu false (vermutlich ist die variable nicht gesetzt). habe derzeit "return ($hash->{IODev}{Send})->($hash->{IODev},"SetTemperature",$hash->{addr},$payload, flags => "04");" in Zeile 270 stehen und damit funktioniert es.

Matthias Gehre

Dann müsste jemand testen (hab gerade nicht soviel Zeit), damit ich das committen kann.
Varianten:

1. Flag 0x04 wird immer aktiviert. Aber was hat das für Auswirkungen?
2. Flag 0x04 wird abhängig von ??? aktiviert.

Dennis B.

Flag 04 ist broadcast...
Die anderen HTs im Haus reagieren auch auf den gesendeten Befehl und die sind nicht mit dem WT assoziiert.

mickym

Also ich habs nun auch getestet - allerdings nur mit der group - id und habs gleich mit mehreren Befehlen vor lauter Begeisterung getestet und nun geht gar nichts mehr. :D

Also irgendwie wird wie Dennis schon schrieb die group id wird  nicht verwendet - auch wenn ich es wie im Ursprungstext gemacht hab und anscheinend an alle gesendet.

Ich hatte es gleich mit mehreren Befehlen getestet und bin gar nicht auf die Idee gekommen, dass das auch an die anderen Thermostate etc. gesendet wird. Fakt ist - die Sync. ging also auf den ersten Blick, aber alle 5 HT sind nun tot. ;) - da alle diese Befehle empfangen haben.

ich schicke mal das LOG - aber nur der boost Behfehl hat glaube ich mehr als 1000 Logeinträge generiert und ich bin leider nicht so versiert - das ich sagen kann, ob die Pakete OK sind -

Ich hoffe ich kann bald wieder was an die Heizung senden. :D


Gruss Mic

mickym

Nach eine Ergänzung - ich glaube auch nicht, dass das was mit der WT Assoziation zu tun hat - sondern die übernimmt ja der Cube. Im Normalfall kann ich ja auch an den HT was einstellen und der synchronisiert dann sowohl den anderen HT und den WT im gleichen Raum. Alle Geräte in einem Raum - in der MAX Software so definiert haben meines Wissen die gleiche group id und du kannst ja auch die Geräte verschieben und da wird dann einfach die group id des Gerätes ausgetauscht.

Gruss Mic :)

mickym

Auf der Konsole kam übrigens noch die Fehlermeldung:

Argument "2e" isn't numeric in numeric gt (>) at ./FHEM/00_MAXLAN.pm line 659.
Argument "2a" isn't numeric in numeric gt (>) at ./FHEM/00_MAXLAN.pm line 659.

mit diesem Befehl:

return ($hash->{IODev}{Send})->($hash->{IODev},"SetTemperature",$hash->{addr},$payload, groudId => sprintf("%02x",$hash->{groupid}), flags => ( $hash->{groupid} ? "04" : "00") );

Ich weiss nicht, ob das was hilft - aber mehr Infos habe ich nicht.

Jetzt kommt auch der Befehl an, den ich vor einer halben Stunde gesetzt habe - anscheinend beruhigt sich nun wieder alles.

Gruss Mic :)

mickym

Ich hatte übrigens diesen Befehl an den HT und nicht an den WT geschickt, um zu sehen, ob der HT auch den WT synchronisert. Nun der hat nun die ganze Wohnung synchronisiert, aber ich denke irgendwie sind wir schon auf dem richtigen Weg - das Device was angesprochen wurden, soll es halt nur nicht an alle schicken, sondern nur an die Geräte mit der gleichen groupid.

Nun bin ich still. ;)

Gruss Mic :)

Dennis B.

Es funktioniert, wenn man Flag 04 verwendet und die groupId setzt. Habe alle Geräte im Wohnzimmer auf die gleiche ID gesetzt und dann den Befehl mit der groupId und Flag 04 abgesetzt und alle Geräte im Wohnzimmer haben reagiert und die anderen blieben unverändert. Nur bei groupId 00 fühlen sich alle MAX! komponenten im Haus angesprochen.

mickym

Hallo Dennis,

hört sich ja gut an und was habe ich dann bei der Syntax verkehrt eingegeben - ich hatte den Befehl doch direkt via copy & paste + fehlendes Anführungszeichen am Ende eingegeben. Kannst Du die Zeile noch mal posten und wo die groupid genau steht?

Gruss Mic :)

Dennis B.

Habe folgendes in Zeile 270 der 10_MAX.pm stehen: return ($hash->{IODev}{Send})->($hash->{IODev},"SetTemperature",$hash->{addr},$payload, groupId => "07", flags => "04");

Das eingebettete if ( $hash->{groupid} ? "04" : "00") funktioniert nicht, weil $hash->{groupid} zu false evaluiert. Deswegen haben ich den flags-wert und die groupId fest gesetzt.

Bei allen Komponenten hatte ich vorher "set <name> groupid 7" abgesetzt.

Hatte mal testweise auch das HT im Badezimmer auf groupId 7 gesetzt und dann hat das auch immer auf die Befehle mit groupId und Flag 04 gehört. Das HT im Badezimmer war mit keiner Komponente im Wohnzimmer assoziiert. Hatte dann probiert die groupId für das HT im Badezimmer auf 4 zu setzen, aber es hat weiterhin auf die Befehle mit groupId 7 und Flag 04 reagiert. Erst nach einem Reset hat es nicht mehr auf die Befehle reagiert. Fand ich ein wenig komisch...

mickym

Hallo Dennis und Matthias,

Klasse - ja so funktioniert es. Mit diesem Code geht es. Es werden wie standardmässig - alle Geräte nur in dem einen Raum, wie gewünscht super synchronisert.

Die Max- Software weisst ja jedem Gerät sowie so mit jedem Raum eine group- ID zu - deswegen musste ich nicht setzen.
bei mir ist Büro=1, WZ=2, SZ=4 und Bad =3.
Ich habe dann mal mit groupid 2 - einmal den linken HT ein Kommando geschickt und wurde super schnell auf den WT und den rechten HT synchronisiert. Das gleiche mit dem rechten HT im WZ und linker HT und WT synchron. Dann noch WT und die beiden HT's im WZ auch.

Dann schnell group id auf 1 gesetzt und einmal HT angesprochen im Büro und einmal WT im Büro - super schnell synchron.

Fazit: Es muss eigentlich nur generell, wenn groupid >0, diese mit diesem Flag 04 geschickt werden und schon funktioniert es wie es soll. Klasse.

Dann kann ich mir meine Hilfsstrukturen sparen und muss nicht immer abprüfen, wann die Geräte wieder synchron laufen, bevor ein neuer Befehl geschickt wird.
Wenn das implementiert ist, dann ist das in meinen Augen ein grosser Schritt.

Also vielen Dank Euch beiden und eine gute N8. ;)
Gruss Mic.

Matthias Gehre

Ist commited. Ihr müsste die groupid aber nochmal setzen, da die bisher nicht in den READINGS gespeichert wurde.

Dennis B.

Bin heute erst dazu gekommen, die committeten Sachen zu testen. Scheint alles zu funktionieren! Vielen Dank!