Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. Internet-Speedtest als Adapterersatz via NodeRed

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Internet-Speedtest als Adapterersatz via NodeRed

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

      Da ich keinen vernünftigen Adapter im stable gefunden habe und ich ja auch bereits in einem eigenen Thread gezeigt habe, wie einfach es mit NodeRed in der jetzigen Version ist, externe NodeJS Module zu nutzen, habe ich einen super simplen Flow erstellt, der einen Speedtest durchführt und alles in Datenpunkte schreibt. (Also als Adapterersatz quasi quick & dirty)

      Da die Node in NodeRed auch schon in die Jahre gekommen ist, habe ich es über die automatische Installation einfach gehabt.

      Ich habe aber bewußt nichts konfiguriert, man muss also mit dem Ergebnis so leben, wie es ist. 😉 Das Tool bzw. die Bibliothek mit der der Speedtest arbeitet ist diese: https://github.com/ddsol/speedtest.net#readme

      Hier mal das Ergebnis - etwaige Umrechnungen müsst ihr selbst vornehmen:

      10740c03-1f22-4516-9384-72a54881e793-image.png

      Der Flow ist super simple und nutzt natürlich meinen Subflow zur automatischen Erstellung von Datenpunkten aus komplexen Datenstrukturen:

      357106df-6aca-46c6-86d3-276d7d00eab6-image.png

      Wenn ihr den Flow importiert müsst ihr ein paar Minuten warten, bis NodeRed im Hintergrund die Bibliothek installiert hat.

      Wer ungeduldig ist bekommt den Fehler: Node ist nicht vorhanden. Also so ca. 5 Minuten warten bevor ihr den Flow triggert.
      66c14325-7d60-4257-9405-08253828f154-image.png

      Und natürlich wieder die Erstellung von Fremdobjekten im NodeRed Adapter zulassen:

      [
          {
              "id": "6e802f1553b18149",
              "type": "subflow",
              "name": "JSON or Obj to IOBroker",
              "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs `msg.top` property isn't defined, the top-value of the node (environment variable top) is used. \n\n**Attention:**\nIf msg.top and top is empty, all msg.topics (msg.topic) will be directly prefixed with 0_userdata.0. . \n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls msg.top nicht definiert wurde, wird der top-Wert (Umgebungsvariable top) der Node verwendet. <br>\n\n**Achtung:**\nWenn top und msg.top leer ist, werden alle msg.topics (msg.topic) direkt unter dem Präfix 0_userdata.0., angelegt bzw. ausgegeben. ",
              "category": "",
              "in": [
                  {
                      "x": 60,
                      "y": 160,
                      "wires": [
                          {
                              "id": "e023fe88445ce43e"
                          }
                      ]
                  }
              ],
              "out": [
                  {
                      "x": 2120,
                      "y": 280,
                      "wires": [
                          {
                              "id": "f5d52c6a57d08904",
                              "port": 0
                          },
                          {
                              "id": "74c895ce724750de",
                              "port": 0
                          }
                      ]
                  }
              ],
              "env": [
                  {
                      "name": "top",
                      "type": "str",
                      "value": "objRoot"
                  }
              ],
              "meta": {},
              "color": "#E2D96E",
              "icon": "node-red/batch.svg"
          },
          {
              "id": "3e11e8338f694832",
              "type": "split",
              "z": "6e802f1553b18149",
              "name": "split object",
              "splt": "\\n",
              "spltType": "str",
              "arraySplt": 1,
              "arraySpltType": "len",
              "stream": false,
              "addname": "key",
              "x": 1170,
              "y": 160,
              "wires": [
                  [
                      "0562a4249c8b856b"
                  ]
              ]
          },
          {
              "id": "0562a4249c8b856b",
              "type": "change",
              "z": "6e802f1553b18149",
              "name": "add key to topic",
              "rules": [
                  {
                      "t": "set",
                      "p": "stateName",
                      "pt": "msg",
                      "to": "key",
                      "tot": "msg"
                  },
                  {
                      "t": "set",
                      "p": "topic",
                      "pt": "msg",
                      "to": "topic  & '.' & key",
                      "tot": "jsonata"
                  },
                  {
                      "t": "change",
                      "p": "topic",
                      "pt": "msg",
                      "from": " ",
                      "fromt": "str",
                      "to": "_",
                      "tot": "str"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 1360,
              "y": 160,
              "wires": [
                  [
                      "ddc90985bef0fafa"
                  ]
              ]
          },
          {
              "id": "ddc90985bef0fafa",
              "type": "switch",
              "z": "6e802f1553b18149",
              "name": "is type?",
              "property": "payload",
              "propertyType": "msg",
              "rules": [
                  {
                      "t": "istype",
                      "v": "array",
                      "vt": "array"
                  },
                  {
                      "t": "istype",
                      "v": "object",
                      "vt": "object"
                  },
                  {
                      "t": "else"
                  }
              ],
              "checkall": "true",
              "repair": false,
              "outputs": 3,
              "x": 1540,
              "y": 160,
              "wires": [
                  [
                      "bfce19b206660fbe"
                  ],
                  [
                      "3e11e8338f694832"
                  ],
                  [
                      "1a8c03d866b85b12"
                  ]
              ]
          },
          {
              "id": "bfce19b206660fbe",
              "type": "split",
              "z": "6e802f1553b18149",
              "name": "split array",
              "splt": "\\n",
              "spltType": "str",
              "arraySplt": 1,
              "arraySpltType": "len",
              "stream": false,
              "addname": "",
              "x": 580,
              "y": 280,
              "wires": [
                  [
                      "e89927810c6d75ec"
                  ]
              ]
          },
          {
              "id": "e89927810c6d75ec",
              "type": "change",
              "z": "6e802f1553b18149",
              "name": "add index to topic",
              "rules": [
                  {
                      "t": "set",
                      "p": "topic",
                      "pt": "msg",
                      "to": "topic  & '.' & parts.index",
                      "tot": "jsonata"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 770,
              "y": 280,
              "wires": [
                  [
                      "a4d1a5d04564dc77"
                  ]
              ]
          },
          {
              "id": "f5d52c6a57d08904",
              "type": "change",
              "z": "6e802f1553b18149",
              "name": "finalize msg.topic",
              "rules": [
                  {
                      "t": "set",
                      "p": "top",
                      "pt": "msg",
                      "to": "'0_userdata.0.' & top",
                      "tot": "jsonata"
                  },
                  {
                      "t": "set",
                      "p": "topic",
                      "pt": "msg",
                      "to": "top & topic",
                      "tot": "jsonata"
                  },
                  {
                      "t": "change",
                      "p": "topic",
                      "pt": "msg",
                      "from": "..",
                      "fromt": "str",
                      "to": ".",
                      "tot": "str"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 1970,
              "y": 240,
              "wires": [
                  []
              ]
          },
          {
              "id": "c863dd7d651b2272",
              "type": "switch",
              "z": "6e802f1553b18149",
              "name": "is type?",
              "property": "payload",
              "propertyType": "msg",
              "rules": [
                  {
                      "t": "istype",
                      "v": "json",
                      "vt": "json"
                  },
                  {
                      "t": "istype",
                      "v": "object",
                      "vt": "object"
                  },
                  {
                      "t": "istype",
                      "v": "array",
                      "vt": "array"
                  },
                  {
                      "t": "else"
                  }
              ],
              "checkall": "true",
              "repair": false,
              "outputs": 4,
              "x": 400,
              "y": 160,
              "wires": [
                  [
                      "158930afddd0780b"
                  ],
                  [
                      "3e11e8338f694832"
                  ],
                  [
                      "bfce19b206660fbe"
                  ],
                  [
                      "a4d1a5d04564dc77"
                  ]
              ]
          },
          {
              "id": "158930afddd0780b",
              "type": "json",
              "z": "6e802f1553b18149",
              "name": "",
              "property": "payload",
              "action": "",
              "pretty": false,
              "x": 570,
              "y": 120,
              "wires": [
                  [
                      "3649300b4c233b10"
                  ]
              ]
          },
          {
              "id": "1a8c03d866b85b12",
              "type": "switch",
              "z": "6e802f1553b18149",
              "name": "is msg.top != null",
              "property": "top",
              "propertyType": "msg",
              "rules": [
                  {
                      "t": "nnull"
                  },
                  {
                      "t": "null"
                  }
              ],
              "checkall": "true",
              "repair": false,
              "outputs": 2,
              "x": 1750,
              "y": 280,
              "wires": [
                  [
                      "f5d52c6a57d08904"
                  ],
                  [
                      "74c895ce724750de"
                  ]
              ]
          },
          {
              "id": "e023fe88445ce43e",
              "type": "change",
              "z": "6e802f1553b18149",
              "name": "",
              "rules": [
                  {
                      "t": "delete",
                      "p": "topic",
                      "pt": "msg"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 210,
              "y": 160,
              "wires": [
                  [
                      "c863dd7d651b2272"
                  ]
              ]
          },
          {
              "id": "3649300b4c233b10",
              "type": "switch",
              "z": "6e802f1553b18149",
              "name": "is array?",
              "property": "payload",
              "propertyType": "msg",
              "rules": [
                  {
                      "t": "istype",
                      "v": "array",
                      "vt": "array"
                  },
                  {
                      "t": "else"
                  }
              ],
              "checkall": "true",
              "repair": false,
              "outputs": 2,
              "x": 700,
              "y": 120,
              "wires": [
                  [
                      "bfce19b206660fbe"
                  ],
                  [
                      "3e11e8338f694832"
                  ]
              ]
          },
          {
              "id": "1b8480cd2df7ba3f",
              "type": "comment",
              "z": "6e802f1553b18149",
              "name": "Array",
              "info": "",
              "x": 400,
              "y": 280,
              "wires": []
          },
          {
              "id": "b3541807672be040",
              "type": "comment",
              "z": "6e802f1553b18149",
              "name": "object",
              "info": "",
              "x": 1140,
              "y": 100,
              "wires": []
          },
          {
              "id": "a4d1a5d04564dc77",
              "type": "switch",
              "z": "6e802f1553b18149",
              "name": "is type?",
              "property": "payload",
              "propertyType": "msg",
              "rules": [
                  {
                      "t": "istype",
                      "v": "object",
                      "vt": "object"
                  },
                  {
                      "t": "istype",
                      "v": "array",
                      "vt": "array"
                  },
                  {
                      "t": "else"
                  }
              ],
              "checkall": "true",
              "repair": false,
              "outputs": 3,
              "x": 960,
              "y": 280,
              "wires": [
                  [
                      "3e11e8338f694832"
                  ],
                  [
                      "bfce19b206660fbe"
                  ],
                  [
                      "1a8c03d866b85b12"
                  ]
              ]
          },
          {
              "id": "74c895ce724750de",
              "type": "change",
              "z": "6e802f1553b18149",
              "name": "finalize msg.topic",
              "rules": [
                  {
                      "t": "set",
                      "p": "top",
                      "pt": "msg",
                      "to": "top",
                      "tot": "env"
                  },
                  {
                      "t": "set",
                      "p": "top",
                      "pt": "msg",
                      "to": "'0_userdata.0.' & top",
                      "tot": "jsonata"
                  },
                  {
                      "t": "set",
                      "p": "topic",
                      "pt": "msg",
                      "to": "top & topic",
                      "tot": "jsonata"
                  },
                  {
                      "t": "change",
                      "p": "topic",
                      "pt": "msg",
                      "from": "..",
                      "fromt": "str",
                      "to": ".",
                      "tot": "str"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 1970,
              "y": 320,
              "wires": [
                  []
              ]
          },
          {
              "id": "c9b74b75fb88fae5",
              "type": "comment",
              "z": "2140b385.78fb7c",
              "name": "Speedtest Internet",
              "info": "",
              "x": 190,
              "y": 3600,
              "wires": []
          },
          {
              "id": "ca0931a9b59c5c60",
              "type": "function",
              "z": "2140b385.78fb7c",
              "name": "Speedtest",
              "func": "msg = {};\n\n(async () => {\n  try {\n    await speedTest({acceptLicense: true, acceptGdpr: true}).then(output => {\n    msg.payload = output;\n//    clearTimeout(myTimeout);\n    node.send(msg);\n    node.done();\n    }).catch(err => {\n    // An error has been returned by the Promise.\n    // Do something with it...\n    msg.error = {name: err.name, \n            message:err.message};\n    node.error(\"Error in try\",msg);\n    node.done();\n});\n  } catch (err) {\n    node.error(\"Error in async\",{error: {name: err.name,  message:err.message}});\n  } \n})();\n",
              "outputs": 1,
              "noerr": 0,
              "initialize": "",
              "finalize": "",
              "libs": [
                  {
                      "var": "speedTest",
                      "module": "speedtest-net"
                  }
              ],
              "x": 320,
              "y": 3720,
              "wires": [
                  [
                      "c05dc2ab8d6c3bf2"
                  ]
              ]
          },
          {
              "id": "96b2931dd2362824",
              "type": "inject",
              "z": "2140b385.78fb7c",
              "name": "",
              "props": [
                  {
                      "p": "payload"
                  }
              ],
              "repeat": "",
              "crontab": "",
              "once": false,
              "onceDelay": 0.1,
              "topic": "",
              "payload": "true",
              "payloadType": "bool",
              "x": 170,
              "y": 3720,
              "wires": [
                  [
                      "ca0931a9b59c5c60"
                  ]
              ]
          },
          {
              "id": "c05dc2ab8d6c3bf2",
              "type": "change",
              "z": "2140b385.78fb7c",
              "name": "",
              "rules": [
                  {
                      "t": "set",
                      "p": "payload.timestamp",
                      "pt": "msg",
                      "to": "$moment(payload.timestamp).format('DD.MM.YYYY HH:mm:ss')\t",
                      "tot": "jsonata"
                  }
              ],
              "action": "",
              "property": "",
              "from": "",
              "to": "",
              "reg": false,
              "x": 550,
              "y": 3720,
              "wires": [
                  [
                      "fcf68520386d279a"
                  ]
              ]
          },
          {
              "id": "fcf68520386d279a",
              "type": "subflow:6e802f1553b18149",
              "z": "2140b385.78fb7c",
              "name": "",
              "env": [
                  {
                      "name": "top",
                      "value": "speedTest",
                      "type": "str"
                  }
              ],
              "x": 830,
              "y": 3720,
              "wires": [
                  [
                      "5df05b2321564d35"
                  ]
              ]
          },
          {
              "id": "5df05b2321564d35",
              "type": "ioBroker out",
              "z": "2140b385.78fb7c",
              "name": "",
              "topic": "",
              "ack": "true",
              "autoCreate": "true",
              "stateName": "",
              "role": "",
              "payloadType": "",
              "readonly": "true",
              "stateUnit": "",
              "stateMin": "",
              "stateMax": "",
              "x": 1060,
              "y": 3720,
              "wires": []
          },
          {
              "id": "194a0d9b8bff3a64",
              "type": "catch",
              "z": "2140b385.78fb7c",
              "name": "",
              "scope": [
                  "ca0931a9b59c5c60"
              ],
              "uncaught": false,
              "x": 270,
              "y": 3800,
              "wires": [
                  [
                      "5f88c6f34f800ee0"
                  ]
              ]
          },
          {
              "id": "5f88c6f34f800ee0",
              "type": "debug",
              "z": "2140b385.78fb7c",
              "name": "",
              "active": true,
              "tosidebar": true,
              "console": false,
              "tostatus": false,
              "complete": "true",
              "targetType": "full",
              "statusVal": "",
              "statusType": "auto",
              "x": 430,
              "y": 3800,
              "wires": []
          }
      ]
      

      Achso und wer den ganzen Datenschutzeinstellungen nicht zustimmt, der muss bitte in der Funktion Node die Parameter auf false setzen (Zeile 5):

      {acceptLicense: true, acceptGdpr: true}
      

      Fehler - also bei nicht akzeptieren Datenschutz oder Lizenzbestimmungen werden dann über die Catch Node abgefangen und ausgegeben. Wer quasi aber schon mal zugestimmt hat, dann wird das anscheinend gecacht.

      Achso für alle die nicht so bewandert mit den Möglichkeiten sind:

      1. In der Inject Node kann man ein Wiederholungsintervall definieren, um den Speedtest zyklisch auszuführen.
        6f94c784-e24a-41c9-9dff-5f9e3c98fe64-image.png

      oder man

      1. erstellt einen weiteren Datenpunkt und hängt vorne noch eine iobrokerIN Node dran. Dann kann man über seine VIS oder was auch immer für eine Visualisierung den Speedtest bei Bedarf trigggern.

      Viel Spaß damit. 😁

      Kalle Blomquist 1 Reply Last reply Reply Quote 6
      • mickym
        mickym Most Active last edited by mickym

        So nachdem mir die Werte der Bandbreite etwas suspekt waren, habe ich festgestellt, dass die in BPS (also Bytes pro Sekunde) ausgewiesen sind und nicht in Mbit/s - deshalb habe ich es mit diesen beiden Nodes hier noch korrigiert und auf 2 Nachkommastellen gerundet, wer das einfügen will:

        0d630a74-bee3-4010-871b-6ae28e48d1bf-image.png

        Die Change Node rechnet die BPS nicht nur in MBit/s um, sondern setzt dann auch die Unit im Datenpunkt des iobrokers.

        d38bfc48-cbd5-4623-b2e1-d7d4d6d4522b-image.png

        Da das aber nur einmal gemacht wird, muss man ggf. den Datenpunkt nochmal löschen, da er sonst nicht neu definiert wird.

        [{"id":"7a6713744a29181f","type":"switch","z":"2140b385.78fb7c","name":"","property":"topic","propertyType":"msg","rules":[{"t":"cont","v":"bandwidth","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":1030,"y":3720,"wires":[["145dfd1e0726d8c8"],["5df05b2321564d35"]]},{"id":"145dfd1e0726d8c8","type":"change","z":"2140b385.78fb7c","name":"bandwidth BPS in Mbit/s","rules":[{"t":"set","p":"payload","pt":"msg","to":"$round(payload/125000, 2)\t","tot":"jsonata"},{"t":"set","p":"stateUnit","pt":"msg","to":"Mbit/s","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1230,"y":3700,"wires":[["5df05b2321564d35"]]}]
        

        def53275-667b-4153-8b52-7452667df5ce-image.png

        F B L 3 Replies Last reply Reply Quote 4
        • F
          frankyboy73 @mickym last edited by

          @mickym Hi, nach dem umsteig von Node.js 14 auf Version 16.16.0 und NPM 8.11.0 bekomme ich jetzt Fehlermeldungen. Ich war vorher von Buster auf Bullseye umgestiegen, da lief es aber noch.

          
          
          node-red.0
          2022-07-13 17:26:39.959	error	13 Jul 17:26:39 - [error] [function:Speedtest] Function node failed to load external modules
          
          node-red.0
          2022-07-13 17:26:39.937	error	13 Jul 17:26:39 - [error] [function:Speedtest] Failed to load module : Error: Cannot find module '/opt/iobroker/iobroker-data/node-red/node_modules/lzma-native/binding-v4.0.6-node-v93-linux-arm/lzma_native.node'Require stack:- /opt/iobroker/iobroker-data/node-red/node_modules/lzma-native/index.js- /opt/iobroker/iobroker-data/node-red/node_modules/decompress-tarxz/index.js- /opt/iobroker/iobroker-data/node-red/node_modules/speedtest-net/index.js
          
          mickym 1 Reply Last reply Reply Quote 0
          • mickym
            mickym Most Active @frankyboy73 last edited by mickym

            @frankyboy73 Ja ich weiss. Ich habe das Modul nochmal gelöscht und dann in der neuen nodejs Umgebung nochmals neu installieren lassen und dann war alles wieder gut.

            Also in das Verzeichnis: /opt/iobroker/iobroker-data/node-red wechseln und

            dann mit

            cd  /opt/iobroker/iobroker-data/node-red  
            npm remove speedtest-net
            

            entfernen.

            Anschließend den NodeRed Adapter neu starten, dann sollte sich das Modul in der neuen NodeJS Umgebung neu installieren und funktioniert wieder. Ca. 5 Minuten Zeit geben, bis der Adapter das Modul wieder neu installiert hat - so wie halt auch bei der Erstinstallation.

            F 1 Reply Last reply Reply Quote 1
            • F
              frankyboy73 @mickym last edited by

              @mickym Supi, Danke, funktioniert wieder.

              1 Reply Last reply Reply Quote 0
              • Kalle Blomquist
                Kalle Blomquist @mickym last edited by

                Moin @mickym, habe deinen Flow erfolgreich umgesetzt. Intervall auf 30 Minuten sollte reichen. Läuft super, dafür ein herzliches Danke!
                Frage: Hast du eine Idee, wie man einen Ping Test realisiert. Mir fehlen dazu leider die NodeRed Kenntnisse.
                Gruß Kalle

                mickym 1 Reply Last reply Reply Quote 0
                • mickym
                  mickym Most Active @Kalle Blomquist last edited by mickym

                  @kalle-blomquist dafür gibts eine eigene Node 😉

                  node-red-node-ping - also einfach im Palettenmanager installieren - die funktioniert besser als der iob Adapter - der hatte bei mir immer Namensauflösungsprobleme.

                  4c0e08a0-53e2-4995-9627-cd48d0d73392-image.png

                  https://flows.nodered.org/node/node-red-node-ping

                  Die Ping Node kann man sowohl triggern, um bevor man ein Kommando absetzt sieht ob die Adresse erreichbar ist oder halt zeitgesteuert laufen lassen.

                  Kalle Blomquist 1 Reply Last reply Reply Quote 2
                  • Kalle Blomquist
                    Kalle Blomquist @mickym last edited by Kalle Blomquist

                    @mickym Danke, das war einfach.
                    Habe mich bei der Bewertung verklickt - hoffe das ist kein Problem, Sorry

                    1 Reply Last reply Reply Quote 1
                    • B
                      BA2000 @mickym last edited by BA2000

                      @mickym sorry für wohl blöde Frage. Aber muss ich in deiner Erweiterung "bandwidth BPS in Mbit/s" noch Regeln oder sonstwas eingeben. Habe bisher nichts mit NodeRed gemacht.
                      Gruß BA2000

                      Hat sich erledigt. Habe jetzt verstanden, dass ich den Code im Spoiler in NodeRed importieren muss. Danke.

                      Danke, jetzt klappt es. Werde jetzt gleich mal meine Vis entsprechend umbauen. 🙂

                      1 Reply Last reply Reply Quote 0
                      • L
                        linux150 @mickym last edited by

                        @mickym Vielen Dank, genau das was ich gesucht habe!!

                        LG
                        Martin

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        857
                        Online

                        31.7k
                        Users

                        79.7k
                        Topics

                        1.3m
                        Posts

                        communication monitoring node-red
                        5
                        10
                        1672
                        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