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. [gelöst] Edimax WLAN Steckdose schalten

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.1k

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

[gelöst] Edimax WLAN Steckdose schalten

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
13 Beiträge 7 Kommentatoren 4.0k Aufrufe 4 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.
  • uweklattU Offline
    uweklattU Offline
    uweklatt
    schrieb am zuletzt editiert von
    #1

    Hallo,

    ich versuche gerade, meine Edimax SP-2101W über Javascript zu schalten.

    Im Prinzip muss man dazu eine Datei per HTTP-PUT senden.

    Ich habe ein PHP-Script, das bereits funktioniert:

    ! function do_post_request( $url, $query_string) { $params = array( 'http' => array( 'method' => 'POST', 'header' => "Content-type: application/x-www-form-urlencoded\r\n" . "Content-Length: " . strlen($query_string) . "\r\n", 'content' => $query_string ) ); ! $context = stream_context_create( $params ); $contents = file_get_contents( $url, false, $context ); return $contents; } $url = 'http://user:passwort@192.168.x.y:10000/smartplug.cgi'; $request = '<smartplug id="edimax"><cmd id="setup"><device.system.power.state>ON</device.system.power.state></cmd></smartplug>'; $response = do_post_request($url, $request); !
    Die URL lautet:````
    http://user:passwort@192.168.x.y:10000/smartplug.cgi

    Gesendet wird zum Einschalten:
    

    <smartplug id="edimax"><cmd id="setup"><device.system.power.state>ON</device.system.power.state></cmd></smartplug>

    Ausschalten:
    

    <smartplug id="edimax"><cmd id="setup"><device.system.power.state>OFF</device.system.power.state></cmd></smartplug>

    
    Mein JS-Code:
    

    var request = require('request');
    request(
    { method: 'PUT',
    url: 'http://user:passwort@192.168.x.y:10000/smartplug.cgi',
    headers: "'content-type': 'application/x-www-form-urlencoded'",
    body: '<smartplug id="edimax"><cmd id="setup"><device.system.power.state>ON</device.system.power.state></cmd></smartplug>'
    },
    function (error, response, body)
    {
    console.log('error: '+ response.statusCode)
    console.log(body)
    }
    )

    
    Ich bekomme den Statuscode 200, aber die "Payload" scheint nicht korrekt anzukommen.
    
    Zumindest schaltet der Edimax im Ggensatz zur PHP-variante nicht um.
    
    Fehlt da eine passende Codierung?
    
    Tschau
    
    Uwe

    Proxmox/LXC/Docker

    1 Antwort Letzte Antwort
    0
    • uweklattU Offline
      uweklattU Offline
      uweklatt
      schrieb am zuletzt editiert von
      #2

      Hallo,

      ich habe es inzwischen selbst lösen können!

      Statt "PUT" muss "POST" als Methode gewählt werden…

      Also folgender Code funktioniert:

      var request = require('request');
        request(
          { method: 'POST',
            url: 'http://user:passwort@192.168.x.y:10000/smartplug.cgi',
            body: '<smartplug id="edimax"><cmd id="setup"><device.system.power.state>ON</device.system.power.state></cmd></smartplug>'
          },  
          function (error, response, body) 
          {
            console.log('error: '+ response.statusCode)
            console.log(body)
          }
        )
      
      

      Evtl. ist das allgemein hilfreich.

      Tschau

      Uwe

      Proxmox/LXC/Docker

      1 Antwort Letzte Antwort
      0
      • O Offline
        O Offline
        Orbitson
        schrieb am zuletzt editiert von
        #3

        Hi, bin absoluter Anfänger in Sachen Java, gibt es eventuell ein fertigen Script um die Aktuelle Leistung abzufragen?

        Mit freundlichen Grüßen

        1 Antwort Letzte Antwort
        0
        • uweklattU Offline
          uweklattU Offline
          uweklatt
          schrieb am zuletzt editiert von
          #4

          Hallo,

          mit neuster Edimax Firmware funktioniert das oben Genannte leider nicht mehr!

          Ansonsten kann man aber auf gleicher Art auch die aktuelle Leistung abfragen.

          Infos dazu findest Du z.B. hier:

          https://sun-watch.net/index.php/eigenve … -protokoll

          Dazu habe ich leider kein fertiges Script.

          Tschau

          Uwe

          Proxmox/LXC/Docker

          A 1 Antwort Letzte Antwort
          0
          • O Offline
            O Offline
            Orbitson
            schrieb am zuletzt editiert von
            #5

            Bekomm da leider keine Daten. :-(

            1 Antwort Letzte Antwort
            0
            • O Offline
              O Offline
              Orbitson
              schrieb am zuletzt editiert von
              #6

              Habe jetzt etwas für Node red gefunden was auch bei der aktuellen Version laufen soll. Nur bekomme ich das leider nicht zum laufen.

              https://github.com/johnwalicki/Node-RED … w.json#L21

              Kennst du dich da Eventuell aus?

              1 Antwort Letzte Antwort
              0
              • hg6806H Offline
                hg6806H Offline
                hg6806
                Most Active
                schrieb am zuletzt editiert von
                #7

                Hat mittlerweile jemand eine Lösung wie man die EdiMax Steckdose schalten kann?

                Am besten wäre es mit einem On/Off Widget zu schalten.

                1 Antwort Letzte Antwort
                0
                • uweklattU uweklatt

                  Hallo,

                  mit neuster Edimax Firmware funktioniert das oben Genannte leider nicht mehr!

                  Ansonsten kann man aber auf gleicher Art auch die aktuelle Leistung abfragen.

                  Infos dazu findest Du z.B. hier:

                  https://sun-watch.net/index.php/eigenve … -protokoll

                  Dazu habe ich leider kein fertiges Script.

                  Tschau

                  Uwe

                  A Offline
                  A Offline
                  amgxda
                  schrieb am zuletzt editiert von
                  #8

                  @uweklatt @Orbitson

                  Das Thema ist zwar etwas älter, aber vielleicht ist das ja für den ein oder anderen doch von Interesse, Verbrauchsdaten aus den Edimax 2101W Steckdosen auszulesen.

                  Der folgende Code-Schnipsel läuft hier sowohl unter 2101W V1, Firmware 2.08, als auch unter 2101W V2 3.0.0. Unter V1 nehmt ihr das Passwort aus der EdiLife App. Für die V2 müsst ihr die Anleitung hier befolgen, um das Passwort zu ermitteln: https://github.com/mwittig/edimax-smartplug/issues/17

                  Alle 3 Min. die Verbrauchswerte in einen Datenpunkt schreiben:

                  schedule("*/3 * * * *", function () {
                      exec('curl --digest -u admin:1234 -s POST "http://admin:1234@192.168.1.115:10000/smartplug.cgi" -d \'<SMARTPLUG id="edimax"><CMD id="get"><NOW_POWER><Device.System.Power.NowCurrent></Device.System.Power.NowCurrent><Device.System.Power.NowPower></Device.System.Power.NowPower></NOW_POWER></CMD></SMARTPLUG>\'',
                  		function (error, stdout, stderr) {
                              const regex = /.NowPower>(\d.{0,1}\d+).*/gm;
                              const str = stdout;
                              let m;
                              while ((m = regex.exec(str)) !== null) {
                                  // This is necessary to avoid infinite loops with zero-width matches
                                  if (m.index === regex.lastIndex) {
                                      regex.lastIndex++;
                                  }
                                  // The result can be accessed through the `m`-variable.
                                  m.forEach((match, groupIndex) => {
                                      //console.log(`Found match, group ${groupIndex}: ${match}`);
                                      setState('javascript.0.Strom.edimax_2_strom_xml', match, true);
                                  });
                                  
                              }
                              //log(stdout + " - " + stderr);
                             //setState('javascript.0.Strom.edimax_1_strom_xml', "0", true);
                          });
                  });
                  
                  C 1 Antwort Letzte Antwort
                  0
                  • A amgxda

                    @uweklatt @Orbitson

                    Das Thema ist zwar etwas älter, aber vielleicht ist das ja für den ein oder anderen doch von Interesse, Verbrauchsdaten aus den Edimax 2101W Steckdosen auszulesen.

                    Der folgende Code-Schnipsel läuft hier sowohl unter 2101W V1, Firmware 2.08, als auch unter 2101W V2 3.0.0. Unter V1 nehmt ihr das Passwort aus der EdiLife App. Für die V2 müsst ihr die Anleitung hier befolgen, um das Passwort zu ermitteln: https://github.com/mwittig/edimax-smartplug/issues/17

                    Alle 3 Min. die Verbrauchswerte in einen Datenpunkt schreiben:

                    schedule("*/3 * * * *", function () {
                        exec('curl --digest -u admin:1234 -s POST "http://admin:1234@192.168.1.115:10000/smartplug.cgi" -d \'<SMARTPLUG id="edimax"><CMD id="get"><NOW_POWER><Device.System.Power.NowCurrent></Device.System.Power.NowCurrent><Device.System.Power.NowPower></Device.System.Power.NowPower></NOW_POWER></CMD></SMARTPLUG>\'',
                    		function (error, stdout, stderr) {
                                const regex = /.NowPower>(\d.{0,1}\d+).*/gm;
                                const str = stdout;
                                let m;
                                while ((m = regex.exec(str)) !== null) {
                                    // This is necessary to avoid infinite loops with zero-width matches
                                    if (m.index === regex.lastIndex) {
                                        regex.lastIndex++;
                                    }
                                    // The result can be accessed through the `m`-variable.
                                    m.forEach((match, groupIndex) => {
                                        //console.log(`Found match, group ${groupIndex}: ${match}`);
                                        setState('javascript.0.Strom.edimax_2_strom_xml', match, true);
                                    });
                                    
                                }
                                //log(stdout + " - " + stderr);
                               //setState('javascript.0.Strom.edimax_1_strom_xml', "0", true);
                            });
                    });
                    
                    C Offline
                    C Offline
                    ck_coke
                    schrieb am zuletzt editiert von
                    #9

                    @amgxda

                    Vielen Dank für das Skript. Läuft soweit gut bei mir. Habe bei meinen Edimax mit Firmware 3.0 das Passwort "heraus gelesen" und im Skript eingetragen. Daten kommen und werden in den Datenpunkt geschrieben. Probleme habe ich nur beim weiter verwenden des Datenpunktes mit folgendem Skript:

                    on({id: "javascript.0.Strom.edimax_2_strom_xml", change: "ne"}, function (obj) {
                      var value = obj.state.val;
                      var oldValue = obj.oldState.val;
                      if ((obj.state ? obj.state.val : "") <= 32 && (obj.oldState ? obj.oldState.val : "") > 32) {
                        console.log('Neuer Wert ist kleiner');
                        console.log('ALT: ' + obj.oldState.val);
                        console.log('NEU: ' + obj.state.val);
                      } else {
                        console.log('Neuer Wert ist größer');
                        console.log('ALT: ' + obj.oldState.val);
                        console.log('NEU: ' + obj.state.val);    
                      }
                    });
                    

                    Ich denke es liegt daran das in der Schleife von Deinem Skript jeweils zwei "Ergebnisse" direkt hintereinander in den Datenpunkt geschrieben werden. Group 0 und Group 1. Der erste ist die komplette Rückmeldung aus dem Curl und die zweite nur das was von der RegEx ausgefiltert wurde (übrigens ohne Nachkommastellen). Da ich mich hierzu leider noch zu wenig auskenne wäre meine Frage ob Du das Skript vielleicht so umbauen könntest das nur das Ergebnis der RegEx also Group 1 (ob mit oder ohne Nachkommastellen ist mir persönlich egal) in den Datenpunkt geschrieben wird?
                    Dann würde mein Skript und damit eine Alarmierung wenn die Waschmaschine fertig ist funktionieren ;-)

                    Vielen Dank vorab!!!

                    S 1 Antwort Letzte Antwort
                    0
                    • C ck_coke

                      @amgxda

                      Vielen Dank für das Skript. Läuft soweit gut bei mir. Habe bei meinen Edimax mit Firmware 3.0 das Passwort "heraus gelesen" und im Skript eingetragen. Daten kommen und werden in den Datenpunkt geschrieben. Probleme habe ich nur beim weiter verwenden des Datenpunktes mit folgendem Skript:

                      on({id: "javascript.0.Strom.edimax_2_strom_xml", change: "ne"}, function (obj) {
                        var value = obj.state.val;
                        var oldValue = obj.oldState.val;
                        if ((obj.state ? obj.state.val : "") <= 32 && (obj.oldState ? obj.oldState.val : "") > 32) {
                          console.log('Neuer Wert ist kleiner');
                          console.log('ALT: ' + obj.oldState.val);
                          console.log('NEU: ' + obj.state.val);
                        } else {
                          console.log('Neuer Wert ist größer');
                          console.log('ALT: ' + obj.oldState.val);
                          console.log('NEU: ' + obj.state.val);    
                        }
                      });
                      

                      Ich denke es liegt daran das in der Schleife von Deinem Skript jeweils zwei "Ergebnisse" direkt hintereinander in den Datenpunkt geschrieben werden. Group 0 und Group 1. Der erste ist die komplette Rückmeldung aus dem Curl und die zweite nur das was von der RegEx ausgefiltert wurde (übrigens ohne Nachkommastellen). Da ich mich hierzu leider noch zu wenig auskenne wäre meine Frage ob Du das Skript vielleicht so umbauen könntest das nur das Ergebnis der RegEx also Group 1 (ob mit oder ohne Nachkommastellen ist mir persönlich egal) in den Datenpunkt geschrieben wird?
                      Dann würde mein Skript und damit eine Alarmierung wenn die Waschmaschine fertig ist funktionieren ;-)

                      Vielen Dank vorab!!!

                      S Offline
                      S Offline
                      slkschlumpf
                      schrieb am zuletzt editiert von
                      #10

                      Hallo zusammen,

                      wie könnte ich dann eine Steckdose Edimax mit Firmware 3.0 per Befehl ein und aus schalten ?

                      1 Antwort Letzte Antwort
                      0
                      • hg6806H Offline
                        hg6806H Offline
                        hg6806
                        Most Active
                        schrieb am zuletzt editiert von
                        #11

                        Zu dem (alten) Thread habe ich auch noch eine Frage.
                        Muss man den Datenpunkt erst anlegen?

                        javascript.0.Strom.edimax_2_strom_xml
                        

                        Wenn ja wie? Also boolean zumindest wird nichts geschrieben.

                        1 Antwort Letzte Antwort
                        0
                        • hg6806H Offline
                          hg6806H Offline
                          hg6806
                          Most Active
                          schrieb am zuletzt editiert von hg6806
                          #12

                          Hallo nochmal,

                          leider läuft das Ganze noch immer nicht.

                          Grundlegend erst einmal, wie kann man überhaupt die FW Version sehen?
                          Die App meldet immer nur, dass man die Version überprüfen kann und dass sie aktuell ist.

                          S 1 Antwort Letzte Antwort
                          0
                          • hg6806H hg6806

                            Hallo nochmal,

                            leider läuft das Ganze noch immer nicht.

                            Grundlegend erst einmal, wie kann man überhaupt die FW Version sehen?
                            Die App meldet immer nur, dass man die Version überprüfen kann und dass sie aktuell ist.

                            S Offline
                            S Offline
                            schuellerf
                            schrieb am zuletzt editiert von
                            #13

                            @hg6806 Ich bin der Anleitung https://github.com/mwittig/edimax-smartplug/issues/17 gefolgt und der Befehl im telnet "nvc all" hat dann auch so infos

                            Run.FW.Version=3.00c
                            oder
                            Device.Configuration.HW.ModelName=SP2101W_V2
                            ... diese Werte sind von mir natürlich...

                            Das Passwort so herausfinden ist sehr mühsam - aber muss man ja nur einmal machen....
                            Das ganze per "curl" abholen ist da schon schlimmer. Ich verwende gerade den Adapter "linux-control" um den curl Befehl auf einem SSH server auszuführen - ich hoffe es gibt bald eine bessere Möglichkeit.
                            Ich habe aber weder einen EdiMax Adapter, noch einen einfachen HTTP adapter gefunden der dieses XML schicken und parsen könnte.

                            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

                            738

                            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