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.
    • 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
              • A
                alexmosel last edited by

                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…

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

                  @alexmosel:

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

                    @alexmosel:

                    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 ?

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

                      Es gibt jeweils einen Datenpunkt, allerdings nur Positive Werte oder eben 0

                      Einer hat somit immer 0

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

                        Mit dem Display kann ich erst morgen wieder probieren, da jetzt nurnoch 0 ankommt und somit das Script nix mehr sendet…

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

                          Dann vielleicht so ?

                          const idEinspeis = '...';
                          const idBezug = '...';
                          const idAnz = '...';  // Anzeige-DP
                          
                          function anzeige(dir, val) {
                             setState(idAnz, dir + ': ' + val.toFixed() + ' W');
                          }
                          
                          on({id: idEinspeis, valGt: 0}, function(dp) {
                             anzeige('Einspeisung', dp.state.val)
                          });
                          
                          on({id: idBezug, valGt: 0}, function(dp) {
                             anzeige('Bezug', dp.state.val)
                          });
                          
                          
                          1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 last edited by

                            @alexmosel:

                            Mit dem Display kann ich erst morgen wieder probieren, da jetzt nurnoch 0 ankommt und somit das Script nix mehr sendet… `
                            Zum Testen kannst Du am Skriptende ergänzen

                            knxText(idKNXDP, 'PV 500 W');
                            

                            dann das Skript starten und nach dem Test die Zeile am Ende wieder löschen.

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

                              @paul53:

                              @alexmosel:

                              Mit dem Display kann ich erst morgen wieder probieren, da jetzt nurnoch 0 ankommt und somit das Script nix mehr sendet… `
                              Zum Testen kannst Du am Skriptende ergänzen

                              knxText(idKNXDP, 'PV 500 W');
                              

                              dann das Skript starten und nach dem Test die Zeile am Ende wieder löschen. `

                              Super, jetzt scrollt es nciht mehr…den Rest probiere ich morgen...

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

                                Hallo, das Script gibt leider nichts aus…

                                auch das müsste dann ja entsprechend wie das andere formatiert sein. Habe ohne wirkliche Programmierkenntnisse mal was probiert, brachte aber auch nix...

                                const idEinspeis = 'modbus.0.inputRegisters.30867_Netz-Einspeisung';
                                const idBezug = 'modbus.0.inputRegisters.30865_Netz-Bezug';
                                const idAnz = 'knx.0.Zentralbefehle_u_Visu.Visualisierung.PV_Bezug_oder_Einspeisung';  // Anzeige-DP
                                const werte = 10;  // Anzahl der Messwerte für Mittelwertbildung
                                
                                var cnt = 0;  // Zähler
                                var sum = 0;  // Summe der Messwerte
                                var timer = null;
                                
                                function anzeige(id, text) {
                                    var txt = text;
                                    for(var i = 0; i < 14 - text.length; i++) {
                                        txt = txt + ' ';
                                    }
                                    setState(id, txt);
                                }
                                
                                function anzeige(dir, val) {
                                   setState(idAnz, dir + ': ' + val.toFixed() + ' W');
                                }
                                
                                on({id: idEinspeis, valGt: 0}, function(dp) {
                                   anzeige('Einspeisung', dp.state.val)
                                });
                                
                                on({id: idBezug, valGt: 0}, function(dp) {
                                   anzeige('Bezug', dp.state.val)
                                });
                                
                                1 Reply Last reply Reply Quote 0
                                • A
                                  alexmosel last edited by

                                  …ok habe auch gerade die Fehlermeldung dazu im LOG gesehen..

                                  knx.0 2017-11-10 08:58:58.405 error at module.exports.machina.Fsm.extend.states.sendTunnReq._onEnter (C:\ioBroker\node_modules\iobroker.knx\lib\knx-mod\src\FSM.js:236:14)

                                  knx.0 2017-11-10 08:58:58.405 error at FSM.send (C:\ioBroker\node_modules\iobroker.knx\lib\knx-mod\src\Connection.js:172:28)

                                  knx.0 2017-11-10 08:58:58.405 error at CustomProtocolWriter.(anonymous function) [as KNXNetHeader] (C:\ioBroker\node_modules\iobroker.knx\node_modules\binary-protocol\lib\writer.js:20:18)

                                  knx.0 2017-11-10 08:58:58.405 error at CustomProtocolWriter.KnxProtocol.define.write (C:\ioBroker\node_modules\iobroker.knx\lib\knx-mod\src\KnxProtocol.js:594:35)

                                  knx.0 2017-11-10 08:58:58.405 error at CustomProtocolWriter.(anonymous function) [as CEMI] (C:\ioBroker\node_modules\iobroker.knx\node_modules\binary-protocol\lib\writer.js:20:18)

                                  knx.0 2017-11-10 08:58:58.405 error at CustomProtocolWriter.KnxProtocol.define.write (C:\ioBroker\node_modules\iobroker.knx\lib\knx-mod\src\KnxProtocol.js:501:8)

                                  knx.0 2017-11-10 08:58:58.405 error at CustomProtocolWriter.(anonymous function) [as APDU] (C:\ioBroker\node_modules\iobroker.knx\node_modules\binary-protocol\lib\writer.js:20:18)

                                  knx.0 2017-11-10 08:58:58.405 error at CustomProtocolWriter.KnxProtocol.define.write (C:\ioBroker\node_modules\iobroker.knx\lib\knx-mod\src\KnxProtocol.js:415:14)

                                  knx.0 2017-11-10 08:58:58.405 error at CustomProtocolWriter.ProtocolWriter$raw [as raw] (C:\ioBroker\node_modules\iobroker.knx\node_modules\binary-protocol\lib\writer.js:74:24)

                                  knx.0 2017-11-10 08:58:58.405 error at Function.Buffer.concat (buffer.js:290:9)

                                  knx.0 2017-11-10 08:58:58.405 error TypeError: buf.copy is not a function

                                  knx.0 2017-11-10 08:58:58.405 error message knx.0.Zentralbefehle_u_Visu.Visualisierung.PV_Bezug_oder_Einspeisung [object Object] buf.copy is not a function

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

                                    Die Anzeige soll auf dem KNX-Display erfolgen ? Dann soll sicherlich wieder eine Mittelwertbildung erfolgen.

                                    const idEinspeis = 'modbus.0.inputRegisters.30867_Netz-Einspeisung';
                                    const idBezug = 'modbus.0.inputRegisters.30865_Netz-Bezug';
                                    const idAnz = 'knx.0.Zentralbefehle_u_Visu.Visualisierung.PV_Bezug_oder_Einspeisung';  // Anzeige-DP
                                    const werte = 10;  // Anzahl der Messwerte für Mittelwertbildung
                                    
                                    var cnt = 0;  // Zähler
                                    var sum = 0;  // Summe der Messwerte
                                    
                                    function knxText(text) {
                                        var txt = text;
                                        for(var i = 0; i < 14 - text.length; i++) {
                                            txt = txt + String.fromCharCode(0);
                                        }
                                        setState(idAnz, txt);
                                    }
                                    
                                    function anzeige(dir, val) {
                                        cnt++;
                                        sum = sum + val;
                                        if(cnt >= werte) {
                                            var power = sum / cnt;
                                            knxText(dir + power.toFixed() + ' W');
                                            cnt = 0;
                                            sum = 0;
                                       }
                                    }
                                    
                                    on({id: idEinspeis, valGt: 0}, function(dp) {
                                       if(dp.oldState.val === 0) {
                                          cnt = 0;
                                          sum = 0;
                                       }   
                                       anzeige('Einsp ', dp.state.val)
                                    });
                                    
                                    on({id: idBezug, valGt: 0}, function(dp) {
                                       if(dp.oldState.val === 0) {
                                          cnt = 0;
                                          sum = 0;
                                       }   
                                       anzeige('Bezug ', dp.state.val)
                                    });
                                    

                                    Passt so der Text in die Displayzeile ohne zu scrollen ?

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

                                      Anmerkung: Du hast 2 unterschiedliche Funktionen mit identischem Namen (anzeige()) deklariert !!

                                      Habe es gerade mal getestet: Der Parser meckert (leider) nicht. Es wird die zuletzt deklarierte Funktion aufgerufen.

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

                                        Habe das Script so getestet, es soll der Mittelwert gebildet werden, jedoch kommt am Bus garnix mehr an…

                                        Das Scrollende Display benutze ich im moment nicht dafür, da das Blöd von der Darstellung war, aber ich zeige es auf dem Display eines anderen Tasters an...

                                        Beim Starten des Scriptes stzeht im Log von IObroker und kein Script funktioniert mehr bis zum neustart des adapters

                                        ` > knx.0 2017-11-10 15:47:40.781 error at module.exports.machina.Fsm.extend.states.sendTunnReq._onEnter (C:\ioBroker\node_modules\iobroker.knx\lib\knx-mod\src\FSM.js:236:14)

                                        knx.0 2017-11-10 15:47:40.781 error at FSM.send (C:\ioBroker\node_modules\iobroker.knx\lib\knx-mod\src\Connection.js:172:28)

                                        knx.0 2017-11-10 15:47:40.781 error at CustomProtocolWriter.(anonymous function) [as KNXNetHeader] (C:\ioBroker\node_modules\iobroker.knx\node_modules\binary-protocol\lib\writer.js:20:18)

                                        knx.0 2017-11-10 15:47:40.781 error at CustomProtocolWriter.KnxProtocol.define.write (C:\ioBroker\node_modules\iobroker.knx\lib\knx-mod\src\KnxProtocol.js:594:35)

                                        knx.0 2017-11-10 15:47:40.781 error at CustomProtocolWriter.(anonymous function) [as CEMI] (C:\ioBroker\node_modules\iobroker.knx\node_modules\binary-protocol\lib\writer.js:20:18)

                                        knx.0 2017-11-10 15:47:40.781 error at CustomProtocolWriter.KnxProtocol.define.write (C:\ioBroker\node_modules\iobroker.knx\lib\knx-mod\src\KnxProtocol.js:501:8)

                                        knx.0 2017-11-10 15:47:40.781 error at CustomProtocolWriter.(anonymous function) [as APDU] (C:\ioBroker\node_modules\iobroker.knx\node_modules\binary-protocol\lib\writer.js:20:18)

                                        knx.0 2017-11-10 15:47:40.781 error at CustomProtocolWriter.KnxProtocol.define.write (C:\ioBroker\node_modules\iobroker.knx\lib\knx-mod\src\KnxProtocol.js:415:14)

                                        knx.0 2017-11-10 15:47:40.781 error at CustomProtocolWriter.ProtocolWriter$raw [as raw] (C:\ioBroker\node_modules\iobroker.knx\node_modules\binary-protocol\lib\writer.js:74:24)

                                        knx.0 2017-11-10 15:47:40.781 error at Function.Buffer.concat (buffer.js:290:9)

                                        knx.0 2017-11-10 15:47:40.781 error TypeError: buf.copy is not a function

                                        knx.0 2017-11-10 15:47:40.779 error message knx.0.Zentralbefehle_u_Visu.Visualisierung.PV_Bezug_oder_Einspeisung [object Object] buf.copy is not a function `

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

                                          Das wird wohl am Datenpunkt liegen. Poste bitte die Eigenschaften (raw) des Datenpunktes 'knx.0.Zentralbefehle_u_Visu.Visualisierung.PV_Bezug_oder_Einspeisung'. Um zu sehen, ob das Skript ohne den Datenpunkt funktioniert, ersetze zum Testen in der Funktion knxText()

                                              // setState(idAnz, txt);
                                              log(txt.length + ' ' + txt);
                                          
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • A
                                            alexmosel last edited by

                                            …binmir nicht sicher wo ich das ersetzen soll...

                                            hier das raw

                                            {
                                              "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"
                                            }
                                            
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            739
                                            Online

                                            31.8k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            61
                                            6930
                                            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