Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Node.js Script in iobroker integrieren

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.7k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.1k

Node.js Script in iobroker integrieren

Geplant Angeheftet Gesperrt Verschoben JavaScript
40 Beiträge 10 Kommentatoren 7.0k Aufrufe 10 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • pseudorealP Offline
    pseudorealP Offline
    pseudoreal
    schrieb am zuletzt editiert von
    #13

    könntest Du bitte eine Anleitung für "Dummies" erstellen? Was genau muss zu erst installiert werden? Danke

    R 1 Antwort Letzte Antwort
    0
    • pseudorealP pseudoreal

      könntest Du bitte eine Anleitung für "Dummies" erstellen? Was genau muss zu erst installiert werden? Danke

      R Offline
      R Offline
      rettroo
      schrieb am zuletzt editiert von
      #14

      @pseudoreal
      Hi, kann ich machen sobald ich alles fertig habe. Die Dahua hängt zur Zeit auch noch nicht an der Tür sondern in meinem Büro ;-)

      pseudorealP 1 Antwort Letzte Antwort
      1
      • UncleSamU UncleSam

        @rettroo sagte in Node.js Script in iobroker integrieren:

        Wie gebe ich den richtig an, da er ja nochmal in "Data" verschachtelt ist.

        Einfach mit einem Punkt dazwischen: obj.Data.UserID

        R Offline
        R Offline
        rettroo
        schrieb am zuletzt editiert von
        #15

        Hi @unclesam,

        das Script hat soweit schon ganz gut funktioniert, nun startet es aber nicht mehr und ich bekomme folgenden Fehler.
        Was hat es mit dem MD5 auf sich?

        
        host.debian	2021-03-10 14:02:45.431	info	instance system.adapter.javascript.0 started with pid 2673
        host.debian	2021-03-10 14:02:15.418	info	Restart adapter system.adapter.javascript.0 because enabled
        host.debian	2021-03-10 14:02:15.418	error	instance system.adapter.javascript.0 terminated with code 1 (JS_CONTROLLER_STOPPED)
        host.debian	2021-03-10 14:02:15.418	error	Caught by controller[0]: at TCP.onStreamRead (internal/stream_base_commons.js:188:23)
        host.debian	2021-03-10 14:02:15.418	error	Caught by controller[0]: at Socket.Readable.push (_stream_readable.js:214:10)
        host.debian	2021-03-10 14:02:15.418	error	Caught by controller[0]: at readableAddChunk (_stream_readable.js:273:9)
        host.debian	2021-03-10 14:02:15.418	error	Caught by controller[0]: at addChunk (_stream_readable.js:298:12)
        host.debian	2021-03-10 14:02:15.418	error	Caught by controller[0]: at Socket.EventEmitter.emit (domain.js:483:12)
        host.debian	2021-03-10 14:02:15.417	error	Caught by controller[0]: at Socket.emit (events.js:314:20)
        host.debian	2021-03-10 14:02:15.417	error	Caught by controller[0]: at DahuaVTO.receive (script.js.DAHUA.Dahua_Script:287:12)
        host.debian	2021-03-10 14:02:15.417	error	Caught by controller[0]: at DahuaVTO.handleFirstLoginPayload (script.js.DAHUA.Dahua_Script:330:27)
        host.debian	2021-03-10 14:02:15.417	error	Caught by controller[0]: at DahuaVTO.genMD5Hash (script.js.DAHUA.Dahua_Script:401:24)
        host.debian	2021-03-10 14:02:15.417	error	Caught by controller[0]: TypeError: md5 is not a function
        mqtt.0	2021-03-10 14:02:15.400	info	(1533) Client [mqttjs_09066ccf] connection closed: closed
        javascript.0	2021-03-10 14:02:15.386	error	(2658) at TCP.onStreamRead (internal/stream_base_commons.js:188:23)
        javascript.0	2021-03-10 14:02:15.385	error	(2658) at Socket.Readable.push (_stream_readable.js:214:10)
        javascript.0	2021-03-10 14:02:15.385	error	(2658) at readableAddChunk (_stream_readable.js:273:9)
        javascript.0	2021-03-10 14:02:15.385	error	(2658) at addChunk (_stream_readable.js:298:12)
        javascript.0	2021-03-10 14:02:15.385	error	(2658) at Socket.EventEmitter.emit (domain.js:483:12)
        javascript.0	2021-03-10 14:02:15.385	error	(2658) at Socket.emit (events.js:314:20)
        javascript.0	2021-03-10 14:02:15.385	error	(2658) at DahuaVTO.receive (script.js.DAHUA.Dahua_Script:286:12)
        javascript.0	2021-03-10 14:02:15.385	error	(2658) at DahuaVTO.handleFirstLoginPayload (script.js.DAHUA.Dahua_Script:329:27)
        javascript.0	2021-03-10 14:02:15.385	error	(2658) at DahuaVTO.genMD5Hash (script.js.DAHUA.Dahua_Script:400:24)
        javascript.0	2021-03-10 14:02:15.385	error	(2658) script.js.DAHUA.Dahua_Script: TypeError: md5 is not a function
        mqtt.0	2021-03-10 14:02:15.356	info	(1533) Client [mqttjs_09066ccf] connected with secret 1615381335356_7933
        javascript.0	2021-03-10 14:02:15.292	info	(2658) script.js.DAHUA.Dahua_Script: registered 0 subscriptions and 0 schedules
        javascript.0	2021-03-10 14:02:15.246	error	(2658) at Script.runInContext (vm.js:130:18)
        javascript.0	2021-03-10 14:02:15.246	error	(2658) at script.js.DAHUA.Dahua_Script:518:3
        javascript.0	2021-03-10 14:02:15.246	error	(2658) at script.js.DAHUA.Dahua_Script:5:13
        javascript.0	2021-03-10 14:02:15.245	error	(2658) at require (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:397:36)
        javascript.0	2021-03-10 14:02:15.245	error	(2658) at require (internal/modules/cjs/helpers.js:74:18)
        javascript.0	2021-03-10 14:02:15.245	error	(2658) at Module.require (internal/modules/cjs/loader.js:903:19)
        javascript.0	2021-03-10 14:02:15.245	error	(2658) script.js.DAHUA.Dahua_Script: Error: Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/lib/../../md5'
        
        UncleSamU 1 Antwort Letzte Antwort
        0
        • R rettroo

          Hi @unclesam,

          das Script hat soweit schon ganz gut funktioniert, nun startet es aber nicht mehr und ich bekomme folgenden Fehler.
          Was hat es mit dem MD5 auf sich?

          
          host.debian	2021-03-10 14:02:45.431	info	instance system.adapter.javascript.0 started with pid 2673
          host.debian	2021-03-10 14:02:15.418	info	Restart adapter system.adapter.javascript.0 because enabled
          host.debian	2021-03-10 14:02:15.418	error	instance system.adapter.javascript.0 terminated with code 1 (JS_CONTROLLER_STOPPED)
          host.debian	2021-03-10 14:02:15.418	error	Caught by controller[0]: at TCP.onStreamRead (internal/stream_base_commons.js:188:23)
          host.debian	2021-03-10 14:02:15.418	error	Caught by controller[0]: at Socket.Readable.push (_stream_readable.js:214:10)
          host.debian	2021-03-10 14:02:15.418	error	Caught by controller[0]: at readableAddChunk (_stream_readable.js:273:9)
          host.debian	2021-03-10 14:02:15.418	error	Caught by controller[0]: at addChunk (_stream_readable.js:298:12)
          host.debian	2021-03-10 14:02:15.418	error	Caught by controller[0]: at Socket.EventEmitter.emit (domain.js:483:12)
          host.debian	2021-03-10 14:02:15.417	error	Caught by controller[0]: at Socket.emit (events.js:314:20)
          host.debian	2021-03-10 14:02:15.417	error	Caught by controller[0]: at DahuaVTO.receive (script.js.DAHUA.Dahua_Script:287:12)
          host.debian	2021-03-10 14:02:15.417	error	Caught by controller[0]: at DahuaVTO.handleFirstLoginPayload (script.js.DAHUA.Dahua_Script:330:27)
          host.debian	2021-03-10 14:02:15.417	error	Caught by controller[0]: at DahuaVTO.genMD5Hash (script.js.DAHUA.Dahua_Script:401:24)
          host.debian	2021-03-10 14:02:15.417	error	Caught by controller[0]: TypeError: md5 is not a function
          mqtt.0	2021-03-10 14:02:15.400	info	(1533) Client [mqttjs_09066ccf] connection closed: closed
          javascript.0	2021-03-10 14:02:15.386	error	(2658) at TCP.onStreamRead (internal/stream_base_commons.js:188:23)
          javascript.0	2021-03-10 14:02:15.385	error	(2658) at Socket.Readable.push (_stream_readable.js:214:10)
          javascript.0	2021-03-10 14:02:15.385	error	(2658) at readableAddChunk (_stream_readable.js:273:9)
          javascript.0	2021-03-10 14:02:15.385	error	(2658) at addChunk (_stream_readable.js:298:12)
          javascript.0	2021-03-10 14:02:15.385	error	(2658) at Socket.EventEmitter.emit (domain.js:483:12)
          javascript.0	2021-03-10 14:02:15.385	error	(2658) at Socket.emit (events.js:314:20)
          javascript.0	2021-03-10 14:02:15.385	error	(2658) at DahuaVTO.receive (script.js.DAHUA.Dahua_Script:286:12)
          javascript.0	2021-03-10 14:02:15.385	error	(2658) at DahuaVTO.handleFirstLoginPayload (script.js.DAHUA.Dahua_Script:329:27)
          javascript.0	2021-03-10 14:02:15.385	error	(2658) at DahuaVTO.genMD5Hash (script.js.DAHUA.Dahua_Script:400:24)
          javascript.0	2021-03-10 14:02:15.385	error	(2658) script.js.DAHUA.Dahua_Script: TypeError: md5 is not a function
          mqtt.0	2021-03-10 14:02:15.356	info	(1533) Client [mqttjs_09066ccf] connected with secret 1615381335356_7933
          javascript.0	2021-03-10 14:02:15.292	info	(2658) script.js.DAHUA.Dahua_Script: registered 0 subscriptions and 0 schedules
          javascript.0	2021-03-10 14:02:15.246	error	(2658) at Script.runInContext (vm.js:130:18)
          javascript.0	2021-03-10 14:02:15.246	error	(2658) at script.js.DAHUA.Dahua_Script:518:3
          javascript.0	2021-03-10 14:02:15.246	error	(2658) at script.js.DAHUA.Dahua_Script:5:13
          javascript.0	2021-03-10 14:02:15.245	error	(2658) at require (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:397:36)
          javascript.0	2021-03-10 14:02:15.245	error	(2658) at require (internal/modules/cjs/helpers.js:74:18)
          javascript.0	2021-03-10 14:02:15.245	error	(2658) at Module.require (internal/modules/cjs/loader.js:903:19)
          javascript.0	2021-03-10 14:02:15.245	error	(2658) script.js.DAHUA.Dahua_Script: Error: Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/lib/../../md5'
          
          UncleSamU Offline
          UncleSamU Offline
          UncleSam
          Developer
          schrieb am zuletzt editiert von
          #16

          @rettroo Hast du das md5 Modul installiert?

          const md5 = require('md5');

          Sollte eigentlich schief gehen, wenn du md5 nicht installiert hast, was ich etwas komisch finde. Hast du das etwa aus dem Skript gelöscht?

          Bitte bei Problemen mit meinen Adaptern, Issue auf GitHub erfassen: Loxone | I2C | Luxtronik2
          ♡-lichen Dank an meine Sponsoren

          1 Antwort Letzte Antwort
          0
          • R rettroo

            @pseudoreal
            Hi, kann ich machen sobald ich alles fertig habe. Die Dahua hängt zur Zeit auch noch nicht an der Tür sondern in meinem Büro ;-)

            pseudorealP Offline
            pseudorealP Offline
            pseudoreal
            schrieb am zuletzt editiert von
            #17

            @rettroo
            also ich habe jetzt den MQTT server installiert. Das Script in Javascript erstellt und alle Instanzen gestartet. Ich bekomme den Fehler:
            (20360) FetchError: request to https://192.168.178.10:443/cgi-bin/magicBox.cgi?action=getSystemInfo failed, reason: unable to verify the first certificate

            Unter Instanzen ist jedoch MQTT gelb und auch im Script sebst sind mir einige Zeilen als Fehler unterstrichen - zB const DigestFetch = require('digest-fetch');
            md5 und digest-fetch sind aber in der JavaScript instanz aktiviert.

            UncleSamU R 2 Antworten Letzte Antwort
            0
            • pseudorealP pseudoreal

              @rettroo
              also ich habe jetzt den MQTT server installiert. Das Script in Javascript erstellt und alle Instanzen gestartet. Ich bekomme den Fehler:
              (20360) FetchError: request to https://192.168.178.10:443/cgi-bin/magicBox.cgi?action=getSystemInfo failed, reason: unable to verify the first certificate

              Unter Instanzen ist jedoch MQTT gelb und auch im Script sebst sind mir einige Zeilen als Fehler unterstrichen - zB const DigestFetch = require('digest-fetch');
              md5 und digest-fetch sind aber in der JavaScript instanz aktiviert.

              UncleSamU Offline
              UncleSamU Offline
              UncleSam
              Developer
              schrieb am zuletzt editiert von
              #18

              @pseudoreal sagte in Node.js Script in iobroker integrieren:

              request to https://192.168.178.10:443/cgi-bin/magicBox.cgi?action=getSystemInfo failed, reason: unable to verify the first certificate

              Da steht ja die Fehlermeldung. Du machst HTTPS und das Zertifikat ist ungültig. Muss es denn HTTPS sein? Wie du die Zertifikatsüberprüfung ausschaltest, kann ich dir leider auch nicht sagen (ich kenne digest-fetch nicht).

              Bitte bei Problemen mit meinen Adaptern, Issue auf GitHub erfassen: Loxone | I2C | Luxtronik2
              ♡-lichen Dank an meine Sponsoren

              1 Antwort Letzte Antwort
              0
              • pseudorealP pseudoreal

                @rettroo
                also ich habe jetzt den MQTT server installiert. Das Script in Javascript erstellt und alle Instanzen gestartet. Ich bekomme den Fehler:
                (20360) FetchError: request to https://192.168.178.10:443/cgi-bin/magicBox.cgi?action=getSystemInfo failed, reason: unable to verify the first certificate

                Unter Instanzen ist jedoch MQTT gelb und auch im Script sebst sind mir einige Zeilen als Fehler unterstrichen - zB const DigestFetch = require('digest-fetch');
                md5 und digest-fetch sind aber in der JavaScript instanz aktiviert.

                R Offline
                R Offline
                rettroo
                schrieb am zuletzt editiert von
                #19

                @pseudoreal

                Hi,

                wie von @UncleSam angemerkt würde ich das "s" mal weglassen also "http://

                MQTT sollte erst grün werden wenn sich das Script mit Dahua verbindet

                pseudorealP 1 Antwort Letzte Antwort
                0
                • R rettroo

                  @pseudoreal

                  Hi,

                  wie von @UncleSam angemerkt würde ich das "s" mal weglassen also "http://

                  MQTT sollte erst grün werden wenn sich das Script mit Dahua verbindet

                  pseudorealP Offline
                  pseudorealP Offline
                  pseudoreal
                  schrieb am zuletzt editiert von
                  #20

                  @rettroo @UncleSam
                  ok, ich habe das https weggelassen uns nun klappt die Verbindung und ich sehe auch im Script log, wenn sich jemand bewegt (VideoEvent) oder jemand klingelt (Invite).

                  Jetzt fehlt mir nur noch die Information wie ich diese in iobroker weiterverarbeite, damit mir zB eine WhatsApp geschickt wird. Habe hier schon gesucht, aber leider nichts gefunden - wahrscheinlich falsche Suchbegriffe. Habt ihr irgendwo ein gutes Tutorial, wie man nun mit den Werten in MQTT weiterarbeitet?

                  UncleSamU 1 Antwort Letzte Antwort
                  0
                  • pseudorealP pseudoreal

                    @rettroo @UncleSam
                    ok, ich habe das https weggelassen uns nun klappt die Verbindung und ich sehe auch im Script log, wenn sich jemand bewegt (VideoEvent) oder jemand klingelt (Invite).

                    Jetzt fehlt mir nur noch die Information wie ich diese in iobroker weiterverarbeite, damit mir zB eine WhatsApp geschickt wird. Habe hier schon gesucht, aber leider nichts gefunden - wahrscheinlich falsche Suchbegriffe. Habt ihr irgendwo ein gutes Tutorial, wie man nun mit den Werten in MQTT weiterarbeitet?

                    UncleSamU Offline
                    UncleSamU Offline
                    UncleSam
                    Developer
                    schrieb am zuletzt editiert von
                    #21

                    @pseudoreal sagte in Node.js Script in iobroker integrieren:

                    Jetzt fehlt mir nur noch die Information wie ich diese in iobroker weiterverarbeite, damit mir zB eine WhatsApp geschickt wird. Habe hier schon gesucht, aber leider nichts gefunden - wahrscheinlich falsche Suchbegriffe. Habt ihr irgendwo ein gutes Tutorial, wie man nun mit den Werten in MQTT weiterarbeitet?

                    @pseudoreal Du füllst Datenpunkte ab und schreibst Skripte, Blocklys oder machst Rules. Das hat dann nichts mehr mit deinem Skript zu tun sondern ist ganz gewöhnliches Skripting in ioBroker.

                    Bitte bei Problemen mit meinen Adaptern, Issue auf GitHub erfassen: Loxone | I2C | Luxtronik2
                    ♡-lichen Dank an meine Sponsoren

                    pseudorealP 1 Antwort Letzte Antwort
                    0
                    • UncleSamU UncleSam

                      @pseudoreal sagte in Node.js Script in iobroker integrieren:

                      Jetzt fehlt mir nur noch die Information wie ich diese in iobroker weiterverarbeite, damit mir zB eine WhatsApp geschickt wird. Habe hier schon gesucht, aber leider nichts gefunden - wahrscheinlich falsche Suchbegriffe. Habt ihr irgendwo ein gutes Tutorial, wie man nun mit den Werten in MQTT weiterarbeitet?

                      @pseudoreal Du füllst Datenpunkte ab und schreibst Skripte, Blocklys oder machst Rules. Das hat dann nichts mehr mit deinem Skript zu tun sondern ist ganz gewöhnliches Skripting in ioBroker.

                      pseudorealP Offline
                      pseudorealP Offline
                      pseudoreal
                      schrieb am zuletzt editiert von
                      #22

                      @unclesam @rettroo
                      Danke - das stimmt. Ich habe das via blockly hinbekommen. Habe aber noch folgendes Problem, wie kann ich aus MQTT einen speziellen String aus dem Wert in den Objekten rauslesen und in Blockly verarbeiten?

                      UncleSamU 1 Antwort Letzte Antwort
                      0
                      • pseudorealP pseudoreal

                        @unclesam @rettroo
                        Danke - das stimmt. Ich habe das via blockly hinbekommen. Habe aber noch folgendes Problem, wie kann ich aus MQTT einen speziellen String aus dem Wert in den Objekten rauslesen und in Blockly verarbeiten?

                        UncleSamU Offline
                        UncleSamU Offline
                        UncleSam
                        Developer
                        schrieb am zuletzt editiert von
                        #23

                        @pseudoreal was meinst du damit? Kannst du mal in einem Screenshot zeigen, was du wo hast und was du daraus haben willst?

                        Bitte bei Problemen mit meinen Adaptern, Issue auf GitHub erfassen: Loxone | I2C | Luxtronik2
                        ♡-lichen Dank an meine Sponsoren

                        pseudorealP 1 Antwort Letzte Antwort
                        0
                        • UncleSamU UncleSam

                          @pseudoreal was meinst du damit? Kannst du mal in einem Screenshot zeigen, was du wo hast und was du daraus haben willst?

                          pseudorealP Offline
                          pseudorealP Offline
                          pseudoreal
                          schrieb am zuletzt editiert von
                          #24

                          @unclesam
                          im Objekt von MQTT habe ich eines der VTO, welches FingerPrintCheck heißt. Das dazugehörige Event hat unter Wert, den folgenden Eintrag:
                          {"Data":{"FingerPrintID":6,"LocaleTime":"2021-05-03 08:17:42","UTC":1620026262},"deviceType":"VTO4202F","serialNumber":"xxxxxxxxxx"}

                          Ich bräuchte nun den Datenpunkt FingerPrintID im Blockly, da ich gerne nur bei nicht erfolgreichen Fingerabdruckscans eine Aktion auslösen möchte. In einem anderen Thread wurde mir diese Seite empfohlen - https://www.machs-smart.de/json-blockly-einlesen-parsen-verarbeiten/
                          Ich schau mir das mal an.

                          Danke

                          UncleSamU oldi-2000O 2 Antworten Letzte Antwort
                          0
                          • pseudorealP pseudoreal

                            @unclesam
                            im Objekt von MQTT habe ich eines der VTO, welches FingerPrintCheck heißt. Das dazugehörige Event hat unter Wert, den folgenden Eintrag:
                            {"Data":{"FingerPrintID":6,"LocaleTime":"2021-05-03 08:17:42","UTC":1620026262},"deviceType":"VTO4202F","serialNumber":"xxxxxxxxxx"}

                            Ich bräuchte nun den Datenpunkt FingerPrintID im Blockly, da ich gerne nur bei nicht erfolgreichen Fingerabdruckscans eine Aktion auslösen möchte. In einem anderen Thread wurde mir diese Seite empfohlen - https://www.machs-smart.de/json-blockly-einlesen-parsen-verarbeiten/
                            Ich schau mir das mal an.

                            Danke

                            UncleSamU Offline
                            UncleSamU Offline
                            UncleSam
                            Developer
                            schrieb am zuletzt editiert von
                            #25

                            @pseudoreal Genau, ich würde einfach in einem Blockly oder JavaScript das JSON parsen und dann in einen Datenpunkt abfüllen. Das sollte recht einfach sein. Mit Blockly kann ich aber leider nicht weiterhelfen, das verwende ich nie.

                            Bitte bei Problemen mit meinen Adaptern, Issue auf GitHub erfassen: Loxone | I2C | Luxtronik2
                            ♡-lichen Dank an meine Sponsoren

                            1 Antwort Letzte Antwort
                            0
                            • pseudorealP pseudoreal

                              @unclesam
                              im Objekt von MQTT habe ich eines der VTO, welches FingerPrintCheck heißt. Das dazugehörige Event hat unter Wert, den folgenden Eintrag:
                              {"Data":{"FingerPrintID":6,"LocaleTime":"2021-05-03 08:17:42","UTC":1620026262},"deviceType":"VTO4202F","serialNumber":"xxxxxxxxxx"}

                              Ich bräuchte nun den Datenpunkt FingerPrintID im Blockly, da ich gerne nur bei nicht erfolgreichen Fingerabdruckscans eine Aktion auslösen möchte. In einem anderen Thread wurde mir diese Seite empfohlen - https://www.machs-smart.de/json-blockly-einlesen-parsen-verarbeiten/
                              Ich schau mir das mal an.

                              Danke

                              oldi-2000O Offline
                              oldi-2000O Offline
                              oldi-2000
                              schrieb am zuletzt editiert von
                              #26

                              @pseudoreal Hallo ich hänge gerade genau an dem Thema Json parsen und hab leider null Ahnung davon ich habe ein Vto 4202 habe das Skript und den mqtt Adapter am laufen und bräuchte jetzt aber normale Datenpunkte z. B. für die einen Gong aber auch wenn möglich für den Türoffner usw. Hast du mir vielleicht ein Skript das funktioniert?

                              F 1 Antwort Letzte Antwort
                              0
                              • oldi-2000O oldi-2000

                                @pseudoreal Hallo ich hänge gerade genau an dem Thema Json parsen und hab leider null Ahnung davon ich habe ein Vto 4202 habe das Skript und den mqtt Adapter am laufen und bräuchte jetzt aber normale Datenpunkte z. B. für die einen Gong aber auch wenn möglich für den Türoffner usw. Hast du mir vielleicht ein Skript das funktioniert?

                                F Offline
                                F Offline
                                fastfoot
                                schrieb am zuletzt editiert von
                                #27

                                @oldi-2000 poste mal so ein json

                                iobroker läuft unter Docker auf QNAP TS-451+
                                SkriptRecovery: https://forum.iobroker.net/post/930558

                                oldi-2000O 1 Antwort Letzte Antwort
                                0
                                • F fastfoot

                                  @oldi-2000 poste mal so ein json

                                  oldi-2000O Offline
                                  oldi-2000O Offline
                                  oldi-2000
                                  schrieb am zuletzt editiert von
                                  #28

                                  @fastfoot

                                  {
                                    "Data": {
                                      "LocaleTime": "2021-11-20 20:12:39",
                                      "State": 9,
                                      "UTC": 1637439159
                                    },
                                    "deviceType": "VTO4202F-P-S2",
                                    "serialNumber": "7H05F88PAJ18009"
                                  }
                                  

                                  Das ist was Mqtt als Datenpunkt raushaut, ich benötige aber möglichst einen Datenpunkt der einfach true bei State = 1 bzw. false bei allen anderen States ist.
                                  Ich hab aber leider null Ahnung vom skripten. :anguished:

                                  F 1 Antwort Letzte Antwort
                                  0
                                  • oldi-2000O oldi-2000

                                    @fastfoot

                                    {
                                      "Data": {
                                        "LocaleTime": "2021-11-20 20:12:39",
                                        "State": 9,
                                        "UTC": 1637439159
                                      },
                                      "deviceType": "VTO4202F-P-S2",
                                      "serialNumber": "7H05F88PAJ18009"
                                    }
                                    

                                    Das ist was Mqtt als Datenpunkt raushaut, ich benötige aber möglichst einen Datenpunkt der einfach true bei State = 1 bzw. false bei allen anderen States ist.
                                    Ich hab aber leider null Ahnung vom skripten. :anguished:

                                    F Offline
                                    F Offline
                                    fastfoot
                                    schrieb am zuletzt editiert von
                                    #29

                                    @oldi-2000 so könnte es aussehen
                                    vto.PNG

                                    iobroker läuft unter Docker auf QNAP TS-451+
                                    SkriptRecovery: https://forum.iobroker.net/post/930558

                                    1 Antwort Letzte Antwort
                                    0
                                    • H Offline
                                      H Offline
                                      h07d0q
                                      schrieb am zuletzt editiert von
                                      #30

                                      @rettroo @fastfoot
                                      Würde jemand von euch eine fertige, funktionierende Lösung hier veröffentlichen?
                                      Dann muss nicht jeder von neu beginnen :)
                                      Ich habe vor das ganze ohne den Schritt über MQTT direkt in Datenpunkte zu schreiben, sonst kann man es sich ja sparen das über iobroker laufen zu lassen.
                                      Am schönsten wäre natürlich ein Adapter, aber davon bin ich weit entfernt :D

                                      I 2 Antworten Letzte Antwort
                                      0
                                      • H h07d0q

                                        @rettroo @fastfoot
                                        Würde jemand von euch eine fertige, funktionierende Lösung hier veröffentlichen?
                                        Dann muss nicht jeder von neu beginnen :)
                                        Ich habe vor das ganze ohne den Schritt über MQTT direkt in Datenpunkte zu schreiben, sonst kann man es sich ja sparen das über iobroker laufen zu lassen.
                                        Am schönsten wäre natürlich ein Adapter, aber davon bin ich weit entfernt :D

                                        I Offline
                                        I Offline
                                        init5
                                        schrieb am zuletzt editiert von
                                        #31

                                        @h07d0q das wäre ideal, wenn dafür jemand einen Adapter erstellen kann. Scheinbar ist die Nachfrage bei dem System nicht sonderlich hoch. Ich versuche gerade das Skript so anzupassen, dass es bei mir läuft. Sollte ich es hinbekommen, werde ich es dir zur Verfügung stellen.

                                        1 Antwort Letzte Antwort
                                        0
                                        • H h07d0q

                                          @rettroo @fastfoot
                                          Würde jemand von euch eine fertige, funktionierende Lösung hier veröffentlichen?
                                          Dann muss nicht jeder von neu beginnen :)
                                          Ich habe vor das ganze ohne den Schritt über MQTT direkt in Datenpunkte zu schreiben, sonst kann man es sich ja sparen das über iobroker laufen zu lassen.
                                          Am schönsten wäre natürlich ein Adapter, aber davon bin ich weit entfernt :D

                                          I Offline
                                          I Offline
                                          init5
                                          schrieb am zuletzt editiert von init5
                                          #32

                                          @h07d0q So, ich habe nun ein funktionierendes Skript am Laufen. Geklaut habe ich es von hier. Wäre schön wenn jemand einen Adapter daraus bauen kann.

                                          const DigestFetch = require('digest-fetch');
                                          const net = require('net');
                                          const fs = require('fs');
                                          const path = require('path');
                                          const md5 = require('md5');
                                          const mqtt = require('mqtt');
                                          
                                          class DahuaVTO {
                                            deviceType;
                                            serialNumber;
                                          
                                            requestId = 0;
                                          
                                            sessionId = 0;
                                          
                                            keepAliveInterval = 60;
                                          
                                            _keepAliveTimer;
                                          
                                            doorbellSocket;
                                          
                                            mqttClient;
                                          
                                            constructor() {
                                              this.dahua_host = "192.168.xxx.xxx";
                                              this.dahua_username = "VTOusername";
                                              this.dahua_password = "VTOpassword";
                                              this.mqtt_broker_host = "192.168.xxx.xxx";
                                              this.mqtt_broker_port = "1883";
                                              this.mqtt_broker_username = "mqttUsername";
                                              this.mqtt_broker_password = "mqttPassword";
                                              this.mqtt_broker_topic_prefix = "DahuaVTO";
                                              this.digestClient =  new DigestFetch(
                                                this.dahua_username,
                                                this.dahua_password
                                              );
                                          
                                              this.getDeviceDetails().then(({ deviceType, serialNumber }) => {
                                                this.deviceType = deviceType;
                                                this.serialNumber = serialNumber;
                                                this.start();
                                              });
                                            }
                                          
                                            start() {
                                              this.setupDoorbellSocket();
                                              this.setupMQTT();
                                              this.initLogin();
                                            }
                                          
                                            async getDeviceDetails() {
                                              return this.digestClient
                                                .fetch(
                                                  `http://${this.dahua_host}/cgi-bin/magicBox.cgi?action=getSystemInfo`
                                                )
                                                .then((r) => r.text())
                                                .then((text) => {
                                                  const deviceDetails = text
                                                    .trim()
                                                    .split('\n')
                                                    .reduce((obj, str) => {
                                                      const [key, val] = str.split('=');
                                                      obj[key] = val.trim();
                                                      return obj;
                                                    }, {});
                                                  return deviceDetails;
                                                });
                                            }
                                          
                                            saveSnapshot(p = '/tmp/') {
                                              let now = new Date();
                                              let dateStr = `${now.getFullYear()}-${
                                                now.getMonth() + 1
                                              }-${now.getDate()}-${now.getHours()}-${now.getMinutes()}-${now.getSeconds()}`;
                                              let destination = path.join(p, `DoorBell_${dateStr}.jpg`);
                                              this.digestClient
                                                .fetch(`http://${this.dahua_host}/cgi-bin/snapshot.cgi`)
                                                .then((r) => {
                                                  return r.buffer();
                                                })
                                                .then((buf) => {
                                                  fs.writeFile(destination, buf, 'binary', function (err) {
                                                    if (err) {
                                                      log('Error saving snapshot to disk', err);
                                                    } else {
                                                      log('Snapshot saved');
                                                    }
                                                  });
                                                });
                                            }
                                          
                                            setupDoorbellSocket() {
                                              let socket = new net.Socket({ readable: true, writable: true });
                                              socket.on('end', function () {
                                                log('Doorbell socket ended');
                                              });
                                              socket.on('close', function () {
                                               log('Doorbell socket closed');
                                                clearInterval(this._keepAliveTimer);
                                              });
                                              socket.on('data', this.receive.bind(this));
                                              socket.on('error', function (e) {
                                                log('Doorbell socket error', e);
                                                this.doorbellSocket.destroy();
                                                this.mqttClient.end(true);
                                                clearInterval(this._keepAliveTimer);
                                                this.start();    });
                                              this.doorbellSocket = socket.connect({ port: 5000, host: this.dahua_host });
                                            }
                                          
                                            setupMQTT() {
                                              this.mqttClient = mqtt.connect({
                                                host: this.mqtt_broker_host,
                                                port: this.mqtt_broker_port,
                                                username: this.mqtt_broker_username,
                                                password: this.mqtt_broker_password,
                                                will: {
                                                  topic: `${this.mqtt_broker_topic_prefix}/lwt`,
                                                  payload: 'connected',
                                                  qos: 1,
                                                },
                                              });
                                              this.mqttClient.on('disconnect', function (packet) {
                                                log('MQTTDisconnect', packet);
                                              });
                                              this.mqttClient.on('message', function (topic, message, packet) {
                                                log('MQTTMessage', { topic, message, packet });
                                              });
                                            }
                                          
                                            publishToMQTT(name, payload) {
                                              let message = JSON.stringify(payload);
                                              this.mqttClient.publish(
                                                `${this.mqtt_broker_topic_prefix}/${name}/Event`,
                                                message
                                              );
                                            }
                                          
                                            send(data) {
                                              let json = JSON.stringify(data);
                                              let buf = Buffer.alloc(32);
                                              let offset = buf.writeUInt32BE(0x20000000);
                                              offset = buf.writeUInt32BE(0x44484950, offset);
                                              offset = buf.writeDoubleBE(0, offset);
                                              offset = buf.writeUInt32LE(json.length, offset);
                                              offset = buf.writeUInt32LE(0, offset);
                                              offset = buf.writeUInt32LE(json.length, offset);
                                              offset = buf.writeUInt32LE(0, offset);
                                              buf = Buffer.concat([buf, Buffer.from(json)]);
                                              this.requestId += 1;
                                              this.doorbellSocket.write(buf);
                                            }
                                          
                                            receive(buf) {
                                              let str = buf.slice(32).toString();
                                              let obj = JSON.parse(str);
                                              if (this.requestId === 1) {
                                                this.handleFirstLoginPayload(obj);
                                              } else if (this.requestId === 2) {
                                                this.handleSecondLoginPayload(obj);
                                              } else if (obj.method === 'client.notifyEventStream') {
                                                this.handleEvents(obj.params.eventList);
                                              } else {
                                                this.handleGenericPayload(obj);
                                              }
                                            }
                                          
                                            initLogin() {
                                              this.send({
                                                id: 10000,
                                                magic: '0x1234',
                                                method: 'global.login',
                                                params: {
                                                  clientType: '',
                                                  ipAddr: '(null)',
                                                  loginType: 'Direct',
                                                  password: '',
                                                  userName: this.dahua_username,
                                                },
                                                session: 0,
                                              });
                                            }
                                          
                                          
                                            handleFirstLoginPayload({ session, params: { random, realm } }) {
                                              this.sessionId = session;
                                              let randomHash = this.genMD5Hash(random, realm);
                                              this.send({
                                                id: 10000, 
                                                magic: '0x1234',
                                                method: 'global.login',
                                                session: this.sessionId,
                                                params: {
                                                  userName: this.dahua_username,
                                                  password: randomHash,
                                                  clientType: '',
                                                  ipAddr: '(null)',
                                                  loginType: 'Direct',
                                                  authorityType: 'Default',
                                                },
                                              });
                                            }
                                          
                                            handleSecondLoginPayload(obj) {
                                              if (obj.result) {
                                                log('Logging to Dahua Doorbell successful');
                                                this.keepAliveInterval = obj.params.keepAliveInterval - 5;
                                                this.attachEventManager();
                                                this.keepConnectionAlive();
                                              } else {
                                                log('Failed to login. Response was: ', obj);
                                              }
                                            }
                                          
                                            handleGenericPayload(obj) {
                                              if (
                                                obj.result === true &&
                                                obj.params &&
                                                Object.hasOwnProperty.call(obj.params, 'timeout')
                                              ) {
                                                log('Publish KeepAlive event');
                                                this.publishToMQTT('keepAlive', {
                                                  deviceType: this.deviceType,
                                                  serialNumber: this.serialNumber,
                                                });
                                              } else {
                                                log(
                                                  'handleGenericPayload# Cannot handle received payload',
                                                  obj
                                                );
                                              }
                                            }
                                          
                                            genMD5Hash(random, realm) {
                                              const base_credentials = `${this.dahua_username}:${realm}:${this.dahua_password}`;
                                              const pwddb_hash = md5(base_credentials).toUpperCase();
                                              const base_pass = `${this.dahua_username}:${random}:${pwddb_hash}`;
                                              return md5(base_pass).toUpperCase();
                                            }
                                          
                                            attachEventManager() {
                                              this.send({
                                                id: this.requestId,
                                                magic: '0x1234',
                                                method: 'eventManager.attach',
                                                params: {
                                                  codes: ['All'],
                                                },
                                                session: this.sessionId,
                                              });
                                            }
                                          
                                            handleEvents(events) {
                                              events.forEach((event) => {
                                                log(`Publish event ${event.Code} to MQTT`);
                                                this.publishToMQTT(event.Code, {
                                                  Action: event.eventAction,
                                                  Data: event.Data,
                                                  deviceType: this.deviceType,
                                                  serialNumber: this.serialNumber,
                                                });
                                              });
                                            }
                                          
                                          
                                            keepConnectionAlive(delay) {
                                              this._keepAliveTimer = setInterval(() => {
                                                let keepAlivePayload = {
                                                  method: 'global.keepAlive',
                                                  magic: '0x1234',
                                                  params: {
                                                    timeout: delay,
                                                    active: true,
                                                  },
                                                  id: this.requestId,
                                                  session: this.sessionId,
                                                };
                                          
                                                this.send(keepAlivePayload);
                                              }, this.keepAliveInterval * 1000);
                                            }
                                          
                                            openDoor() {
                                              return this.digestClient
                                                .fetch(
                                                  `http://${this.dahua_host}/cgi-bin/accessControl.cgi?action=openDoor&channel=1&UserID=101&Type=Remote`
                                                )
                                                .then((r) => {
                                                  if (r.ok) {
                                                    log('Door relay triggered');
                                                  } else {
                                                    log('Error triggering the door relay', e);
                                                  }
                                                })
                                                .catch(e => log('Connection error triggering the door relay'));
                                            }
                                          };
                                          
                                          exports.default = DahuaVTO;
                                          
                                          new DahuaVTO();```
                                          H 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          492

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe