NEWS
Alle Thermostate mit neuem Partymodus updaten
-
Moin!
Ich, Neuling in der Materie, bin auf der Suche nach Hilfe.
Ich versuche folgendes umzusetzte:
Ich möchte per Skript, in meinem Fall in Blockly gebaut (siehe Bild, oder als Code im P.S.), alle meine Heizkörperthermostate per PARTY_MODE_SUBMIT auf eine geplante längere Abwesenheit vorbereiten.
Ich habe KEINE Wandthermostate, sondern "nur" 26 Heizkörperthermostate und eine CCU2 im Einsatz.
Mein Probleme ist nun folgende:
1. Wenn ich das Script anstoße, dann bekomme ich in der CCU einen Haufen Servicemeldungen, das die Kommunikation gestört sein.
2. Die Daten kommen nicht bei den Thermostaten an. (Nervt am meisten)
3. Die CCU weigert sich, auch wenn alle Servicemeldungen wieder weg sind, eine ganze Zeit lang andere Befehle an die Thermostate zu senden. Immer wieder ist die Kommunikation gestört, auch bei einzelnen Befehlen an nur ein Gerät.
Ich hoffe hier kann mir jemand den ein oder anderen Tip geben.
Viele Grüße
DeStulp
P.S.:
! var DELAY, Check_Datum, Temp_Urlaub_Baustelle, Temp_Urlaub_Rest, Pre_fix, Post_fix, TempListe_Urlaub, WERTE_URLAUB_AUS, Timer01, i, Timer02, k;
! DELAY = 10000;
! Check_Datum = false;
! Temp_Urlaub_Baustelle = 8;
! Temp_Urlaub_Rest = 15;
! Pre_fix = ['hm-rpc.0.MEQxxx1761', 'hm-rpc.0.MEQxxx3589', 'hm-rpc.0.MEQxxx3590', 'hm-rpc.0.MEQxxx3592', 'hm-rpc.0.MEQxxx3595', 'hm-rpc.0.MEQxxx3599', 'hm-rpc.0.MEQxxx3616', 'hm-rpc.0.MEQxxx3620', 'hm-rpc.0.MEQxxx3637', 'hm-rpc.0.MEQxxx3643', 'hm-rpc.0.MEQxxx3867', 'hm-rpc.0.MEQxxx3873', 'hm-rpc.0.MEQxxx4312', 'hm-rpc.0.MEQxxx4328', 'hm-rpc.0.MEQxxx4819', 'hm-rpc.0.MEQxxx4826', 'hm-rpc.0.MEQxxx5477', 'hm-rpc.0.MEQxxx5655', 'hm-rpc.0.MEQxxx5728', 'hm-rpc.0.MEQxxx6165', 'hm-rpc.0.MEQxxx6171', 'hm-rpc.0.NEQxxx7006', 'hm-rpc.0.NEQxxx7332', 'hm-rpc.0.NEQxxx7339', 'hm-rpc.0.NEQxxx7920', 'hm-rpc.0.NEQxxx0878'];
! TempListe_Urlaub = [Temp_Urlaub_Baustelle, Temp_Urlaub_Baustelle, Temp_Urlaub_Rest, Temp_Urlaub_Baustelle, Temp_Urlaub_Baustelle, Temp_Urlaub_Rest, Temp_Urlaub_Baustelle, Temp_Urlaub_Rest, Temp_Urlaub_Baustelle, Temp_Urlaub_Baustelle, Temp_Urlaub_Baustelle, Temp_Urlaub_Baustelle, Temp_Urlaub_Baustelle, Temp_Urlaub_Baustelle, Temp_Urlaub_Rest, Temp_Urlaub_Rest, Temp_Urlaub_Rest, Temp_Urlaub_Rest, Temp_Urlaub_Rest, Temp_Urlaub_Baustelle, Temp_Urlaub_Baustelle, Temp_Urlaub_Rest, Temp_Urlaub_Rest, Temp_Urlaub_Rest, Temp_Urlaub_Rest, Temp_Urlaub_Baustelle];
! on({id: "javascript.0.scriptEnabled.common.Skripte.Set_Urlaub"/Set_Urlaub/, val: true}, function (obj) {
! var value = obj.state.val;
! var oldValue = obj.oldState.val;
! if (getDateObject(getState("javascript.0.scriptEnabled.common.Skripte.Urlaub_Start").val).getTime() > (new Date().getTime()) && getDateObject(getState("javascript.0.scriptEnabled.common.Skripte.Urlaub_Start").val).getTime() < getDateObject(getState("javascript.0.scriptEnabled.common.Skripte.Urlaub_Stop").val).getTime()) {
! Check_Datum = true;
! Timer01 = DELAY;
! var i_end = Pre_fix.length;
! var i_inc = 1;
! if (1 > i_end) {
! i_inc = -i_inc;
! }
! for (i = 1; i_inc >= 0 ? i <= i_end : i >= i_end; i += i_inc) {
! setStateDelayed((String(Pre_fix[(i - 1)]) + String('.4.PARTY_MODE_SUBMIT')), ([String(TempListe_Urlaub[(i - 1)]) + String(','),String((function () {var v = getDateObject(getState("javascript.0.scriptEnabled.common.Skripte.Urlaub_Start").val); return v.getHours() * 60 + v.getMinutes();})()) + String(','),String(getDateObject(getState("javascript.0.scriptEnabled.common.Skripte.Urlaub_Start").val).getDate()) + String(','),String((getDateObject(getState("javascript.0.scriptEnabled.common.Skripte.Urlaub_Start").val).getMonth() + 1)) + String(','),String(parseFloat(getDateObject(getState("javascript.0.scriptEnabled.common.Skripte.Urlaub_Start").val).getFullYear()) % 100) + String(','),String((function () {var v = getDateObject(getState("javascript.0.scriptEnabled.common.Skripte.Urlaub_Stop").val); return v.getHours() * 60 + v.getMinutes();})()) + String(','),String(getDateObject(getState("javascript.0.scriptEnabled.common.Skripte.Urlaub_Stop").val).getDate()) + String(','),String((getDateObject(getState("javascript.0.scriptEnabled.common.Skripte.Urlaub_Stop").val).getMonth() + 1)) + String(','),parseFloat(getDateObject(getState("javascript.0.scriptEnabled.common.Skripte.Urlaub_Stop").val).getFullYear()) % 100].join('')), false, parseInt(Timer01, 10), false);
! Timer01 = (typeof Timer01 == 'number' ? Timer01 : 0) + DELAY;
! }
! console.log('URLAUB GESETZT');
! } else {
! setStateDelayed("javascript.0.scriptEnabled.common.Skripte.Set_Urlaub"/Set_Urlaub/, false, 100, false);
! Check_Datum = false;
! console.log('URLAUB NICHT GESETZT -> Datumcheck == falsch');
! }
! });
! // Urlaubsmodus AUS erreicht nihct alle Thermostate???
! // Frage: Müssen alle Werte gesetzt werden, oder reicht "AUTO_MODUS AN"?
! on({id: "javascript.0.scriptEnabled.common.Skripte.Set_Urlaub"/Set_Urlaub/, val: false}, function (obj) {
! var value = obj.state.val;
! var oldValue = obj.oldState.val;
! if (Check_Datum == true) {
! Timer02 = DELAY;
! var k_end = Pre_fix.length;
! var k_inc = 1;
! if (1 > k_end) {
! k_inc = -k_inc;
! }
! for (k = 1; k_inc >= 0 ? k <= k_end : k >= k_end; k += k_inc) {
! setStateDelayed((String(Pre_fix[(k - 1)]) + String('.4.AUTO_MODE')), true, false, parseInt(Timer02, 10), false);
! Timer02 = (typeof Timer02 == 'number' ? Timer02 : 0) + DELAY;
! }
! console.log('ABSCHALTUNG URLAUB AUSGEFÜHRT');
! } else {
! console.log('ABSCHALTUNG URLAUB NICHT AUSGEFÜHRT -> Datum Check == FALSCH');
! }
! }); -
Hallo destulp,
ich kann das nachvollziehen, ich beobachte das gleiche Verhalten, wenn ich den Party-Modus via Skript ansteuern möchte. Mir ist allerdings aufgefallen, dass es nicht durchgehend zu sein scheint. Nach einigen Minuten kann ich kurzfristig wieder Party-Modi-Befehle absetzen - es scheint nicht am Befehl selbst zu liegen.
Bist Du "damals" damit weitergekommen?
-
Ich hatte ein ähnliches Problem. Das liegt am duty cycle. Wenn zu viel Daten übertragen werden, sperrt die CCU die Kommunikation für eine Weile, um den Funkkanal freizuhalten.
-
Hi,
ich beschäftige mich schon eine Zeit lang mit der Steuerung von Thermostaten. (Heizungsscript ist veröffentlicht)
Beim Heizungsscript habe ich immer auf den DC geachtet. Ausschläge gibt es nur, wenn ich mehrfach hintereinander an alle Thermostate sende.
Hochgerechnet au deine 26 Thermostate dürfte es bei z.B. einer Temperaturänderung nicht zu einer Überschreitung des DC kommen. (PartyMode Änderungen sind allerdings bei mir nicht vorgesehen , da das Konzept ein anderes ist)- könnte also mit längerer Sendezeit bei der Änderung des Party-Modus zusammenhängen)
Aus meiner Sicht hast du die folgenden Optionen:
- du fügst Hardware hinzu, die den DC aufteilt.
-
Das sind z.B. Wandthermostate, die dann mehrere Heizungsthermostate steuern müssten. Ich nehme mal nicht an, dass du 26 Räume hast.
-
Du fügst LAN Adapter hinzu (bei nicht IP-Geräten)
- du versuchst software technisch den DC in den Griff zu bekommen
-
du Gruppierst die Geräte mit der CCU (wenn es denn keine alten Thermostate sind) und sprichst dann nur jeweils ein Gerät an. Könnte aber sein, dass da ein Problem auftaucht. Ich hatte das mal mit dem Boost Modus. Der wurde zwar weitergereicht, wenn ich den Boost Modus am WT manuell bediene aber nicht per Software. Kommt auf einen Versuch an.
-
du sendest zeitversetzt über Verzögerungen
vG Looxer