Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Ein- und Ausschalten mittels HTML-Req. und Alexa

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    [gelöst] Ein- und Ausschalten mittels HTML-Req. und Alexa

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

      Hallo,

      Ich versuche seit ein paar Tagen mir mit vielen Beiträgen aus dem Forum hier eine Lösung für mein "Problem" zu basteln.

      Ich möchte meinen Denon AVR mittels HTML-Requests ein- und ausschalten inkl. Alexaeinbindung. Das habe ich soweit hingekriegt, mit diesem Codeschnipsel:

        var logOn           = true;     // Skript Logausgabe ein- (true) / ausschalten (false). Fehler werden immer ausgegeben.
        var forecreation    = false;    // Default: false. true: Datenpunkte werden überschrieben (wenn z.B. Bezeichnungen geändert wurden)
        var http = require('http');     // Node Module http verwenden
      
        var options_on = {
        host: '192.168.2.102',
        path: '/goform/formiPhoneAppPower.xml?1+PowerOn',
        method: 'GET'                // in der Regel: "GET"
      };
      
      var pfad                = "test.alexatrigger" + "."; // PFad unter dem in der Javascript-Instanz die Datenpunkte angelegt werden sollen:
      
      // Datenpunktnamen:
      var idAlexaTrigger      = pfad + 'alexa_trigger';
      
      createState(idAlexaTrigger, 0, forecreation, {
           name: 'Trigger für Alexa',
           desc: 'Trigger mit Level für Alexa um einen hhtp request zu erzeugen',
           type: 'number',
           unit: '',
           role: 'value'
      });
      
      // Funktionen:
      function webseiteAbfragen() {
          var req = http.get(options_on, function(res) {
          if(logOn) log('STATUS: ' + res.statusCode);               // Statuscode
          if(logOn) log('HEADERS: ' + JSON.stringify(res.headers)); // Header (Rückmeldung vom Webserver)
      
          // Buffer the body entirely for processing as a whole.
          var bodyChunks  = [];
          var chunkLine   = 0;
          res.on('data', function(chunk) {
              chunkLine = chunkLine + 1;
              if(logOn)  log("Zeilennummer: " + chunkLine+ " ,Inhalt: " +  chunk);
      
              // Hier können die einzelnen Zeilen verarbeitet werden...
              bodyChunks.push(chunk);
      
          }).on('end', function() {
              if(logOn) log("ARRAY mit den einzelnen Zeilen: " + bodyChunks);
              if(logOn) log("ARRAY Länge: " + bodyChunks.length);
      
              var body = Buffer.concat(bodyChunks);
      
              if(logOn) log('BODY: ' + body);
              // ...und/oder das Gesamtergebnis.
      
              });
          });
      
          req.on('error', function(e) { // Fehler abfangen
              log('ERROR: ' + e.message,"warn");
          });
      }
      
      // SUBSCRIPTIONS
      // -----------------------------------------------------------------------------
      
      on({id: "javascript."+instance+"."+idAlexaTrigger ,change:'any'}, function (obj) {
          if(logOn) log("Alexa Trigger wurde geschrieben: " + obj.state.val);
          main();
      });
      

      bzw. der Variable

      var options_off = {
        host: '192.168.2.102',
        path: '/goform/formiPhoneAppPower.xml?1+PowerStandBy',
        method: 'GET'                // in der Regel: "GET"
      };
      

      zum Ausschalten.

      Leider springt das Script "Einschalten" nicht auf aus, wenn ich "Ausschalten" triggere und andersrum. Sprich um erneut "Einzuschalten" muss ich derzeit das Script erst beenden, damit ich es erneut starten kann.

      Hab schon ein wenig rumprobiert (if-else mit Statusauslesen bzw. Variable, die hochzählt bzw. zurückgesetzt wird, anhand derer entschieden werden soll, ob eben ein oder ausgeschaltet wird), aber so richtig geklappt hat nichts.

      Am elegantesten wäre es, dass ich das Script "AVR" nenne und die jeweilge Variable ("options_on" oder "options_off") verwendet wird, ob ich die Script starte oder beende.

      Hat jemand ne Idee, wie man das in Javascript bzw. im ioBroker lösen kann?

      Vielen Dank schon mal vor ab!

      1 Reply Last reply Reply Quote 0
      • M
        Mater1984 last edited by

        Ohne die genaue Funktion im IoBroker zu kennen würde ich eine Variable setzen die „Status“ oder so heißt und bestimmt ob an oder ausgeschaltet ist.

        Am besten natürlich vorher den Status des Denon AVR abfragen ob er grade an oder aus ist.

        http://blue-pc.net/2013/12/28/denon-av- … p-steuern/

        Weiß nicht ob das dein Receiver ist aber hier sind ja verschiedene Abfragewerte beschrieben.

        Und je nach Status entsprechend den Status umsetzen und ggf. Nochmal abfragen ob er auch wirklich den Status gewechselt hat.

        1 Reply Last reply Reply Quote 0
        • W
          Wuaza last edited by

          Hi,

          diese HTML-Befehle sollten alle funktionieren (daher habe ich auch den TurnOn- und TurnOff-Befehl "geklaut"). Hab einen Denon X1200-AVR.

          Der Ansatz mit der Status-Abfrage ist auch sehr interessant - dann würde er je nach dem Zustand des AVR handeln. Danke für diese Idee!

          Vielleicht verstehe ich das Ein- und Ausschalten eines Scripts auch total falsch: Wenn ich Alexa sage "Schalte Script ein" dann sollte ja das Script starten (auf "Grün" wechseln), und bei "Schalte Script aus" auf rot wechseln. Soweit richtig?

          Nur wie schaffe ich es, dass er beim diesem "Statuswechsel" eine jeweils andere Funktion (Turn_On oder Turn_Off) ausführt?

          1 Reply Last reply Reply Quote 0
          • M
            Mater1984 last edited by

            Alexa Anbindung kenne ich mich nicht aus…

            Oder du machst zwei Skripte und zwei Aktionen in Alexa. Also „Alexa receiver an“ startet das an Skript und

            „Alexa receiver aus“ das Aus Skript.

            Das mit der Statusabfrage verhindert besonders das jemand manuell ausgeschalten hat und dein Status im iobroker ist noch auf an. 🙂

            1 Reply Last reply Reply Quote 0
            • W
              Wuaza last edited by

              Hallo,

              Okay, durch Alexa wird das Script immer neu ausgeführt, d.h. ich hab deinen Rat einfach mal ausprobiert und für den Ein- und Ausschaltvorgang jeweils ein Script angelegt.

              -> Funktioniert perfekt 🙂

              Dankeschön!

              Nächster Schritt wäre jetzt noch, dass sich der Echo Dot automatisch mit dem AV-Receiver über BT verbindet. Sollte ich das hinkriegen, stelle ich mein Script hier zur Verfügung.

              Danke nochmals für die Hilfe!

              1 Reply Last reply Reply Quote 0
              • M
                Mater1984 last edited by

                @Wuaza:

                Nächster Schritt wäre jetzt noch, dass sich der Echo Dot automatisch mit dem AV-Receiver über BT verbindet. Sollte ich das hinkriegen, stelle ich mein Script hier zur Verfügung.

                Danke nochmals für die Hilfe! `

                Kann man das nicht im Echo dot einstellen? Aber dann ist der Receiver glaube ich immer verbunden als Ausgabegerät.

                1 Reply Last reply Reply Quote 0
                • W
                  Wuaza last edited by

                  Ich nutze den Receiver nicht nur zur Musikwiedergabe über den Dot, sondern auch für Fernsehen, Konsole etc.

                  Ich denke, wenn ich den Receiver auf BT stelle (Klappt schon über den ioBroker :)), dass sich der Echo dann nicht automatisch damit verbinden wird, oder?

                  Und jedes Mal noch "Alexa, koppeln" o.ä. sagen wäre ja zu einfach. 😉

                  1 Reply Last reply Reply Quote 0
                  • W
                    Wuaza last edited by

                    Guten Abend,

                    nachdem mein obiges Vorhaben soweit funktioniert, meine nächste Herausforderung: Ich möchte über Alexa die Lautstärke des AVR steuern. In einem anderen Thread hier im Forum (viewtopic.php?t=5580) hat jemand schon ein funktionierendes Script gepostet. Ich hab es entsprechend auf meinen Denon angepasst (IP-Adresse und HTML-Req), aber es scheint nicht zu reagieren:

                    var http = "http://192.168.x.xxx/goform/formiPhoneAppVolume.xml?1+-";
                    
                    on({id: "javascript.0.AV-Power", change: "any"}, 
                        function (obj) {
                        var x = obj.state.val;
                        if (x === 0) {
                            require("request")(http + 'off'); // Bei Befehl "aus" wird Vol. auf Mute gesetzt.
                            console.log("Lautstärke AVR-X1200 auf -MUTE- gesetzt.");
                        } else { 
                            x = 80 - x; 
                            require("request")(http + x);
                            console.log("Lautstärke AVR-X1200 auf " + x + " gesetzt.");
                    }});
                    

                    Zu der Zeile

                     x = 80 - x;
                    

                    ist zu sagen: Die Werte müssen als db-Wert übergeben werden. Soll die Lautstärke auf Stufe 50 (von 100) gesetzt werden, muss dafür -30db gesetzt werden –> "Alexa, Boxen auf 50%" --> x = 80 - 50 = 30db

                    Der Adapter sollte richtig konfiguriert sein, zumindest war er so im o.g. eingestellt (siehe Anhang)

                    Vielleicht kann mir ein Experte einen Rat geben 🙂

                    Vielen Dank!
                    5708_asd.png

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    881
                    Online

                    31.6k
                    Users

                    79.5k
                    Topics

                    1.3m
                    Posts

                    2
                    8
                    849
                    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