Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Skript für Türöffner löst nicht aus

    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

    Skript für Türöffner löst nicht aus

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

      Hallo,
      nach zwei Jahren versuche ich es nochmal.
      Ich möchte meine Gartentür remote entriegeln.

      Was habe ich?
      Ich habe ein Dahu Doorbell System VTO an der Tür VTH im Haus. Das funktioniert als Stand-Alone perfekt.
      Für meine iobroker-Umgebung habe ich diverse Tabletts an der Wand und eine HABPanel Visualisierung drauf.
      Den Videostream greife ich mir über Motion Eye ab, aber was bisher nicht läuft, ist ein Button, der mir die Gartentür entriegelt.
      Im Browser kann ich per HTTP API die Tür wie folgt manuell entriegeln.

      http://user:password@192.168.178.60/cgi-bin/accessControl.cgi?action=openDoor&UserID=101&Type=Remote&channel=1
      

      Deshalb habe ich einen Datenpunkt erstellt der bei auslösen des Buttons den Wert true setzt und ein JavaSkript für den http request gebastelt (zunächst mit Blockly probiert), das auf den Datenpunkt reagiert:

      on({ id: [].concat(['0_userdata.0.Gartentuer.Trigger-Tueroeffner']), change: 'any' }, async (obj) => {
        let value = obj.state.val;
        let oldValue = obj.oldState.val;
        if ((obj.state ? obj.state.val : "") == true) {
            require("request")('http://user:password@192.168.178.60/cgi-bin/accessControl.cgi?action=openDoor&UserID=101&Type=Remote&channel=1').on("error", (e) => { console.error(e); });
            setStateDelayed('0_userdata.0.Gartentuer.Trigger-Tueroeffner' /* Trigger-Tueroeffner */, false, true, 2000, false);
        }
      });
      

      Leider reagiert der Türöffner überhaupt nicht.
      Was man in den Objekten sehen kann, ist das bei Drücken des Buttons der Datenpunkt auf true wechselt und nach 2 Sekunden wieder auf false geht.

      Iobroker läuft auf einer virtuellen Debian 12 Installation, alle Adapter sind aktuell.
      Architektur x64; Node.js v18.17.1; NPM 9.6.7; Aktive Instanzen 18

      Was übersehe ich?
      Wer kann mir helfen?

      bahnuhr 1 Reply Last reply Reply Quote 0
      • bahnuhr
        bahnuhr Forum Testing Most Active @rudi1976 last edited by

        @rudi1976

        Dein Script sieht äußerst komisch vor.

        Probier es so:

        var request = require ('request');
        on({id: "0_userdata.0.Gartentuer.Trigger-Tueroeffner'", val: true}, function() {  
            request("http://user:password@192.168.178.60/cgi-bin/accessControl.cgi?action=openDoor&UserID=101&Type=Remote&channel=1");        
            setTimeout(function() { setState('0_userdata.0.Gartentuer.Trigger-Tueroeffner', false); } , 2000);
        }); 
        
        R 1 Reply Last reply Reply Quote 0
        • R
          rudi1976 @bahnuhr last edited by

          @bahnuhr Vielen Dank. Ich habe das so umgesetzt.

          Inzwischen glaube ich, dass das Skript funktioniert.
          Wenn man im Browser den http Aufruf macht, gibt es im Return ein "ok". An den Tabletts sind die Popup Fenster geblockt. Dort geht der http Aufrauf dann auch ins leere.

          Unter folgendem Link wird mit Java für MQTT gelauscht. Dort habe ich in der DahuaVTO.js einen relevanten Abschnitt gefunden, soweit ich das überblicke.
          link zu DahuaDoorbell2MQTT
          in dem DahuaDoorbell2MQTT Projekt gibt es folgenden Abschnitt.

          /**
             * Remotely triggers the relay 1 (e.g. to open an electric gate).
             *
             * In my VTO 2202 F this also triggers the voice announcing the the door has been opened.
             */
            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) {
                    console.info('Door relay triggered');
                  } else {
                    console.error('Error triggering the door relay', e);
                  }
                })
                .catch(e => console.error('Connection error triggering the door relay'));
            }
          
          

          Ich komme mit dem Thema digestClient nicht zurecht. Das übersteigt meine Kenntnisse.
          Hier wird aber irgendwie darauf reagiert, dass es ein "ok" als Return gibt.
          Kann man das irgendwie in Iobroker mit dem Skript ergänzend umsetzten?

          Vielen Dank für jegliche Hinweise.

          bahnuhr 1 Reply Last reply Reply Quote 0
          • bahnuhr
            bahnuhr Forum Testing Most Active @rudi1976 last edited by

            @rudi1976

            Ich weiß nicht was du da machst.
            Wenn der http Befehl per Browser geht, dann geht er auch mit request.

            Insofern bin ich jetzt raus.

            Vielleicht kann jemand anders mit deinen Überlegungen etwas anfangen.

            P 1 Reply Last reply Reply Quote 0
            • P
              peterfido @bahnuhr last edited by peterfido

              Wenn im Beispiel fetch() genutzt wird, könnte man das evtl. auch hier nutzen. Oder per execute ein curl oder wget absckicken.

              Die Antwort der API könnte auch hinweisgebend sein.

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

              Support us

              ioBroker
              Community Adapters
              Donate

              603
              Online

              31.8k
              Users

              80.0k
              Topics

              1.3m
              Posts

              3
              5
              195
              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