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. Visualisierung
  4. [geloest] Gembird, Energenie Lan-Steckdosen

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    476

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.6k

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

[geloest] Gembird, Energenie Lan-Steckdosen

Geplant Angeheftet Gesperrt Verschoben Visualisierung
24 Beiträge 4 Kommentatoren 5.9k Aufrufe
  • Ä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.
  • AlCalzoneA Offline
    AlCalzoneA Offline
    AlCalzone
    Developer
    schrieb am zuletzt editiert von
    #3

    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> 
    

    Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

    1 Antwort Letzte Antwort
    0
    • M Offline
      M Offline
      mickyboys
      schrieb am zuletzt editiert von
      #4

      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 Antwort Letzte Antwort
      0
      • M Offline
        M Offline
        mickyboys
        schrieb am zuletzt editiert von
        #5

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

        Habt ihr noch Ideen?

        1 Antwort Letzte Antwort
        0
        • Jey CeeJ Online
          Jey CeeJ Online
          Jey Cee
          Developer
          schrieb am zuletzt editiert von
          #6

          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

          Persönlicher Support
          Spenden -> paypal.me/J3YC33

          1 Antwort Letzte Antwort
          0
          • M Offline
            M Offline
            mickyboys
            schrieb am zuletzt editiert von
            #7

            Hi,

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

            Vielen Dank fuer eure Hilfe.

            1 Antwort Letzte Antwort
            0
            • M Offline
              M Offline
              mickyboys
              schrieb am zuletzt editiert von
              #8

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

              Vielen vielen Dank

              1 Antwort Letzte Antwort
              0
              • Jey CeeJ Online
                Jey CeeJ Online
                Jey Cee
                Developer
                schrieb am zuletzt editiert von
                #9

                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.
                	});
                }
                
                

                Persönlicher Support
                Spenden -> paypal.me/J3YC33

                1 Antwort Letzte Antwort
                0
                • AlCalzoneA Offline
                  AlCalzoneA Offline
                  AlCalzone
                  Developer
                  schrieb am zuletzt editiert von
                  #10

                  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.

                  Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                  1 Antwort Letzte Antwort
                  0
                  • M Offline
                    M Offline
                    mickyboys
                    schrieb am zuletzt editiert von
                    #11

                    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 Antwort Letzte Antwort
                    0
                    • M Offline
                      M Offline
                      mickyboys
                      schrieb am zuletzt editiert von
                      #12

                      Gibts niemanden der helfen kann oder moechte?

                      1 Antwort Letzte Antwort
                      0
                      • Jey CeeJ Online
                        Jey CeeJ Online
                        Jey Cee
                        Developer
                        schrieb am zuletzt editiert von
                        #13

                        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.

                        Persönlicher Support
                        Spenden -> paypal.me/J3YC33

                        1 Antwort Letzte Antwort
                        0
                        • M Offline
                          M Offline
                          mickyboys
                          schrieb am zuletzt editiert von
                          #14

                          @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 Antwort Letzte Antwort
                          0
                          • Jey CeeJ Online
                            Jey CeeJ Online
                            Jey Cee
                            Developer
                            schrieb am zuletzt editiert von
                            #15

                            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

                            Persönlicher Support
                            Spenden -> paypal.me/J3YC33

                            1 Antwort Letzte Antwort
                            0
                            • M Offline
                              M Offline
                              mickyboys
                              schrieb am zuletzt editiert von
                              #16

                              Wie meinst du beschreiben? Steh auf dem Schlauch

                              1 Antwort Letzte Antwort
                              0
                              • M Offline
                                M Offline
                                mickyboys
                                schrieb am zuletzt editiert von
                                #17

                                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 Antwort Letzte Antwort
                                0
                                • Jey CeeJ Online
                                  Jey CeeJ Online
                                  Jey Cee
                                  Developer
                                  schrieb am zuletzt editiert von
                                  #18

                                  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

                                  Persönlicher Support
                                  Spenden -> paypal.me/J3YC33

                                  1 Antwort Letzte Antwort
                                  0
                                  • M Offline
                                    M Offline
                                    mickyboys
                                    schrieb am zuletzt editiert von
                                    #19

                                    Hi Danke, schau mir das gleich mal an.

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

                                    Danke,

                                    Axel

                                    1 Antwort Letzte Antwort
                                    0
                                    • M Offline
                                      M Offline
                                      mickyboys
                                      schrieb am zuletzt editiert von
                                      #20

                                      Hi,

                                      Ich gebe auf.

                                      Der Code freezt jetzt wieder die komplette Steckdosenleiste.

                                      Schade das es so kompliziert ist eine einfache Steckdosenleiste anzusprechen.

                                      1 Antwort Letzte Antwort
                                      0
                                      • M Offline
                                        M Offline
                                        mickyboys
                                        schrieb am zuletzt editiert von
                                        #21

                                        Ich habe die CURL mit Chrome Dev-Inspector ausgelesen und in ein shellskript gepackt. Dieses starte ich nun per skript aus iobroker. Damit funktioniert es super…

                                        so sieht der CURL vom Socket01 aus, aufgeteilt in Login, Delay 2 Sekunden, An oder aus, Delay 2 Sekunden, Logout

                                        #!/bin/bash
                                        
                                        curl 'http://192.168.1.9/login.html' -H 'Origin: http://192.168.1.9' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: en-US,en;q=0.8,de;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36' -H 'Content-Type: application/x-www-form-urlencoded' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Cache-Control: max-age=0' -H 'Referer: http://192.168.1.9/' -H 'Connection: keep-alive' --data 'pw=1' --compressed
                                        
                                        sleep 2
                                        
                                        curl 'http://192.168.1.9/' -H 'Origin: http://192.168.1.9' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: en-US,en;q=0.8,de;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36' -H 'Content-Type: application/x-www-form-urlencoded' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Cache-Control: max-age=0' -H 'Referer: http://192.168.1.9/login.html' -H 'Connection: keep-alive' --data 'cte1=0&cte2=&cte3=&cte4=' --compressed
                                        
                                        sleep 2
                                        
                                        curl 'http://192.168.1.9/login.html' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: en-US,en;q=0.8,de;q=0.6' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Referer: http://192.168.1.9/' -H 'Connection: keep-alive' --compressed
                                        

                                        Und so das Script was aus iobroker gestartet wird. Hier werden jeweils der An oder Aus Befehl getriggert in abhaengigkeit zum Status.

                                        on({id: "javascript.0.scriptEnabled.common.HardShutdown.LeftSocket-1_Dummy"/*scriptEnabled.common.HardShutdown.LeftSocket-1_Dummy*/, change: "ne"}, function (obj) {
                                          var value = obj.state.val;
                                          var oldValue = obj.oldState.val;
                                          if (getState("javascript.0.scriptEnabled.common.HardShutdown.LeftSocket-1_Dummy").val == true) {
                                            exec('bash /home/pi/GembirdPowerSocket/LeftSocket1-on.sh');
                                            console.log("exec: " + 'bash /home/pi/GembirdPowerSocket/LeftSocket1-on.sh');
                                          } else if (getState("javascript.0.scriptEnabled.common.HardShutdown.LeftSocket-1_Dummy").val == false) {
                                            exec('bash /home/pi/GembirdPowerSocket/LeftSocket1-off.sh');
                                            console.log("exec: " + 'bash /home/pi/GembirdPowerSocket/LeftSocket1-off.sh');
                                          }
                                        });
                                        
                                        Basti97B 1 Antwort Letzte Antwort
                                        0
                                        • Basti97B Offline
                                          Basti97B Offline
                                          Basti97
                                          Most Active
                                          schrieb am zuletzt editiert von Basti97
                                          #22

                                          Hat jemand eine Lösung für die Gembird Steckdose gefunden um sie in iob zu integrieren?

                                          Iobroker läuft als VM auf Proxmoxserver x folgende Hersteller im Einsatz Sonoff, Gosund, Siemens x Aofo über Tasmota x Zigbee x das Smarthome wächst und wächst

                                          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

                                          663

                                          Online

                                          32.5k

                                          Benutzer

                                          81.8k

                                          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