Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Wert aus Modbus lesen und bei änderung größer als…..auf KNX Objekt senden

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Wert aus Modbus lesen und bei änderung größer als…..auf KNX Objekt senden

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 last edited by

      @alexmosel:

      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).

      1 Reply Last reply Reply Quote 0
      • A
        alexmosel last edited by

        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

        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 last edited by

          @alexmosel:

          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 `
          Das sind 14 Zeichen, die angezeigt werden - aber mit Scrollen. Dann bleibt nur probieren mit verschieden langen Texten:

          PV 1200 W (9 Zeichen)

          Dann den gleichen Text mit verschiedener Anzahl Leerzeichen hinten dran.

          Wird irgendwann der Text ohne Scrollen angezeigt ?

          1 Reply Last reply Reply Quote 0
          • A
            alexmosel last edited by

            Hallo, tatsache, immer 14 Zeichen, sonst wird Müll angezeigt…

            Wobei ich mich frage ob die ETS auch leerzeichen hinten anhängt...

            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 last edited by

              @alexmosel:

              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… `
              493_synohr_149.jpg

              1 Reply Last reply Reply Quote 0
              • A
                alexmosel last edited by

                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)

                1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 last edited by

                  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);
                  
                  1 Reply Last reply Reply Quote 0
                  • A
                    alexmosel last edited by

                    ` > 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);
                       }
                    });
                    
                    1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 last edited by

                      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.

                      1 Reply Last reply Reply Quote 0
                      • A
                        alexmosel last edited by

                        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
                          }
                        }
                        
                        1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 last edited by

                          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.

                          1 Reply Last reply Reply Quote 0
                          • A
                            alexmosel last edited by

                            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...

                            1 Reply Last reply Reply Quote 0
                            • paul53
                              paul53 last edited by

                              @alexmosel:

                              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;
                                 }
                              });
                              
                              1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 last edited by

                                @alexmosel:

                                …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.

                                1 Reply Last reply Reply Quote 0
                                • A
                                  alexmosel last edited by

                                  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

                                  1 Reply Last reply Reply Quote 0
                                  • A
                                    alexmosel last edited by

                                    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..?

                                    1 Reply Last reply Reply Quote 0
                                    • paul53
                                      paul53 last edited by

                                      @alexmosel:

                                      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 ?).

                                      1 Reply Last reply Reply Quote 0
                                      • A
                                        alexmosel last edited by

                                        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 ?

                                        1 Reply Last reply Reply Quote 0
                                        • paul53
                                          paul53 last edited by

                                          @alexmosel:

                                          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;
                                             }
                                          });
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • A
                                            alexmosel last edited by

                                            Du bist Super, Vielen Vielen Dank

                                            Mein Held 😄

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            686
                                            Online

                                            31.8k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            61
                                            6931
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo