NEWS
[gelöst]Variablen Übergabe aus MODBUS an Homematic
-
Ich rufe das Skript jetzt alle 15min auf: `
Weshalb das ? Eine Aktualisierung des Wertes in der SV genügt immer dann, wenn sich der Wert der Quelle ändert. Das machton(idSrc, idDst); // Aktualisierung bei Wertänderung
Ist eine Übergabe eigentlich auch in beide Richtungen möglich? so in etwa? `
Ja.
@mguenther:mein "hm-rega.0.31807" nimmt den Wert nicht an… `
Das ist die Quelle (idSrc3).
@mguenther:kann das intervall eigentlich auch in einr Schleife ausgeführt werden? Wahrscheinlich muss ich den Variablenname irgendwie zusammensetzen `
Nein, den Variablennamen kann man nicht zusammensetzen. -
Weshalb das ? Eine Aktualisierung des Wertes in der SV genügt immer dann, wenn sich der Wert der Quelle ändert. Das macht
on(idSrc, idDst); // Aktualisierung bei Wertänderung ```` `
Modbus prüft alle 5sek(?) den Status und schreibt den WErt quasi neu. Dieser wird dann auch immer an die CCU übertragen. Ich dachte, ich ruf aber nur alle 15min den Wert auf, um die CCU nicht "vollzuballern"…
Ich übertrage ja auch nicht nur ein Wert, sondern eben mehrere...
-
Modbus prüft alle 5sek(?) den Status und schreibt den WErt quasi neu. `
Es wird sich aber nicht alle 5 s der <u>Wert</u> ändern ? Es wird nur getriggert und an die CCU gesendet, wenn sich der Wert ändert ! -
doch, genau das geschieht. Hätte ich vorher auch nicht gedacht. z.B. springt ein Wert immer um 22.1°. Mal ist er 22.2°, mal 22.1°, dann wieder 22.0° usw. Ich hatte zuerst gesucht, ob ich z.B. die Temperatur nur in 0.5er Schritten mir auswerten lassen kann, habs aber nicht hinbekommen.
hier mal ein Screenshot der Variablen in HM:
teilweise sind es sogar auch 2sec. Die 5 sec waren von mir vorhin geschätzt…
-
gibt es ne Möglichkeit, den Wert auf 0.5° zu runden? Ich kenne von früher noch die Möglichkeit mit Wert verdoppeln (22.2 –> 44.4), runden (44.4 --> 44.0), halbieren (44.0 -> 22.0) oder 21.7 --> 43,4, 43.4 -->43, 43-->21.5
nur, wie setz ich das um?
der Rest klappt übrigens spitze - danke dir....
-
etwas googlen und Grips anstrengen sollte auch noch bei mir helfen:
EDIT:
[…]
const idSrc1 = "modbus.0.holdingRegisters.214_REG_HC_TEMP_IN2"; const idDst1 = "hm-rega.0.31793"; const idSrc2 = "modbus.0.holdingRegisters.213_REG_HC_TEMP_IN1"; const idDst2 = "hm-rega.0.31794"; const idSrc3 = "hm-rega.0.31807"; const idDst3 = "modbus.0.holdingRegisters.100_REG_FAN_SPEED_LEVEL"; var idSrc1_1 = Math.round(getState(idSrc1).val*2)/2; var idSrc2_1 = Math.round(getState(idSrc2).val*2)/2; setState(idDst1, idSrc1_1); // Scriptstart setState(idDst2, idSrc2_1); // Scriptstart setState(idDst3, getState(idSrc3).val); // Scriptstart on(idSrc1_1, idDst1); // Aktualisierung bei Wertänderung on(idSrc2_1, idDst2); // Aktualisierung bei Wertänderung on(idSrc3, idDst3); // Aktualisierung bei Wertänderung
so müsste es funktioneren
danke paul
-
-
gibt es ne Möglichkeit, den Wert auf 0.5° zu runden? `
val1 = Math.round(2 * val1) / 2; ```` `
habe in dem Post über dir "meine" Lsg abgeändert. Danke an dich!! Spitzenforum hier…
-
dachte, so müsste es funktioneren `
Leider nicht so richtig.const idSrc1 = "modbus.0.holdingRegisters.214_REG_HC_TEMP_IN2"; const idDst1 = "hm-rega.0.31793"; const idSrc2 = "modbus.0.holdingRegisters.213_REG_HC_TEMP_IN1"; const idDst2 = "hm-rega.0.31794"; const idSrc3 = "hm-rega.0.31807"; const idDst3 = "modbus.0.holdingRegisters.100_REG_FAN_SPEED_LEVEL"; var val1 = Math.round(2 * getState(idSrc1).val) / 2; var val2 = Math.round(2 * getState(idSrc2).val) / 2; setState(idDst1, val1); // Scriptstart setState(idDst2, val2); // Scriptstart setState(idDst3, getState(idSrc3).val); // Scriptstart on(idSrc1, function(dp) { var val = Math.round(2 * dp.state.val) / 2; if(val != val1) { setState(idDst1, val); val1 = val; } }); on(idSrc2, function(dp) { var val = Math.round(2 * dp.state.val) / 2; if(val != val2) { setState(idDst2, val); val2 = val; } }); on(idSrc3, idDst3); // Aktualisierung bei Wertänderung
-
habs gerade gemerkt - Ich probiere es weiter…
EDIT:
funzt... danke!