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. Entwicklung
  4. Wemos Schaltaktor/Relai wie aus dem IOBroker heraus betätigen?

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.2k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.1k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Wemos Schaltaktor/Relai wie aus dem IOBroker heraus betätigen?

Geplant Angeheftet Gesperrt Verschoben Entwicklung
17 Beiträge 4 Kommentatoren 3.5k 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.
  • K Offline
    K Offline
    knopers1
    schrieb am zuletzt editiert von
    #1

    Hallo,

    ich würde gerne ein Wemo als Schaltaktor für Garagenlicht einsetzen. Dazu bediene ich mich an dem Sketch: http://www.renmet.com/wiki/index.php?ti … chaltaktor

    Ganz unten in der Beschreibung steht, wie der Schaltaktor zu schalten ist...

    Zitat:

    Schalten per HTTP-Request z.B. im Web-Browser oder über die CCU mit system.exec bzw. CUxD.

    Der WeMos reagiert auf folgende Befehle: "<ip-adresse>" gibt eine Status- und Befehlsübersicht aus "<ip-adresse>/aus" schaltet das Relais aus "<ip-adresse>/ein" schaltet das Relais ein "<ip-adresse>/status" gibt den Schaltzustand des Relais als Logikwert ("ein" oder "aus") zurück Nur der Vollständigkeit halber ein kleines Beispiel, wie ein Homematic-Skript für den Einschalt-Befehl mit system.exec aussehen könnte:

    string stdout;
    string stderr;
    string url="http://<ip-adresse des/wemos="">/ein";
    system.Exec ("wget -q -O /dev/null " # url, &stdout, &stderr);</ip-adresse>
    

    Welche möglichkeit habe ich den Wemo aus dem IOBroker heraus zu schalten? Gibt es eine Möglichkeit den Wemo über Blockly anzusprechen?

    Hintergrund ist, ich würde gerne über den Bewegungsmelder diesen Wemo zum Schalten zu bringen. Mit Blockly könnte man sogar die Zeit ansetzen, wann das Teil ausgehen soll…

    Danke</ip-adresse></ip-adresse></ip-adresse></ip-adresse>

    HP Microserver Gen8, RPI-4, IoBroker,

    1 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      Das sollte einfacher mit 'request' gehen:

      var request = require('request');
      var idWemos = '...';  // ID des Datenpunktes mit dem geschaltet werden soll (Typ: boolean)
      var WemosIP = 'http://192.168.xxx.yyy/';
      
      function loggen(error, status, body) {
          if(error) log('Error: ' + error, 'error');
          if(status) log('Status: ' + status);
          if(body) log('Body: ' + body);
      }
      
      on(idWemos, function(dp) {
          if(dp.state.val) request(WemosIP + 'ein', loggen);
          else request(WemosIP + 'aus', loggen);
      });
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • K Offline
        K Offline
        knopers1
        schrieb am zuletzt editiert von
        #3

        Hallo Paul, danke Dir! Bin froh dass es geht, obwohl ich noch nicht richtig durchblicke was Du dort geschrieben hast…

        Gibt es dazu ein Widget? (Schalter) damit man auch noch das Licht vom IOBroker heraus ein/aus schalten kann?

        var request = require('request');

        var idWemos = '…'; // ID des Datenpunktes mit dem geschaltet werden soll (Typ: boolean)

        var WemosIP = 'http://192.168.xxx.yyy/';

        function loggen(error, status, body) {

        if(error) log('Error: ' + error, 'error');

        if(status) log('Status: ' + status);

        if(body) log('Body: ' + body);

        }

        on(idWemos, function(dp) {

        if(dp.state.val) request(WemosIP + 'ein', loggen);

        else request(WemosIP + 'aus', loggen);

        });

        Kommt an der Stelle ein "ein" oder "aus" ???

        Ich nehme mal an, dass der Schaltstatus mit übertragen wird…Ist es so?

        Wo oder womit kann ich es ausführen? Kann ich damit mit Blockly programieren? Kannst Du etwas dazu sagen? Bin echt neu in der Materie…..

        HP Microserver Gen8, RPI-4, IoBroker,

        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @knopers1:

          Gibt es dazu ein Widget? (Schalter) damit man auch noch das Licht vom IOBroker heraus ein/aus schalten kann? `
          Benutze selbst VIS nicht, gehe aber davon aus, dass es ein Widget gibt mit dem man den boolschen Datenpunkt zwischen false ("aus") und true ("ein") umschalten kann.
          @knopers1:

          Kommt an der Stelle ein "ein" oder "aus" ??? ` Das ist die ID des Datenpunktes zum Umschalten per Widget. Man kann ihn auch in Javascript erzeugen:

          createState('Wemos-Schalter', false, {
             type: 'boolean',
             read: true,
             write: true,
             desc: 'Garagenlicht',
             def: false,
             states: {
                false: 'aus',
                true: 'ein'
             }
          });
          

          Die Datenpunkt-ID lautet dann:

          var idWemos = 'javascript.' + instance + '.Wemos-Schalter'; 
          

          @knopers1:

          Wo oder womit kann ich es ausführen? Kann ich damit mit Blockly programieren? Kannst Du etwas dazu sagen? Bin echt neu in der Materie….. `
          Nein, das ist Javascript. Unter Javascript ein neues Skript anlegen, den kompltten Text in Code-Tags aus dem Forum in das Editor-Fenster kopieren und anpassen (ID, IP-Adresse).
          @knopers1:

          Ich nehme mal an, dass der Schaltstatus mit übertragen wird…Ist es so? `
          Das nehme ich an. Die log-Kommandos dienen dazu, genau das herauszufinden.

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          0
          • K Offline
            K Offline
            knopers1
            schrieb am zuletzt editiert von
            #5

            puhh, bin echt platt. Du hast geballtes Wissen Paul..

            Ich versuche es zu verstehen…

            Ich habe ein Wemo das nicht unter IObroker/ccu auftaucht. Man kann dieses Gerät aber trotzdem bedienen.

            Es ist nötig ein Datenpunkt mit ID unter IOBroker zu erzeugen.

            Das ist die ID des Datenpunktes.... Wenn das die ID ist, wie erzeuge ich den Datenpunkt? Dort fehlt mir ein verweiss auf IP des Gerätes...

            createState('Wemos-Schalter', false, {
               type: 'boolean',
               read: true,
               write: true,
               desc: 'Garagenlicht',
               def: false,
               states: {
                  false: 'aus',
                  true: 'ein'
               }
            });
            

            Wenns man i Java macht. sieht mein ID des Datenpunktes so aus…

            var idWemos = 'javascript.' + instance + '.Wemos-Schalter'; 
            

            Den Request muß ich so oder so erzeugen? Ist das mein Datenpunkt ??? Wo wird dieses erzeugt?

            var request = require('request');
            var idWemos = '...';  // ID des Datenpunktes mit dem geschaltet werden soll (Typ: boolean)
            var WemosIP = 'http://192.168.xxx.yyy/';
            
            function loggen(error, status, body) {
                if(error) log('Error: ' + error, 'error');
                if(status) log('Status: ' + status);
                if(body) log('Body: ' + body);
            }
            
            on(idWemos, function(dp) {
                if(dp.state.val) request(WemosIP + 'ein', loggen);
                else request(WemosIP + 'aus', loggen);
            });
            

            Ich habe mit Blockly etwas gearbeitet. Dort kann man auch etwas in Java schreiben. Wo kommen die Scripte hin die Du als Beispiel gepostet hast?

            Wie erzeugt man ein request? Kannst Du grob etwas dazu schreiben, damit ich wenigsten weiß, was ich mir durchlesen muß?

            Ich weis nicht genau wo ich anfangen sollte…

            HP Microserver Gen8, RPI-4, IoBroker,

            1 Antwort Letzte Antwort
            0
            • paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #6

              @knopers1:

              Ich habe ein Wemo das nicht unter IObroker/ccu auftaucht. Man kann dieses Gerät aber trotzdem bedienen. `
              Das Gerät kann nirgends auftauchen, da es nur über eine URL bedient wird. Als Ersatz für die Bedienung in VIS dient der Datenpunkt mit der ID "javascript.0.Wemos-Schalter", den Du per Skript erzeugst (createState).
              @knopers1:

              Wenn das die ID ist, wie erzeuge ich den Datenpunkt? Dort fehlt mir ein verweiss auf IP des Gerätes… `
              Der Datenpunkt kann keinen Verweis auf die IP des Gerätes haben, da er nur zur Umschaltung per VIS dient. Bei jeder Änderung des Wertes des Datenpunktes wird das Programm mit on(idWemos, …) getriggert, aus dem heraus per request(URL) an das Gerät gesendet wird.
              @knopers1:

              Wo kommen die Scripte hin die Du als Beispiel gepostet hast? `
              In das http://www.iobroker.net/?page_id=6818&lang=de des Javascript-Adapters im Modus "Javascript" (nicht "Blockly").
              @knopers1:

              Ich weis nicht genau wo ich anfangen sollte… `
              Eine Doku zum JS-Adapter findest Du https://github.com/ioBroker/ioBroker.javascript/blob/master/README.md; eine Einführung in Javascript http://www.iobroker.net/?page_id=5385&lang=de.

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              1 Antwort Letzte Antwort
              0
              • K Offline
                K Offline
                knopers1
                schrieb am zuletzt editiert von
                #7

                Puuh Paul…. :shock: danke, Du bist echt Spitze....

                Ich warte momentan auf nen Wemo und melde mich sobald die Hardware da und mit dem Sketch betankt ist....

                Den Script was Du geschrieben hast, bekomme ich auch auf die IOBroker Kiste. Bin echt gespannt ob es funktioniert!

                Gruß und Respekt für deine Programmier-Fähigkeiten.

                HP Microserver Gen8, RPI-4, IoBroker,

                1 Antwort Letzte Antwort
                0
                • K Offline
                  K Offline
                  knopers1
                  schrieb am zuletzt editiert von
                  #8

                  hi,

                  ich habe ein Sketch auf dem Wemo installiert.

                  Mit CUxD ein Geraet vom Typ (28)System/Exec/Schalter erstellt, und an der CCU im Posteingang konfiguriert:

                  Danach unter dem erstelltem Gerät / CUX2801001:1)

                  SWITCH|CMD_SHORT: /usr/local/addons/cuxd/curl -s -m 5 'http://192.168.1.104/R1-0' // für AUS

                  SWITCH|CMD_LONG: /usr/local/addons/cuxd/curl -s -m 5 'http://192.168.1.104/R1-1' // für EIN

                  eigetragen. Jetzt lässt sich der Wemo schalten, und eine Statusanzeige gibt es auch!

                  Das sind die Befehle, die ich nutzen kann … Erstelltes CUxD Gerät unter CCU taucht auch unter IObroker (Objekte/hm-rpc) auf. Leider steht dort nichts, was man verwerten könnte. Wieso? (Kein Datenpunkt)... Ich habe gehofft, dass ich dadurch die komplizierten Skripte vom Paul mir ersparen kann... war wohl nichts... :?

                  HTTP-Befehlsuebersicht:

                  "http://192.168.1.104/cmd?R1=0" schaltet das Relais mit Statusmeldung an CUxD aus

                  "http://192.168.1.104/cmd?R1=1" schaltet das Relais mit Statusmeldung an CUxD ein

                  "http://192.168.1.104/cmd?R1=0&transmit=0" schaltet das Relais ohne Statusmeldung an CUxD aus

                  "http://192.168.1.104/cmd?R1=1&transmit=0" schaltet das Relais ohne Statusmeldung an CUxD ein

                  "http://192.168.1.104/cmd?R1=state" gibt den Schaltzustand des Relais als Logikwert ("0" oder "1") zurueck

                  "http://192.168.1.104/cmd?CUxD=0" Statusmeldung an CUxD bis zum reboot ausschalten

                  "http://192.168.1.104/cmd?CUxD=1" Statusmeldung an CUxD einschalten

                      /*
                      *  WeMos-Schaltaktor (mit Status-Meldung an CUxD und Taster-Support)
                      *
                      *  Getesteter Aufbau:
                      *     WeMos D1 mini
                      *     Relay Shield mini
                      *     Pin-Belegung:
                      *        D1: Steuerleitung Relais
                      *        D2: Taster-Öffner
                      */
                  
                      #include <esp8266wifi.h>#include <esp8266webserver.h>// ******* Netzwerkeinstellungen, bitte anpassen! *******
                      const char* ssid     = "o2 DSL"; // SSID des vorhandenen WLANs
                      const char* password = "Rxxxxxxxxxxx"; // Passwort für das vorhandene WLAN
                      const char* host = "192.168.1.70"; // IP-Adresse der CCU
                      IPAddress ip(192,168,1,104); // feste IP-Adresse für den WeMos
                      IPAddress dns_ip(192,168,1,001); // Adresse des DNS servers
                      IPAddress gateway(192,168,1,001); // IP-Adresse des WLAN-Gateways
                      IPAddress subnet(255,255,255,0);  // Subnetzmaske
                  
                      // ******* Einstellungen für CUxD, bitte anpassen! *******
                      String transmit_state_R1 = "ja"; // ja/nein
                      String CUxD_Geraet = "CUX2801001:1"; // SN:Kanal
                  
                      // Definition der Ports ....
                      const int relay_R1 = D1 ;
                      const int switch_R1 = D2 ;
                  
                      // virtuelle CCU
                      String virtual_CCU = "ja"; // ja/nein
                  
                      // ab hier muß eigentlich nichts mehr geändert werden.....
                  
                      // ******* Einstellungen HTML *******
                      String HTML_title = "WeMos Schaltaktor";
                      String HTML_background_color = "0D4C75"; //0D4C75
                      String HTML_title_color = "C9C9C9"; //9A916C
                      String HTML_text_color = "FFFFFF";
                      String HTML_color1 = "CECECE";
                      String HTML_color2 = "9A916C";
                  
                      ESP8266WebServer server(80); // Webserver initialisieren auf Port 80
                      WiFiServer server2(8181);
                  
                      String Version = "1.2";
                      String Status = "0";
                      String Status_alt = "0";
                      String Status_Aenderung = "nein";
                      String Taster = "unbekannt";
                      String action = "0";
                      String transmit_state = "ja";
                  
                      String HTML_head = "
                  
                  ## " + HTML_title + "
                  
                  ";
                      String HTML_end = "";
                      String HTML_style = "style='background-color: #" + HTML_background_color +"; color: #" + HTML_text_color +";' alink='#" + HTML_color2 +"' link='#" + HTML_color1 +"' vlink='#" + HTML_color1 +"'";
                  
                      String zeitstempel() { // Betriebszeit als Stunde:Minute:Sekunde
                        char stempel[10];
                        int lfdStunden = millis()/3600000;
                        int lfdMinuten = millis()/60000-lfdStunden*60;
                        int lfdSekunden = millis()/1000-lfdStunden*3600-lfdMinuten*60;
                        sprintf (stempel,"%03d:%02d:%02d", lfdStunden, lfdMinuten, lfdSekunden);
                        return stempel;
                      }
                  
                      void status_aktuallisieren(){
                        if (digitalRead(relay_R1) == HIGH) {Status = "1";}
                        if (digitalRead(relay_R1) == LOW) {Status = "0";}
                      }
                  
                      void set_CUxD() {
                        String meldung = "";
                        WiFiClient client; // Webclient initialisieren
                        if (!client.connect(host, 8181)) { // mit dem CCU-Port 8181 verbinden
                          Serial.println(" Fehler: Verbindung zur CCU konnte nicht aufgebaut werden");
                          delay(50);
                          return;
                        }
                        meldung = meldung +"GET /WeMos.exe?state=dom.GetObject('CUxD." + CUxD_Geraet + ".SET_STATE').State('" + Status + "')";
                        client.println(meldung); // Daten an CCU melden
                      }
                  
                      void root() { // bei Aufruf des Root-Verzeichnisses
                        String HTML_content = "";
                        String button_text = "null";
                        String button_color = "FFD06E";
                        String button = "" + button_text +"";
                        String HTML_start = "<title>" + HTML_title + "</title>";
                        String temp = zeitstempel();
                        String WeMos_ip = WiFi.localIP().toString();
                        HTML_content = HTML_start + HTML_head;
                        if (digitalRead(relay_R1) == HIGH) {
                        button_text = "eingeschalten";
                        button_color = "70E670";
                        button = "" + button_text +"";
                        HTML_content = HTML_content + "**Status: [" + button +"](http://" + WeMos_ip + "/cmd?R1=0)**
                  
                  ";
                        }
                        else {
                        button_text = "ausgeschalten";
                        button_color = "A8A8A8";
                        button = "" + button_text +"";
                        HTML_content = HTML_content + "**Status: [" + button +"](http://" + WeMos_ip + "/cmd?R1=1)**
                  
                  ";
                        }
                        HTML_content = HTML_content + "Betriebszeit: _" + temp + " (Std:Min:Sek)_
                  ";
                        HTML_content = HTML_content + "Verbunden mit: _" + ssid + "_
                  ";
                        int rssi = WiFi.RSSI();
                        HTML_content = HTML_content + "Signalstaerke: _" + String(rssi) + " dBm_
                  
                  ";
                        HTML_content = HTML_content + "**[Hilfe](http://" + WeMos_ip + "/help)**";
                        HTML_content = HTML_content + "<iframe name="answer_wemos" frameborder="no" height="0" width="0">Sorry, no frames.</iframe>";
                        server.send(300, "text/html", HTML_content + HTML_end);
                        delay(150);
                      }
                  
                      void help() {
                      String HTML_content = "";
                      String HTML_start = "<title>" + HTML_title + "</title>";
                      String WeMos_ip = WiFi.localIP().toString();
                        HTML_content = HTML_start + HTML_head;
                        HTML_content = HTML_content + "**Schaltaktor mit Taster und Statusmeldung an CUxD (28)exec, CCU-RemotePC kompatibel";
                        HTML_content = HTML_content + "   Version: _" + Version + "_**";
                        HTML_content = HTML_content + "
                  
                  ### Konfiguration fuer R1:
                  
                  ";
                        HTML_content = HTML_content + "*   Status senden: _" + transmit_state_R1 + "_";
                        HTML_content = HTML_content + "*   CUxD-Geraet: _" + CUxD_Geraet + "_";
                        HTML_content = HTML_content + "*   Taster-Typ: _" + Taster + "_
                  ";
                        HTML_content = HTML_content + "
                  
                  ### HTTP-Befehlsuebersicht:
                  
                  ";
                        HTML_content = HTML_content + "*   \"http://" + WeMos_ip + "/cmd?R1=0\" schaltet das Relais mit Statusmeldung an CUxD aus";
                        HTML_content = HTML_content + "*   \"http://" + WeMos_ip + "/cmd?R1=1\" schaltet das Relais mit Statusmeldung an CUxD ein";
                        HTML_content = HTML_content + "*   \"http://" + WeMos_ip + "/cmd?R1=0&transmit=0\" schaltet das Relais ohne Statusmeldung an CUxD aus";
                        HTML_content = HTML_content + "*   \"http://" + WeMos_ip + "/cmd?R1=1&transmit=0\" schaltet das Relais ohne Statusmeldung an CUxD ein";
                        HTML_content = HTML_content + "*   \"http://" + WeMos_ip + "/cmd?R1=state\" gibt den Schaltzustand des Relais als Logikwert (\"0\" oder \"1\") zurueck";
                        HTML_content = HTML_content + "*   \"http://" + WeMos_ip + "/cmd?CUxD=0\" Statusmeldung an CUxD bis zum reboot ausschalten";
                        HTML_content = HTML_content + "*   \"http://" + WeMos_ip + "/cmd?CUxD=1\" Statusmeldung an CUxD einschalten
                  ";
                        HTML_content = HTML_content + "
                  
                  ### CUxD-Integration:
                  
                  ";   
                        HTML_content = HTML_content + "*   Mit CUxD ein Geraet vom Typ (28)System/Exec/Schalter erstellen";
                        HTML_content = HTML_content + "*   In der CCU im Posteingang konfigurieren:
                      ";
                            HTML_content = HTML_content + "   SWITCH|CMD_SHORT: /usr/local/addons/cuxd/curl -s -m 5 \'http://" + WeMos_ip + "/R1-0\'
                      ";
                            HTML_content = HTML_content + "   SWITCH|CMD_LONG: /usr/local/addons/cuxd/curl -s -m 5 \'http://" + WeMos_ip + "/R1-1\'
                  
                  ";
                  
                        HTML_content = HTML_content + "
                  
                  ### [CCU-RemotePC](http://ccu-remotepc.dragonfly.at/) kompatibel:
                  
                  ";   
                        HTML_content = HTML_content + "*   \"virtual_CCU\" im Sketch auf \"ja\" stellen";
                        HTML_content = HTML_content + "*   via TrayControl in CCU-RemotePC folgendes Geraet erstellen:
                      ";
                            HTML_content = HTML_content + "   Plattform: CCU; Geraete Gruppe: Switch; Geraetetyp: CUxDAktor;
                      ";
                            HTML_content = HTML_content + "   CCU IP-Adresse: " + WeMos_ip + "; SN:Kanal: WeMos00000:1";
                        HTML_content = HTML_content + "*   virtuelle CCU aktiv: _" + virtual_CCU + "_
                  ";
                        HTML_content = HTML_content + "
                  **[zurueck](http://" + WeMos_ip + ")**
                  ";
                        server.send(300, "text/html", HTML_content + HTML_end);
                      }
                  
                      void turn_on() {
                        digitalWrite(relay_R1, HIGH);
                        Serial.println("on");
                      }
                  
                      void turn_off() {
                        digitalWrite(relay_R1, LOW);
                        Serial.println("off");
                      }
                  
                      void action_1() { //keinen status senden
                        String aktor_status = "unbekannt";
                        if (action == "1") {turn_on(); aktor_status = "eingeschalten";}
                        if (action == "0") {turn_off(); aktor_status = "ausgeschalten";}
                        Status_alt = action;
                        status_aktuallisieren();
                        server.send(200, "text/plain", "WeMos-Schaltaktor ist "+ aktor_status +", keine Meldung an CUxD");
                      }
                  
                      void action_2() { //status senden
                        String aktor_status = "unbekannt";
                        if (action == "1") {turn_on(); aktor_status = "eingeschalten";}
                        if (action == "0") {turn_off(); aktor_status = "ausgeschalten";}
                        Status_alt = action;
                        status_aktuallisieren();
                        if (transmit_state == "ja") {set_CUxD();}
                        server.send(200, "text/plain", "WeMos-Schaltaktor ist "+ aktor_status +", Meldung an CUxD");
                      }
                  
                      void get_state() {
                        String temp = zeitstempel();
                        status_aktuallisieren();
                        server.send(200, "text/plain", Status);
                        delay(100);
                        Serial.println(zeitstempel() + " ueber HTTP Status gemeldet");
                      }
                      void get_state_CCU() {
                        String CCU_state = "null";
                        String temp = zeitstempel();
                        status_aktuallisieren();
                        if (Status == "0") {CCU_state = "<state>false</state>";} else {CCU_state = "<state>true</state>";}
                        server.send(200, "text/plain", CCU_state);
                        delay(100);
                        Serial.println(zeitstempel() + " ueber HTTP Status gemeldet");
                      }
                  
                      void server_2() {
                       // Check if a client has connected
                        WiFiClient client = server2.available();
                        if (!client) {
                          return;
                        }
                  
                        // Wait until the client sends some data
                        Serial.println("new client");
                        while(!client.available()){
                          delay(1);
                        }
                  
                        // Read the first line of the request
                        String request = client.readStringUntil('\r');
                        Serial.println(request);
                        client.flush();   
                  
                        // Match the request
                        if (request.indexOf("=dom.GetObject('CUxD.WeMos00000:1.STATE').State(1)") != -1) {action = "1"; action_1();}
                        if (request.indexOf("=dom.GetObject%28%27CUxD.WeMos00000%3A1.STATE%27%29.State%281%29") != -1) {action = "1"; action_1();}   
                  
                        if (request.indexOf("=dom.GetObject('CUxD.WeMos00000:1.STATE').State(0)") != -1){action = "0"; action_1();}
                        if (request.indexOf("=dom.GetObject%28%27CUxD.WeMos00000%3A1.STATE%27%29.State%280%29") != -1) {action = "0"; action_1();}
                  
                        if (request.indexOf("=dom.GetObject('CUxD.WeMos00000:1.STATE').Value()") != -1){get_state();}
                        if (request.indexOf("=dom.GetObject%28%27CUxD.WeMos00000%3A1.STATE%27%29.Value%28%29") != -1) {get_state();}
                  
                        // Return the response
                        client.println("HTTP/1.1 200 OK");
                        client.println("Content-Type: text/xml");
                        client.println(""); //  do not forget this one
                        client.print("<xml><state>");
                  
                        if(Status == "1") {
                          client.print("true");
                        } else {
                          client.print("false");
                        }
                          client.print("</state></xml>");
                  
                        delay(1);
                        Serial.println("Client disconnected");
                        Serial.println("");
                      }
                  
                      void setup() {
                        pinMode(relay_R1, OUTPUT); // Relais-Pin als Ausgang setzen
                        pinMode(switch_R1, INPUT_PULLUP); // Taster zum schalten
                  
                        // Seriellen Monitor für Kontrollausgaben öffnen
                        Serial.begin(115200);
                        Serial.println("");
                        Serial.println("WeMos-Schaltaktor");
                      //WiFi.mode(WIFI_STA);
                        // WLAN-Verbindung herstellen
                        WiFi.config(ip, dns_ip, gateway, subnet); // auskommentieren, falls eine dynamische IP bezogen werden soll
                        WiFi.begin(ssid, password);
                        Serial.print("Verbindungsaufbau");
                  
                        // Verbindungsaufbau abwarten
                        byte maxwait = 30;
                        while ( (WiFi.status() != WL_CONNECTED) && (maxwait > 0) ) {
                          delay(500);
                          maxwait--;
                          Serial.print(".");
                          }
                        if (WiFi.status() != WL_CONNECTED) {Serial.println("keine Verbindung");}
                        else{
                          Serial.println(" erfolgreich!");
                          Serial.println("");
                          Serial.print("Verbunden mit: ");
                          Serial.println(ssid);
                          Serial.print("Signalstaerke: ");
                          int rssi = WiFi.RSSI();
                          Serial.print(rssi);
                          Serial.println(" dBm");
                          Serial.print("IP-Adresse: ");
                          Serial.println(WiFi.localIP());
                          Serial.println("");
                          }
                          server.on("/", root);
                        server.on("/R1-1", [](){action = "1"; action_1();});
                        server.on("/R1-0", [](){action = "0"; action_1();});
                          server.on("/cmd", cmd);
                          server.on("/help", help);
                  
                        // HTTP-Server starten
                        server.begin();
                        Serial.println(zeitstempel() + " HTTP-Server gestartet");
                        if (transmit_state == "ja") {set_CUxD();}
                        int sensorVal = digitalRead(switch_R1);
                       // Serial.println(sensorVal);
                        if (sensorVal == HIGH) {Taster = "schliesser";} else {Taster = "oeffner";}
                  
                        // Start server2
                        if (virtual_CCU == "ja") {server2.begin(); Serial.println(zeitstempel() + " virtuelle CCU gestarted");}
                      }
                  
                      void cmd() { // bei Aufruf von "../cmd"  R1%3D0 R1%3D1
                  
                        String CUxD = server.arg("CUxD");
                        String R1 = server.arg("R1");
                        String transmit = server.arg("transmit");
                  
                        if (R1 == "0" && transmit == "0") {action = "0"; action_1();}
                        else if (R1 == "1" && transmit == "0") {action = "1"; action_1();}
                        else if ( (R1 == "0" && transmit == "1") || (R1 == "0") ) {action = "0"; action_2();}
                        else if ( (R1 == "1" && transmit == "1") || (R1 == "1") ) {action = "1"; action_2();}
                        else if (R1 == "state") {get_state();}
                        else if (CUxD == "1") {transmit_state_R1 = "ja"; help(); Serial.println("CUxD-Meldungen: ja");}
                        else if (CUxD == "0") {transmit_state_R1 = "nein"; help(); Serial.println("CUxD-Meldungen: nein");}
                        else {
                         help();
                              delay(100);
                              Serial.println(zeitstempel() + " Help");
                        }
                      }
                  
                      void oeffner(){
                        int sensorVal = digitalRead(switch_R1);
                        if (sensorVal == HIGH && Status == "0") {turn_on(); delay(200);}
                        if (sensorVal == HIGH && Status == "1") {turn_off(); delay(200);}
                        if (sensorVal == LOW) {
                          status_aktuallisieren();
                          if (Status_alt != Status) {Status_alt = Status; Status_Aenderung = "ja";} else Status_Aenderung = "nein";
                          if (transmit_state == "ja" && Status_Aenderung == "ja") {set_CUxD();}
                        }
                      }
                  
                      void schliesser(){
                        int sensorVal = digitalRead(switch_R1);
                        if (sensorVal == LOW && Status == "0") {turn_on(); delay(200);}
                        if (sensorVal == LOW && Status == "1") {turn_off(); delay(200);}
                        if (sensorVal == HIGH) {
                          status_aktuallisieren();
                          if (Status_alt != Status) {Status_alt = Status; Status_Aenderung = "ja";} else Status_Aenderung = "nein";
                          if (transmit_state == "ja" && Status_Aenderung == "ja") {set_CUxD();}
                        }
                      }
                  
                      void loop() {
                        if ( (WiFi.status() != WL_CONNECTED) || (transmit_state_R1 != "ja")  ) {transmit_state = "nein";} else {transmit_state = "ja";}
                        if (Taster == "oeffner") {oeffner();}
                        else if (Taster == "schliesser") {schliesser();}
                  
                        server.handleClient(); // auf HTTP-Anfragen warten
                  
                         if (virtual_CCU == "ja") {server_2();}
                  
                      }</esp8266webserver.h></esp8266wifi.h> 
                  

                  1526_iklei.jpg
                  1526_unbenannt2.png
                  1526_unbenannt5.png
                  1526_unbenannt6.png

                  HP Microserver Gen8, RPI-4, IoBroker,

                  1 Antwort Letzte Antwort
                  0
                  • K Offline
                    K Offline
                    knopers1
                    schrieb am zuletzt editiert von
                    #9

                    @Paul Hilfeeeeee :mrgreen:

                    "http://192.168.1.104/cmd?R1=0" schaltet das Relais mit Statusmeldung an CUxD aus

                    "http://192.168.1.104/cmd?R1=1" schaltet das Relais mit Statusmeldung an CUxD ein

                    "http://192.168.1.104/cmd?R1=state" gibt den Schaltzustand des Relais als Logikwert ("0" oder "1") zurueck

                    Das sind die Befehle um den Wemo über Http zu schalten. Mit State kann ich den Zustand 0 oder 1 erfragen…

                    Wie bekomme ich nen Datenpunkt jetzt unter IOBroker? Kannst Du mir ein Beispiel posten? Mit welchem Widget kann ich den Wemo schalten... Evtl. kann kir jemand dazu was sagen. Der Paul nutzt kein VIS ! :cry:

                    HP Microserver Gen8, RPI-4, IoBroker,

                    1 Antwort Letzte Antwort
                    0
                    • HomoranH Nicht stören
                      HomoranH Nicht stören
                      Homoran
                      Global Moderator Administrators
                      schrieb am zuletzt editiert von
                      #10

                      Wenn du das hier meinst:

                      http://forum.iobroker.net/viewtopic.php … gen#p63973

                      Gruß

                      Rainer

                      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                      1 Antwort Letzte Antwort
                      0
                      • K Offline
                        K Offline
                        knopers1
                        schrieb am zuletzt editiert von
                        #11

                        schwer zu sagen..Hormoran :mrgreen:

                        Ich suche nen Weg ein Gerät was über die Http Befehle sich schalten lässt, unter Vis einzubinden.

                        Ich dachte an ein Widget was ich im Vis einbauen könnte…Die Wemos geben sogar den Schaltzustand ab. Nur wie oder womit am einfachsten???

                        Die Scripte vom Paul vesrtehe ich nicht. Ich muß erstmal ein Anfang finden. Nur wo und womit soll ich anfangen?

                        HP Microserver Gen8, RPI-4, IoBroker,

                        1 Antwort Letzte Antwort
                        0
                        • ruhr70R Offline
                          ruhr70R Offline
                          ruhr70
                          schrieb am zuletzt editiert von
                          #12

                          Du kannst ein Datenpunkt als Trigger verwenden, den Du dann über VIS "schaltest".

                          Ein kleines Skript reagiert dann auf diese Schaltvorgänge und schickt Deine http-Befehle an den Wemos.

                          Adapter: Fritzbox, Unify Circuit
                          Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                          1 Antwort Letzte Antwort
                          0
                          • K Offline
                            K Offline
                            knopers1
                            schrieb am zuletzt editiert von
                            #13

                            hmm, meinst Du so etwas? siehe Bild. Ein Datenpunkt, was bereits schon vorhanden ist, nutze ich als Trigger um den Befehl für Wemo abzusetzen….

                            Das geht... Brauche zwei Blokly Scripte um es EIN und AUS zu schalten...
                            1526_unbenann9.png

                            HP Microserver Gen8, RPI-4, IoBroker,

                            1 Antwort Letzte Antwort
                            0
                            • ruhr70R Offline
                              ruhr70R Offline
                              ruhr70
                              schrieb am zuletzt editiert von
                              #14

                              probier mal bitte dieses Javascript:

                              var http = require('http'); 
                              
                              var cmd = "/R1-0"; // Kommandos in der URL nach der Host-Adresse
                              var data = 'Hier können Werte im Body übergeben werden';
                              
                              var options = {
                                  host: '192.168.1.104',
                                  port: 80,
                                  path: cmd,
                                  method: 'GET',
                                  headers: {
                                      'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36',
                                      'Content-Type': 'text/plain',
                                      'Content-Length': data.length
                                  }
                              };
                              
                              function httpReq(cmd,data) { // schickt an ein Alexa-Gerät (device) ein Kommando (data) per https-Request / Daten im Body
                                  cmd = cmd;
                                  var req = http.request(options, function(res) {
                                  log("http Status: " + res.statusCode);
                                  log('HEADERS: ' + JSON.stringify(res.headers), (res.statusCode != 200 ? "warn" : "info")); // Header (Rückmeldung vom Webserver)
                              
                                  var bodyChunks  = [];
                                  var chunkLine   = 0;
                                  res.on('data', function(chunk) {
                                      chunkLine = chunkLine + 1;
                                      // 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);
                                      // ...und/oder das Gesamtergebnis (body).
                                      log("body: " + body);
                                      });
                                  });
                              
                                  req.on('error', function(e) { // Fehler abfangen
                                      log('ERROR: ' + e.message,"warn");
                                  });
                              
                                  log("Data to request body: " + data);
                                  // write data to request body
                                  (data ? req.write(data) : log("Daten: keine Daten im Body angegeben angegeben"));
                                  req.end();
                              
                              }
                              
                              // ********
                              
                              httpReq("/R1-0",data);
                              setTimeout(function(){ httpReq("/R1-1",data); }, 3000);
                              setTimeout(function(){ httpReq("/R1-0",data); }, 6000);
                              setTimeout(function(){ httpReq("/R1-1",data); }, 9000);
                              
                              

                              wenn es klappt, könnender weitermachen.

                              Adapter: Fritzbox, Unify Circuit
                              Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                              1 Antwort Letzte Antwort
                              0
                              • K Offline
                                K Offline
                                knopers1
                                schrieb am zuletzt editiert von
                                #15

                                Danke Dir,

                                ich habe ein Datenpukt erstellt. (ganz oben Garagenlicht)

                                mit dem Blockly setze ich auch den Zustand false oder true… Das funktioniert schon mal. Allerdings weiß ich noch nicht was ich damit anfangen soll...

                                Du hast den Skripz in java geschrieben. Demnach muß ich nach Java umstellen. Kannst Du dir mal die Meldung dort ansehen?

                                Dort steht etaws, dass ich nicht mehr auf Blockly zurück schalten dürfte. Dies wäre echt eine Katastrophal für meine Alarmanlage :o
                                1526_unbenan10.png
                                1526_unbenannt11.png
                                1526_unbenannt12.png

                                HP Microserver Gen8, RPI-4, IoBroker,

                                1 Antwort Letzte Antwort
                                0
                                • ruhr70R Offline
                                  ruhr70R Offline
                                  ruhr70
                                  schrieb am zuletzt editiert von
                                  #16

                                  @knopers1:

                                  Du hast den Skripz in java geschrieben. Demnach muß ich nach Java umstellen. Kannst Du dir mal die Meldung dort ansehen?

                                  Dort steht etaws, dass ich nicht mehr auf Blockly zurück schalten dürfte. Dies wäre echt eine Katastrophal für meine Alarmanlage :o `

                                  Nur das Skript ist in Javascript.

                                  Du musst ein neues Skript anlegen und nur dieses von Blockly auf Javascript umstellen.

                                  Dort kopierst Du dann das Skript rein und startest es.

                                  Wenn alles funktioniert, sollte das Skript dann Deinen Demos aus, 3 Sek. später ein, 3 Sek. später aus und dann weitere drei Sekunden wieder einschalten.

                                  Wenn das ohne Fehler klappt, können wir weitermachen.

                                  Ich denke, die Meldung aus Deinem Screenshot kommt, weil Di ein Blockly-Skript umschalten wolltest. Es wird dann als Javascript angezeigt. Der umgekehrte Weg (zurück zu Blockly / und zwar nur für dieses Skript) ist wohl nicht möglich.

                                  Adapter: Fritzbox, Unify Circuit
                                  Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                                  1 Antwort Letzte Antwort
                                  0
                                  • K Offline
                                    K Offline
                                    knopers1
                                    schrieb am zuletzt editiert von
                                    #17

                                    Danke für Deine Bemühungen….

                                    Ich konnte es mittels eines Adapters Hm-rpc.1 mit Hilfe von Hormoran und dem Kollegen Klassisch den Wemo in den IOBroker einzubinden. Jetzt wo es unter IOBroker unter Objekte aufgetaucht ist, lässt sich das Teil mit einem Widget ansteuern und sogar mit der Zustandsanzeige... Jetzt versuche ich es im Cloud vom Alexa einzubinden. Das ist aber eine andere Baustelle... danke Dir und dem Paul für die Hilfe!
                                    1526_unbenannt16.png

                                    HP Microserver Gen8, RPI-4, IoBroker,

                                    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

                                    590

                                    Online

                                    32.7k

                                    Benutzer

                                    82.3k

                                    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