NEWS
Wert aus Modbus lesen und bei änderung größer als…..auf KNX Objekt senden
-
immer 14 Zeichen, sonst wird Müll angezeigt… `
Dann sollten die Skripte funktionieren.
@alexmosel:Wobei ich mich frage ob die ETS auch leerzeichen hinten anhängt… `
-
hallo, die beiden letzten Scripte senden garnix ans knx…
iobroker zeigt irgendwelcxhe warnungen an.
Log
13:01:12.674 [info] javascript.0 Stop script script.js.Modbus-WR_Werte_an_KNX_senden
13:01:12.682 [info] javascript.0 Start javascript script.js.Modbus-WR_Werte_an_KNX_senden
13:01:12.682 [warn] javascript.0 at script.js.Modbus-WR_Werte_an_KNX_senden:5:15
13:01:12.682 [info] javascript.0 script.js.Modbus-WR_Werte_an_KNX_senden: registered 1 subscription and 0 schedules
13:01:13.819 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:14.941 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:15.089 [info] javascript.0 Stop script script.js.Modbus-WR_Werte_an_KNX_senden
13:01:16.176 [info] javascript.0 Start javascript script.js.Modbus-WR_Werte_an_KNX_senden
13:01:16.177 [warn] javascript.0 at script.js.Modbus-WR_Werte_an_KNX_senden:5:15
13:01:16.177 [info] javascript.0 script.js.Modbus-WR_Werte_an_KNX_senden: registered 1 subscription and 0 schedules
13:01:17.295 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:18.386 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:19.513 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:20.650 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:21.832 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:22.943 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:24.070 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:25.225 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:26.355 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:27.445 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:28.590 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:29.775 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:30.910 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:31.998 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:33.080 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:34.325 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:35.447 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:36.557 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:37.690 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:38.844 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:39.967 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:41.080 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:42.215 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:43.375 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:44.528 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:45.663 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:46.794 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:47.945 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:49.087 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:50.227 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:51.363 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:52.505 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:53.632 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:54.764 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:55.892 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:57.067 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:01:58.237 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
-
Die Warnungen sagen allerdings nichts aus, ausser dass vor setState() (Zeile 16) gewarnt wird. Warnungen verhindern aber die Ausführung nicht.
Bau mal hinter dem setState() ein:
setState(idKNXDP, text); // zusätzlich für Test log(text + '_'); setTimeout(function() { var x = getState(idKNXDP).val; log(x + x.length); }, 300);
-
` > 13:42:48.281 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:42:48.281 [info] javascript.0 script.js.Modbus-WR_Werte_an_KNX_senden: 0231 W _
13:42:48.582 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:20:18)
13:42:48.582 [error] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:21:19)
13:42:49.472 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:42:49.472 [info] javascript.0 script.js.Modbus-WR_Werte_an_KNX_senden: 0252 W _
13:42:49.773 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:20:18)
13:42:49.773 [error] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:21:19)
13:42:50.577 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:42:50.577 [info] javascript.0 script.js.Modbus-WR_Werte_an_KNX_senden: 0230 W _
13:42:50.879 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:20:18)
13:42:50.879 [error] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:21:19)
13:42:51.752 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:42:51.752 [info] javascript.0 script.js.Modbus-WR_Werte_an_KNX_senden: 0228 W _
13:42:52.053 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:20:18)
13:42:52.053 [error] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:21:19)
13:42:52.874 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7)
13:42:52.874 [info] javascript.0 script.js.Modbus-WR_Werte_an_KNX_senden: 0317 W _
13:42:53.175 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:20:18)
13:42:53.175 [error] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:21:19)
13:42:53.954 [warn] javascript.0 at Object. (script.js.Modbus-WR_Werte_an_KNX_senden:16:7) `
sieht jetzt so aus…wird aber immernoch nix geschrieben
Skript sieht aktuell so aus:
const idModbusDP = 'modbus.0.inputRegisters.30865_Netz-Bezug'; const idKNXDP = 'knx.0.Visu_Werte.Synohr.Display_Text'; const delta = 1.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); // zusätzlich für Test log(text + '_'); setTimeout(function() { var x = getState(idKNXDP).val; log(x + x.length); }, 300); } });
-
Erste Feststellung: log(text + '_') zeigt, dass der Text verkürzt wird: Es werden nicht mehr als 1 Leerzeichen hintereinander akzeptiert !
Zweite Feststellung: Bei Zugriff auf den Datenpunkt 'knx.0.Visu_Werte.Synohr.Display_Text' wird gewarnt. Das muss eine Ursache haben. Poste bitte mal die Objekteigenschalten (Reiter "Objekte", Beistift rechts, dann Reiter "raw(nur Experten)" copy & paste) in Code-Tags.
-
Hier einmal von Modbus (Quelle)
{ "common": { "name": "", "type": "number", "role": "value", "unit": "W", "def": 0, "read": true, "write": false }, "native": { "regType": "inputRegs", "type": "int32be", "address": 30865, "len": 2, "offset": 0, "factor": 1 }, "acl": { "object": 1638, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1638 }, "_id": "modbus.0.inputRegisters.30865_Netz-Bezug", "type": "state" }
und vom KNX Objekt (ZIEL)
{ "_id": "knx.0.Zentralbefehle_u_Visu.Visualisierung.Synohr_Text", "type": "state", "common": { "name": "Synohr Text", "type": "string", "role": "text.string", "min": "", "max": "", "read": false, "write": true }, "native": { "dpt": "DPT16.000", "address": "0/7/0", "addressRefId": "P-057F-0_GA-385", "statusGARefId": "", "actGARefId": "" }, "acl": { "object": 1638, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1638 } }
-
Die Ziel-ID stimmt nicht überein ! Ändere im Skript
const idModbusDP = 'modbus.0.inputRegisters.30865_Netz-Bezug'; const idKNXDP = 'knx.0.Zentralbefehle_u_Visu.Visualisierung.Synohr_Text';
und lösche den Testteil wieder (der Datenpunkt ist write-only).
Zur Verkürzung mit mehr als einem Leerzeichen hintereinander: Es wird wohl nicht tatsächlich in Javascript verkürzt, sondern sieht nur im Log so aus, da hier die Darstellung über HTML erfolgt. HTML verkürzt mehrere Leerzeichen hintereinander auf 1 Leerzeichen.
-
Okay, Cool, das läuft wohl Tatsächlich….
Wie kann ich noch was davor schreiben ?
...und leider Scrollt das Display immernoch die ganze Zeit, wenns das nicht tut wäre es perfekt...
-
Wie kann ich noch was davor schreiben ? `
Siehe Aufruf knxText() (nimm besser das Skript mit der Mittelwertbildung).const idModbusDP = 'modbus.0.inputRegisters.30865_Netz-Bezug'; const idKNXDP = 'knx.0.Zentralbefehle_u_Visu.Visualisierung.Synohr_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, 'PV ' + power.toFixed() + ' W'); cnt = 0; sum = 0; } });
-
…und leider Scrollt das Display immernoch die ganze Zeit, wenns das nicht tut wäre es perfekt... `
Das widerspricht der Aussage in der Doku. Bei angehängten Leerzeichen dürfte es nicht scrollen, es sei denn, der Text (ohne die Leerzeichen) ist für das Display schon zu lang. -
Super, habe das andere SCript schon genommen , klappt so, ne Idee wie ich das Scrollen noch los werde ?
Wenn ich in der ETS Direkt Hallo sende, bleibt das ohen Scrollen einfach stehen, bis es nen neuen Wert bekommt…so sollte das auch sein
-
tja….was ich nicht verstehe, ist dass ich mit der ETS kurzen Text senden kann, kein Quark angezeigt wird und es nicht scrollt.
Das problem scheint ja also doch beim Iobroker zu liegen oder am script.
Woher kommt denn der Müll, den er sonst anzeigt..?
-
was ich nicht verstehe, ist dass ich mit der ETS kurzen Text senden kann, kein Quark angezeigt wird und es nicht scrollt. `
ETS ist intern.
@alexmosel:Woher kommt denn der Müll, den er sonst anzeigt..? `
Keine Ahnung. Wie Du per Handeingabe ermittelt hast, müssen mind. 14 Zeichen gesendet werden, damit kein Müll angezeigt wird. Optimal sollte dies schon der KNX-Adapter ergänzen (vielleicht in einer künftigen Version ?). -
hm…ich kann den Datentyp verändern, das Display würde woh auch 16.001 nehmen.
Ich probier mal...
Ein Problem sehe ich allerdigns noch beim Mittelwert...Nachts zeigt er dann immer noch den letzten wert an, der aber nicht mehr stimmt, oder ?
-
Ein Problem sehe ich allerdigns noch beim Mittelwert…Nachts zeigt er dann immer noch den letzten wert an, der aber nicht mehr stimmt, oder ? `
Stimmt, denn wenn der Wert konstant auf 0 bleibt, wird nicht mehr getriggert. Wenn das vermieden werden soll, muss das Skript ergänzt werden.const idModbusDP = 'modbus.0.inputRegisters.30865_Netz-Bezug'; const idKNXDP = 'knx.0.Zentralbefehle_u_Visu.Visualisierung.Synohr_Text'; const werte = 10; // Anzahl der Messwerte für Mittelwertbildung var cnt = 0; // Zähler var sum = 0; // Summe der Messwerte var timer = null; 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(timer) clearTimeout(timer) if(dp.state.val === 0) { timer = setTimeout(function() { sum = 0; cnt = 0; knxText(idKNXDP, 'PV 0 W'); }, 15000); // 15 s } if(cnt >= werte) { var power = sum / cnt; knxText(idKNXDP, 'PV ' + power.toFixed() + ' W'); cnt = 0; sum = 0; } });
-
Du bist Super, Vielen Vielen Dank
Mein Held
-
Hallo nochmal,
habe mit Enertext Kontakt gehabt, die sagen folgendeS:
Das Format hat tatsächlich 14 Zeichen. Auch Leerzeichen werden dargestellt. Um den Text auf weniger als 14 Zeichen zu begrenzen, muss am gewünschten Textende mindestens ein Nullzeichen stehen, also ein Zeichen mit dem Wert "00". Z. B. im Gruppenmonitor der ETS können Sie einen Text an diese Gruppenadresse senden, der aus bis zu 14 Zeichen besteht. Wenn Sie weniger als 14 Zeichen eingeben, füllt die ETS den Rest automatisch mit Nullzeichen auf.
Davon abgesehen würde ich jetzt noch gerne an ein weiteres Objekt übermitteln ob ich Beziehe oder Einspeise.
Beide Werte gibts als Objekt in IO, jedoch ist immer nur eines Positiv.
Das was Positiv ist müsste dann mit dem entsprechenden Test davor an die GA, also z.b. Einspeisung 500 W oder eben Bezug 500 W.
Man könnte ja generell das Mittelwertscript verwenden, es müsste nur differenzieren was gerade ausgegeben wird…
-
Wenn Sie weniger als 14 Zeichen eingeben, füllt die ETS den Rest automatisch mit Nullzeichen auf. `
Dann ändere mal die Funktion knxText()function knxText(id, text) { var txt = text; for(var i = 0; i < 14 - text.length; i++) { txt = txt + String.fromCharCode(0); } setState(id, txt);; }
-
würde ich jetzt noch gerne an ein weiteres Objekt übermitteln ob ich Beziehe oder Einspeise. `
Was ist das für ein Objekt ?
@alexmosel:Beide Werte gibts als Objekt in IO, jedoch ist immer nur eines Positiv. `
Für Bezug und Einspeisung gibt es jeweils einen Datenpunkt, deren Wert negativ werden kann ? -
Es gibt jeweils einen Datenpunkt, allerdings nur Positive Werte oder eben 0
Einer hat somit immer 0