NEWS
Wert aus Modbus lesen und bei änderung größer als…..auf KNX Objekt senden
-
Hallo, ich möchte gerne einen Wert aus Modbus auslesen und bei einer gewissen änderung (damit nicht zuviele teleegramme enstehen) auf den KNX Bus senden.
Das geht bestimmt mit Blockly, aber ich bin dafür zu blöd…
Die Frage gabs bestimmt schonmal, evtl kann doch wer helfen ?
Besten Dank vorab
-
Keiner ne Idee?
Gesendet von meinem SM-G900F mit Tapatalk
-
Keiner ne Idee?
Gesendet von meinem SM-G900F mit Tapatalk `
Ich Benutze beides nicht und kann daher schwer ein Beispiel machen.. Aber im Gründen:
-
blockly Trigger auf Wert Änderung des modbus objects
-
eventuelle logic sowie if Abfrage
-
steuern des objects von knx mit Wert x
~Dutch
PS : wen du mal die objecte postest worum es geht könnte ich oder @rantanplan dir bestimmt mit nem blockly helfen
–-----------------------
Send from mobile device
-
-
Wenn es nicht Blockly sein muss, In Javascript könnte es etwa so aussehen:
const idModbusDP = '...'; const idKNXDP = '...'; const delta = 0.3; // Mindest-Änderung für KNX-Aktualisierung var lastKNX = getState(idKNXDP).val; on(idModbusDP, function(dp) { if(Math.abs(dp.state.val - lastKNX) >= delta) { lastKNX = dp.state.val; setState(idKNXDP, lastKNX); } });
-
…vielen Dank, ich probiere das mit dem Java-Script mal....
Ich dachte halt an Blockly, da ich für Java zu blöd bin und dachte Blockly sei auch für mich ggf. machbar
-
Habe das Script eben mal versucht, auf der KNX Adresse kommt aber anstelle einer Wattzahl meines Wechselrichters nur wirres geschreibsel an….
kann es sein dass das nicht richtig formatiert wird.. ?
In IOBroker wird im Objekt schön die Wattzahl angezeigt...
Komisch
-
Habe das Script eben mal versucht, auf der KNX Adresse kommt aber anstelle einer Wattzahl meines Wechselrichters nur wirres geschreibsel an….
kann es sein dass das nicht richtig formatiert wird.. ?
In IOBroker wird im Objekt schön die Wattzahl angezeigt...
Komisch `
Poste Mal dein Script + Screenshot der objecte
–-----------------------
Send from mobile device
-
Bitte sehr:
const idModbusDP = 'modbus.0.inputRegisters.30865_Netz-Bezug'; const idKNXDP = 'knx.0.Visu_Werte.Synohr.Display_Text'; const delta = 10.0; // Mindest-Änderung für KNX-Aktualisierung var lastKNX = getState(idKNXDP).val; on(idModbusDP, function(dp) { if(Math.abs(dp.state.val - lastKNX) >= delta) { lastKNX = dp.state.val; setState(idKNXDP, lastKNX); } });
-
Screenshot der objecte?
–-----------------------
Send from mobile device
-
Ist der Datenpunkt "knx.0.Visu_Werte.Synohr.Display_Text" vom type "number" mit der unit "W" und enthält den richtigen Wert ?
-
Zeit Dienst Flags Prio Quelladresse Quelle Zieladresse Ziel Rout Typ DPT Info
1433 2017-11-05 11:06:06.676 vom Bus Low 15.15.15 - 0/7/0 Synohr Text 5 Schreiben 16.000 Zeichen (ASCII) 2B 02 F0 DF 00 00 00 00 90 2B E4 14 F7 07 | +ðß
Das ist sowas was ETS ausgibt…auf dem Display wird sinnloses Zeug angezeigt.
Das KNX Objekt gibt ASCII Zeichen aus, beim Modbus Objekt wird der korrekte Wert in IO Broker angezeigt.
Objektscreenshot hatte ich doch gepostet? Oder was sonst noch für einen Screenshot ?
Oh je....
Schönen Sonntag
-
Das KNX Objekt gibt ASCII Zeichen aus `
Dann muss der Wert in eine Zeichenkette gewandelt werden, also der letzte Befehl erweitert werden:setState(idKNXDP, lastKNX.toFixed());
-
…das hat leider nix geändert...es gibt nur Quark aus....
Zeit Dienst Flags Prio Quelladresse Quelle Zieladresse Ziel Rout Typ DPT Info
19 2017-11-05 15:34:57.277 vom Bus Low 15.15.15 - 0/7/0 Synohr Text 5 Schreiben 16.000 Zeichen (ASCII) 39 38 80 B8 FC 15 8C E6 E9 14 9F B8 F6 1F | 98¸üæé¸ö
20 2017-11-05 15:34:58.355 vom Bus Low 15.15.15 - 0/7/0 Synohr Text 5 Schreiben 16.000 Zeichen (ASCII) 31 31 38 61 64 61 70 74 65 72 2E 6B 6E 78 | 118adapter.knx
21 2017-11-05 15:34:59.598 vom Bus Low 15.15.15 - 0/7/0 Synohr Text 5 Schreiben 16.000 Zeichen (ASCII) 35 30 30 39 38 39 31 37 36 33 32 30 34 7D | 5009891763204}
22 2017-11-05 15:35:00.698 vom Bus Low 15.15.15 - 0/7/0 Synohr Text 5 Schreiben 16.000 Zeichen (ASCII) 31 32 33 2E 44 61 74 65 6E 5F 57 65 74 74 | 123.Daten_Wett
23 2017-11-05 15:35:02.999 vom Bus Low 15.15.15 - 0/7/0 Synohr Text 5 Schreiben 16.000 Zeichen (ASCII) 34 37 47 F3 E2 98 62 9F 34 32 5B 22 73 65 | 47Góâb42["se
24 2017-11-05 15:35:04.131 vom Bus Low 15.15.15 - 0/7/0 Synohr Text 5 Schreiben 16.000 Zeichen (ASCII) 31 32 32 22 6C 63 22 3A 31 35 30 39 38 39 | 122"lc":150989
-
Es muss anscheinend ein Text mit 14 Zeichen Länge sein ? Dann klappt es vielleicht so:
const idModbusDP = 'modbus.0.inputRegisters.30865_Netz-Bezug'; const idKNXDP = 'knx.0.Visu_Werte.Synohr.Display_Text'; const delta = 10.0; // Mindest-Änderung für KNX-Aktualisierung var lastKNX = getState(idKNXDP).val; on(idModbusDP, function(dp) { if(Math.abs(dp.state.val - lastKNX) >= delta) { lastKNX = dp.state.val; var unit = ' W '; // 10 Zeichen Länge var text; if(lastKNX >= 1000) text = lastKNX.toFixed() + unit; if(lastKNX < 1000) text = '0' + lastKNX.toFixed() + unit; if(lastKNX < 100) text = '00' + lastKNX.toFixed() + unit; if(lastKNX < 10) text = '000' + lastKNX.toFixed() + unit; setState(idKNXDP, text); } });
-
Ein delta von 10 dürfte die Zahl der KNX-Ausgaben kaum verringern, wie das Log zeigt. Besser wäre eine Mittelwertbildung über mehrere Messwerte.
const idModbusDP = 'modbus.0.inputRegisters.30865_Netz-Bezug'; const idKNXDP = 'knx.0.Visu_Werte.Synohr.Display_Text'; const werte = 10; // Anzahl der Messwerte für Mittelwertbildung var cnt = 0; // Zähler var sum = 0; // Summe der Messwerte function knxText(id, text) { var txt = text; for(var i = 0; i < 14 - text.length; i++) { txt = txt + ' '; } setState(id, txt);; } on(idModbusDP, function(dp) { cnt++; sum = sum + dp.state.val; if(cnt >= werte) { var power = sum / cnt; knxText(idKNXDP, power.toFixed() + ' W'); cnt = 0; sum = 0; } });
-
Hmmmm..
ich weiß es ja auch nicht…jetzt sendet das Script garnix mehr, keines der beiden letzten.
07:05:09.208 [info] javascript.0 script.js.Modbus-WR_Werte_an_KNX_senden: registered 1 subscription and 0 schedules
07:05:09.894 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
07:05:10.987 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
07:05:12.065 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
07:05:13.154 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
07:05:14.233 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
Ich vermute fast mal, dass die Formatierungen falsch sind, es wird ja nicht nur am Display falsch angezeigt sondern steht auch in er ETS (PRogrammiersoftware für KNX Systeme) falsch ausgegeben.
Wenn ich jetzt aber in der ETS den Wert Hallo sende, wird der am Display ohne wenn und aber angezeigt. Das sind ja auch keine 14 Zeichen.
Es muss KNX Datenpunkttyp 16.000 Zeichen sein, denke ich, was an der Gruppenadresse an und für sich auch so hinterlegt ist.
Der Modbus Wert in IObroker wird als Zahl ausgegeben
-
Da ich kein KNX habe, kann ich es auch nicht testen.
@alexmosel:19 2017-11-05 15:34:57.277 vom Bus Low 15.15.15 - 0/7/0 Synohr Text 5 Schreiben 16.000 Zeichen (ASCII) 39 38 80 B8 FC 15 8C E6 E9 14 9F B8 F6 1F | 98¸üæé¸ö `
sieht danach aus, dass 14 Zeichen mit dem Inhalt 98¸üæé¸ö übertragen werden, wobei anscheinend die ersten zwei Zeichen den gewandelten Wert (98) enthalten und der Rest irgendwelchen zufälligen Speicherinhalt.Was wird auf dem Display angezeigt, wenn Du den Text Hallo als Wert in den Datenpunkt "knx.0.Visu_Werte.Synohr.Display_Text" per Hand eingibst ?
-
Hallo,
ich weiß nicht wo ich das eingeben soll ??
Was ich probiert hatte über die ETS was an die GA zu senden und da kommt es ganz normal an…
-
ich weiß nicht wo ich das eingeben soll ?? `
Im Reiter "Objekte" in der Zeile des Datenpunktes "knx.0.Visu_Werte.Synohr.Display_Text" rechts in der Spalte "Werte" (Feld anklicken, Text eingeben und Enter). -
Hllo,
gerade mal versucht, wenn ich schreibe Test, dann wird mist angezeigt..
Wenn ich schreibe Das ist ein Test wird Das ist ein Te angezeigt .
Problem ist nur dass das Display dann schon scrollt, eigentlich will ich eine ein Zeilige anzeige ohne Scrollen
da sollte z.b. stehen PV 500 w und das würde in die 1 Zeile passen.
über die ETS kann ich Hallo senden und das wird korrekt übertragen…komisch