Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. [geloest] Gembird, Energenie Lan-Steckdosen

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    [geloest] Gembird, Energenie Lan-Steckdosen

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

      Hallo,

      Ich wuerde gerne meine LAN Steckdosen (http://energenie.com/item.aspx?id=7416) in iobroker implementieren.

      Einfache Befehle wie Ein oder Aus wuerden schonmal reichen. Ich habe im Netz nicht viel gefunden was mich weiter bringt.

      FHEM oder OpenHab haben das schon implementiert. Soweit so gut, es soll gehen und die Befehle sehen wohl wie folgt aus.

      1. Befehl: http://Deine-IP/login.html

      Dann einen POST Befehl –> pw=1 (Dein Passwort um dich auf die Seite zu loggen)

      2. Befehl: http://192.168.1.90/status.html

      Dann einen POST Befehl –> cte1=0 (cteX steht fuer die jeweilige Steckdose, 0 oder 1 fuer Aus oder An)

      Auf der Seite gibt es mehr Infos. http://forum.micasaverde.com/index.php/ … ek8u6jn3m0

      Ich bin auf eure Hilfe angewiesen - Komme bei diesem einfachen Tasks nicht mehr weiter.

      Vielen Dank

      Basti97 1 Reply Last reply Reply Quote 0
      • M
        mickyboys last edited by

        Jetzt habe ich auf Amazon Kunden antworten dieses noch gefunden.

        curl -sd 'pw=1' http://<ip>/login.html >/dev/null #login

        curl -sd 'cte2=0' http:// <ip>>/dev/null #turn port 2 off

        curl -sd 'cte1=1' http:// <ip>>/dev/null #turn port 1 on

        curl -s http://<ip>/login.html >/dev/null #log out

        Wie bekomme ich curl in iobroker?

        Danke</ip></ip></ip></ip>

        1 Reply Last reply Reply Quote 0
        • AlCalzone
          AlCalzone Developer last edited by

          Wenn ich das richtig verstehe, musst du nur HTTP-Requests absetzen, dazu braucht es kein curl, das kannst du im Javascript-Adapter machen:

          // Erfordert request-Modul, sollte standardmäßig installiert sein
          var request = require("request");
          
          // Login:
          request.post({
              url: "http://<ip>/login.html",
              body: "pw=1"
          }, function (error, response, body) {
              // TODO: Antwort auswerten. Prüfen, ob Fehler aufgetreten ist.
          });
          
          // Port 2 off:
          request.post({
              url: "http://<ip>",
              body: "cte2=0"
          }, function (error, response, body) {
              // TODO: Antwort auswerten. Prüfen, ob Fehler aufgetreten ist.
          });
          
          // Port 1 on:
          request.post({
              url: "http://<ip>",
              body: "cte1=1"
          }, function (error, response, body) {
              // TODO: Antwort auswerten. Prüfen, ob Fehler aufgetreten ist.
          });
          
          // Logout:
          request.post({
              url: "http://<ip>/login.html"
          }, function (error, response, body) {
              // TODO: Antwort auswerten. Prüfen, ob Fehler aufgetreten ist.
          });</ip></ip></ip></ip> 
          
          1 Reply Last reply Reply Quote 0
          • M
            mickyboys last edited by

            Hi,

            Vielen Dank erstmal.

            Leider funktioniert es nicht, er gibt keinen Fehler aus, schaltet aber auch keine Steckdose.

            Was aber noch dazu kommt, immer nachdem ich getestet habe bekomme ich keinen Zugriff mehr auf die Webseite. Als wenn es die Seite und IP nicht geben wuerde.

            Ich habe 2 Steckdosen, beide sind nun nicht mehr erreichbar 🙂 laut LAN Find aber noch im Netzwerk…

            var request = require("request");
            
            // Login:
            request.post({
                url: "http://192.168.2.124/login.html",
                body: "pw=1"
            }, function (error, response, body) {
                // TODO: Antwort auswerten. Prüfen, ob Fehler aufgetreten ist.
            });
            
            // Port 1 on:
            request.post({
                url: "http://192.168.2.124/status.html",
                body: "cte4=0"
            }, function (error, response, body) {
                // TODO: Antwort auswerten. Prüfen, ob Fehler aufgetreten ist.
            });
            // Logout:
            request.post({
                url: "http://192.168.2.124/login.html"
            }, function (error, response, body) {
                // TODO: Antwort auswerten. Prüfen, ob Fehler aufgetreten ist.
            });
            
            1 Reply Last reply Reply Quote 0
            • M
              mickyboys last edited by

              Also, ich habe es nochmal probiert - sobald ich das script verschicke haengt sich der Webserver von der Steckerleiste auf…

              Habt ihr noch Ideen?

              1 Reply Last reply Reply Quote 0
              • Jey Cee
                Jey Cee Developer last edited by

                Ist das was du uns hier zeigst dein ganzes Skript?

                Wenn ja wundert es mich nicht das sich der Webserver aufhängt. Du schickst damit alle befehle gleichzeitig.

                Gesendet von meinem m8 mit Tapatalk

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

                  Hi,

                  Ja 🙂 So hatte ich das script eingestellt. Was muss ich tun um es richtig zu machen?

                  Vielen Dank fuer eure Hilfe.

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

                    Muss ich in den Code noch ein Delay ein bauen und wenn wie muss der aussehen?

                    Vielen vielen Dank

                    1 Reply Last reply Reply Quote 0
                    • Jey Cee
                      Jey Cee Developer last edited by

                      Hi,

                      ein delay ist mit Sicherheit nicht verkehrt, aber hier sicher nicht dein Problem.

                      Dir fehlt ganz klar noch das Verständnis von JS und den Strukturen in ioBroker.

                      Deshalb solltest du dich http://www.iobroker.net/?page_id=5385&lang=de mal informieren. Da ist die Programmierung sehr ausführlich beschrieben.

                      Dein Code sollte so aussehen:

                      var request = require("request");
                      
                      // Login:
                      on({id: Auslöser_ID, change: 'ne'	//Die Auslöser_ID kann jedes beliebige Objekt in ioBroker sein, du musst das auswählen auf das du reagieren willst
                      	},{ function(){
                      		login();
                      		setTimeout(function(){
                      			port1ON()
                      		}, 500);		//Zeit in ms
                      });
                      
                      function login(){
                      	request.post({
                          		url: "http://192.168.2.124/login.html",
                          		body: "pw=1"
                      	}, function (error, response, body) {
                          		// TODO: Antwort auswerten. Prüfen, ob Fehler aufgetreten ist.
                      	});
                      }
                      
                      function port1ON(){
                      	request.post({
                          		url: "http://192.168.2.124/status.html",
                          		body: "cte4=0"
                      	}, function (error, response, body) {
                          		// TODO: Antwort auswerten. Prüfen, ob Fehler aufgetreten ist.
                      	});
                      }
                      
                      
                      1 Reply Last reply Reply Quote 0
                      • AlCalzone
                        AlCalzone Developer last edited by

                        Ja, ich habe dir nur den Code geschrieben, um die einzelnen Befehle abzusetzen, nicht ihre Reihenfolge einzuhalten.

                        Korrekt wäre folgender Ablauf in Pseudo-Code:

                        on(Auslöser)
                        |-- login() 
                        ...
                        |-- Callback von login wird aufgerufen (
                            |-- wenn kein Fehler (error == undefined)
                                |-- port1_on()
                                |-- port2_off()
                                |-- was auch immer, am besten auch sequentiell
                        
                        

                        Diese ganze Netzwerkkommunikation ist schwer asynchron, hier eine sinnvolle Ablaufsteuerung zu erreichen ist nicht ganz trivial.

                        Eine Möglichkeit wäre der Einsatz von https://developers.google.com/web/fundamentals/getting-started/primers/promises, das ist aber schon ein fortgeschrittenes Thema. Kannst dich bei Interesse mal einlesen. Dann könnte der Ablauf etwa so sein (mit Promises definierte Funktionen vorausgesetzt):

                        login()
                          .then(port1_on)
                          .then(port2_off)
                          .catch(function(e) {log("Schalten nicht möglich: " + e);})
                          ;
                        
                        

                        Du könntest auch in deinem Handler für die State-Änderung ein Array von Funktionen definieren, die nacheinander aufgerufen werden sollen. Der Request-Callback nimmt sich dann jeweils den ersten, und ruft ihn auf. Die Funktionen müssten dann auch entsprechend definiert werden. Das könnte so aussehen:

                        on(
                            { id: Auslöser_ID, change: 'ne' },
                            function () {
                                // Hier die Parameter deiner Requests definieren (url, body)
                                // Dieser Part unterscheidet sich je nach Funktion
                                var requests = [
                                    { // Login
                                        url: "http://192.168.2.124/login.html",
                                        body: "pw=1"
                                    },
                                    { // Port 4 aus
                                        url: "http://192.168.2.124/status.html",
                                        body: "cte4=0"
                                    },
                                    { // Port 1 an
                                        url: "http://192.168.2.124/status.html",
                                        body: "cte1=1"
                                    },
                                    { // Logout
                                        url: "http://192.168.2.124/login.html"
                                    },
                                ];
                        
                                // Dieser part ist immer gleich.
                                // Anfrage-Kette starten:
                                chainPostRequests(requests);
                            }
                        );
                        
                        function doPostRequest(params, successCb, errorCb) {
                            request.post(params, function (error, response, body) {
                                if (error)
                                    errorCb(error); // Ruft Fehler-Callback mit Fehlerbeschreibung auf
                                else
                                    successCb(body); // Ruft Erfolgs-Callback mit Antwort des Servers auf.
                            });
                        }
                        
                        function chainPostRequests(requestParams) {
                            var currentRequestParams = requestParams.shift(); // 1\. Element des Arrays entfernen und benutzen
                            doPostRequest(
                                currentRequestParams,
                                function (body) {
                                    // Anfrage erfolgreich
                                    if (requestParams.length > 0) {
                                        // nächste Anfrage starten
                                        chainPostRequests(requestParams);
                                    }
                                    else {
                                        // wir sind fertig
                                    }
                                },
                                function (error) {
                                    // Es gab ein Problem, abbrechen
                                    // Fehler loggen/ausgeben
                                }
                            );
                        }
                        
                        

                        Disclaimer: Code ist ungetestet.

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

                          Moin,

                          Erstmal grosses Danke.

                          Dein Skript spuckt soweit keine Fehler aus, aber schalten tut es auch nicht.

                          Nur um Sicher zu gehen, ich habe einfach ein neues Objekt erstellt mit Standard Einstellungen.

                          filename="Capture.PNG" index="1">~~

                          Ist das richtig, muss ich was besonderes beachten? Brauche ich ein bestimmtes Widget was das schalten kann?

                          Hier mein Skript was ich mir deinem Code erstellt habe.

                          filename="Capture02.PNG" index="0">~~

                          Danke fuer euren Support,

                          Axel

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

                            Gibts niemanden der helfen kann oder moechte?

                            1 Reply Last reply Reply Quote 0
                            • Jey Cee
                              Jey Cee Developer last edited by

                              Du hast einen Fehler in deinem Skript. Bei 'on' stimmt die ID von deinem Objekt nicht.

                              Füg die ID mal mit dem Button oben rechts im Editor ein.

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

                                @Jey Cee:

                                Du hast einen Fehler in deinem Skript. Bei 'on' stimmt die ID von deinem Objekt nicht.

                                Füg die ID mal mit dem Button oben rechts im Editor ein. `

                                Mhm, das hatte ich schon getan. Meinst du das /Gembird1_Port4_aus/ sollte weg?

                                So sieht die ID aus wenn ich sie via dem button einfuege…

                                "Gembird1_Port4_aus"/Gembird1_Port4_aus/

                                Danke,

                                1 Reply Last reply Reply Quote 0
                                • Jey Cee
                                  Jey Cee Developer last edited by

                                  Ne das passt. Dachte der Pfad ist unvollständig, aber du hast das Objekt einfach global angelegt. Typischerweise legt man solche Objekte in JavaScript.0 an.

                                  Wie beschreibt du das Objekt?

                                  Gesendet von meinem m8 mit Tapatalk

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

                                    Wie meinst du beschreiben? Steh auf dem Schlauch

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

                                      Wenn ich das Skript starte mit dem selbsterstellten Objekt bekomme ich diese Fehlermeldung.

                                      ReferenceError: request is not defined at doPostRequest (script.js.common.Gembird_Test.Gembird:28:5) at chainPostRequests (script.js.common.Gembird_Test.Gembird:38:5) at Object. (script.js.common.Gembird_Test.Gembird:22:9) at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1325:48) at /opt/iobroker/node_modules/iobroker.javascript/javascript.js:585:48 at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:3210:17) at checkPatterns (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:581:17) at Object.utils.adapter.stateChange (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:253:17) at Object.that.states.States.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:2866:37) at Socket. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:45:30)

                                      Keine Ahnung was das bedeutet :?

                                      Ich weiss leider auch nicht wie das Objekt aussehen sollte, sprich mit welchen Einstellungen es erstellt werden sollte.

                                      1 Reply Last reply Reply Quote 0
                                      • Jey Cee
                                        Jey Cee Developer last edited by

                                        Hier mal ein Beispiel wie so ein Objekt aussehen sollte:
                                        filename="objekt.PNG" index="0">~~

                                        @mickyboys:

                                        Wie meinst du beschreiben? Steh auf dem Schlauch `
                                        Damit meinte ich wie du den Status (Wert/Value) deines Objekts von "false" auf "true" setzt.

                                        @mickyboys:

                                        Wenn ich das Skript starte mit dem selbsterstellten Objekt bekomme ich diese Fehlermeldung.

                                        ReferenceError: request is not defined at doPostRequest (script.js.common.Gembird_Test.Gembird:28:5) at chainPostRequests (script.js.common.Gembird_Test.Gembird:38:5) at Object. (script.js.common.Gembird_Test.Gembird:22:9) at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1325:48) at /opt/iobroker/node_modules/iobroker.javascript/javascript.js:585:48 at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:3210:17) at checkPatterns (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:581:17) at Object.utils.adapter.stateChange (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:253:17) at Object.that.states.States.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:2866:37) at Socket. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:45:30) `

                                        Der Fehler sagt dir das du den Befehl request nicht definiert hast. Der kommt von einem Modul das du in deinem Skript aufrufen musst.

                                        var request = require('request');
                                        

                                        Am Anfang deines Scripts einfügen. Dann sollte es gehen.

                                        Lies dich hier mal ein: http://www.iobroker.net/?page_id=5385&lang=de

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

                                          Hi Danke, schau mir das gleich mal an.

                                          Dein Anhang wie ein Objekt ausschauen sollte ist leer - magst nochmal schicken?

                                          Danke,

                                          Axel

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

                                            Hi,

                                            Ich gebe auf.

                                            Der Code freezt jetzt wieder die komplette Steckdosenleiste.

                                            Schade das es so kompliziert ist eine einfache Steckdosenleiste anzusprechen.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            949
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            24
                                            5064
                                            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