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. Praktische Anwendungen (Showcase)
  4. Web-IO Digital 12xIn, 12xOut #57630 / Anbindung

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

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

Web-IO Digital 12xIn, 12xOut #57630 / Anbindung

Geplant Angeheftet Gesperrt Verschoben Praktische Anwendungen (Showcase)
14 Beiträge 3 Kommentatoren 2.3k Aufrufe 1 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.
  • M Offline
    M Offline
    malc
    schrieb am zuletzt editiert von
    #1

    Hallo,

    ich bastel gerade an die Unterstützung für die WUT WebIO.

    Das Script unterstützt Status der Ein/Ausgänge sowie Sync der Counter mit optionalem löschen auf der WeBIO. Dazu könne die Ausgänge mittels Datenpunkt geschaltet werden und dabei auch ein Timeout gesetzt werden. "Zeitschaltung".

    Wenn sich jemand dafür interessiert kann ich auch die weitere Entwicklung hier einfügen. Die Ausgänge müssen in der WebIO zum schalten mittels HTTP eingeschaltet werden, sonst wird nur der aktuelle Status angezeigt.

    Die Geräte könnten auch mittels direkter TCP Komunikation gesteuert werden, doch ist das für meine Anwendung nicht wichtig.

    Ich habe an dem Gerät die Strom, Wasser und Gaszähler sowie Statusmelder meiner 300km entfernten Immobilie angeschlossen und binde die über eine VPN Verbindung ein. Natürlich könnte ich in der Immobilie auch einen kleine Pi werfen, doch so brauche ich keine lokale Technik warten.

    Malc

    6536_e-57630-15-piww-000.jpg

    // WebIO - WUT WebIO #57631 Anbindung 
    // Autor: Malc -------------------------
    // Version 0.1  02.09.2018 - Initialversion
    // Version 0.2  03.09.2018 - +Input
    // Version 0.3  05.09.2018 - BugFix
    // 
    // Erweiterte Funktionen im Vergleich zu  0.1
    //  - Eingänge werden dargestellt
    //  - Counter werden gelesen
    //  - Neuer Datenpunkt input.<0-11>.clearcounter
    //     Wenn true wird nach auslesen der Counter auf der WebIO zurückgesetz
    //     Im input.<0-11>.counter  steht dann der zuletzt gelesene Wert!!
    //
    // Erweiterte Funktionen im Vergleich zu  0.2
    //  - Übler Bug behoben, Output Setzen wurde zur Disco
    //
    // Erweiterte Funktionen im Vergleich zu  0.3
    // - BugFix:  Kommunikation bei gesetztem Passwort auf der WebIO gefixt 
    // 
    
    var WebIOName             = 'RZ1';
    var BackGroundSyncEnabeld = true;
    
    var WebIO = "RZ1";
    var Input = [];
    
    Init(WebIOName); 
    
    if (false) { /* Das ist nur einmalig nötig bzw. direkt mittels Admin / Objekte setzen */
        setState('WebIO.' + WebIOName + '.host'              ,          '192.168.123.45'                     );
        setState('WebIO.' + WebIOName + '.port'              ,          80                                  );
        setState('WebIO.' + WebIOName + '.password'          ,          'Geheim'                                  );
        setState('WebIO.' + WebIOName + '.interval'          ,          5000                                );
        setState('WebIO.' + WebIOName + '.input.0.name'         ,   'GAS zähler'                            );
        setState('WebIO.' + WebIOName + '.input.0.clearcounter' ,   true                                    );
        etState('WebIO.' + WebIOName + '.output.2.name'     ,         'Bunkertür'                 );
    }
    
    Interval =  getState('WebIO.' + WebIOName + '.interval').val;
    
    if(Interval > 0 ) {
        setInterval(function() {  
            GetInPutCounter(WebIOName);    
            GetOutPutState(WebIOName)
            GetInPutState(WebIOName)
    
        }, Interval);
    
    } 
    
    // Direkt bei Start alles einmal abfragen, kommt aber eh duch  <interval>GetInPutCounter(WebIOName);
    GetOutPutState(WebIOName);    
    GetInPutState(WebIOName);
    
    function GetInPutCounter(WebIOName) {
        // Alle Counter lesen
        // -> http://192.168.123.45/counter?PW= <pwd>// <- counter;236;14356;0;0;0;0;14;62;358;188829;12977;0
    
        var WebIOHost       = getState('WebIO.' + WebIOName + '.host' ).val;
        var WebIOPort       = getState('WebIO.' + WebIOName + '.port' ).val;
        var WebIOPassword   = getState('WebIO.' + WebIOName + '.password' ).val;
        var Url             = 'http://' + WebIOHost + ':' + WebIOPort ;
        var Message         = 'GetInPutCounter [' + WebIOName + '] ';
        var Body            = '';
        var Port            = 0;
        var t               = '';
        var PortName        = '';
        var State           = false;
    
        // log(Message + ' Task');
    
        t = Url + '/counter?PW=' + WebIOPassword + '&';
        request({url: t, timeout: 2000}, function (err, stat, Body){
            if (Body) {
                 if (Body.indexOf(";") >= 0) {
                    Body = Body.split(";");
    
                    for (Port = 0; Port <= 11; Port++) {
                        t  = 'WebIO.' + WebIOName + '.input.' + Port ;
    
                        PortName     = getState(t + '.name'         ).val;
                        ClearCounter = getState(t + '.clearcounter' ).val;
                        Counter      = getState(t + '.counter'      ).val;
                        Current      = parseInt(Body[Port + 1]);                            // Aktuell  0 = "counter;""
    
                        if (!ClearCounter) {                                                 // Sync
                            if(Counter != Current ) {
                                log(Message + '[' + PortName + ']  Sync -> ' + Current);
                                setState(t + '.counter', Current);
                            }
                        } else {
                            if(Current > 0 ) {
                                log(Message + '[' + PortName + ']  Set -> ' + Current);
                                setState(t + '.counter', Current);
    
                                t = Url + '/counterclear' + Port +  ((WebIOPassword) ?  '?PW=' + WebIOPassword : '') + '&';
                                request({url: t, timeout: 2000}, function (err, stat, Body){
                                });
    
                            }   
                        }
                    }
                }
            } else {
                log(Message + ' <- EMPTY!');
            }
        });
    
    }  
    
    function GetInPutState(WebIOName) {
        var WebIOHost       = getState('WebIO.' + WebIOName + '.host' ).val;
        var WebIOPort       = getState('WebIO.' + WebIOName + '.port' ).val;
        var WebIOPassword   = getState('WebIO.' + WebIOName + '.password' ).val;
        var Url             = 'http://' + WebIOHost + ':' + WebIOPort ;
        var Message         = 'GetInPutState [' + WebIOName + '] ';
        var Body            = '';
        var Port            = 0;
        var t               = '';
        var PortName        = '';
        var State           = false;
    
        // log(Message + ' Task');
    
        t = Url + '/input?PW=' + WebIOPassword + '&';
        request({url: t, timeout: 2000}, function (err, stat, Body){
            if (Body) {
                 if (Body.indexOf(";") >= 0) {
                    Body = Body.split(";");
                    Body = Body[1];
    
                    for (Port = 0; Port <= 11; Port++) {
                        State   = isBitSet(Body, Port);
                        t       = 'WebIO.' + WebIOName + '.input.' + Port + '.state';
    
                        if (getState(t).val !== State) {
                            PortName = getState('WebIO.' + WebIOName + '.input.' + Port + '.name').val;
                            log(Message + '[' + PortName + ']  State -> ' +  State);
                            setState(t, State);
                        }
                    }
                    SetTimeStamp(WebIOName);
                }
            } else {
                log(Message + ' <- EMPTY!');
            }
        });
    
    }  
    
    function GetOutPutState(WebIOName) {
        var WebIOHost       = getState('WebIO.' + WebIOName + '.host' ).val;
        var WebIOPort       = getState('WebIO.' + WebIOName + '.port' ).val;
        var WebIOPassword   = getState('WebIO.' + WebIOName + '.password' ).val;
        var Url             = 'http://' + WebIOHost + ':' + WebIOPort ;
        var Message         = 'GetOutPutState [' + WebIOName + '] ';
        var Body            = '';
        var Port            = 0;
        var t               = '';
        var PortName        = '';
        var State           = false;
    
        if (!BackGroundSyncEnabeld) {
            log(Message +' BackGroundSyncEnabeld Disabeld' );
            return false;
        } 
    
        t = Url + '/output?PW=' + WebIOPassword +  '&';
        request({url: t, timeout: 2000}, function (err, stat, Body){
            if (Body) {
                 if (Body.indexOf(";") >= 0) {
                    Body = Body.split(";");
                    Body = Body[1];
    
                    for (Port = 0; Port <= 11; Port++) {
                        State   = isBitSet(Body, Port);
                        t       = 'WebIO.' + WebIOName + '.output.' + Port + '.state';
    
                        if (getState(t).val !== State) {
                            log (Port + ' ' + State + ' ' + Input[WebIOName + '.' + Port][0]);
                            if (! Input[WebIOName + '.' + Port][0] && Input[WebIOName + '.' + Port][1] == State) {
                                Input[WebIOName + '.' + Port][1] = State;           // Verhindern das GetOutPutState überschreibt!
    
                                PortName = getState('WebIO.' + WebIOName + '.output.' + Port + '.name').val;
                                //log(Message + '[' + PortName + ']  State -> ' +  State);
                                setState(t, State);
                                Input[WebIOName + '.' + Port][0] = false;
                            }
                        }
                    }
                    SetTimeStamp(WebIOName);
                }
            } else {
                log(Message + ' <- EMPTY!');
            }
        });
    
    }  
    
    function SetOutPutState(obj) {
        BackGroundSyncEnabeld = false;
    
        var State           = obj.state.val;
        var Id              = obj.id;
        var ParentId        = Id.split(".").slice(0,-1).join(".");
        var DeviceId        = ParentId.split(".").slice(0,-1).join(".").split(".").slice(0,-1).join(".");
        var Port            = ParentId.substr(ParentId.lastIndexOf(".") +1);
        var PortName        = getState(ParentId + '.name').val;
        var Timeout         = getState(ParentId + '.timeout').val;
    
        var WebIOName       = DeviceId.substr(DeviceId.lastIndexOf(".") +1);
        var WebIOHost       = getState(DeviceId + '.host').val;
        var WebIOPort       = getState(DeviceId + '.port').val;
        var WebIOPassword   = getState(DeviceId + '.password').val;
    
        var Message         = 'SetOutPutState [' + WebIOName + '][' + PortName + '] ';
        var Url             = 'http://' + WebIOHost + ':' + WebIOPort ;
    
        Input[WebIOName + '.' + Port][0] = true;
        Input[WebIOName + '.' + Port][1] = State;           // Verhindern das GetOutPutState überschreibt!
    
        // log(Message +' SET State 1  -> ' + State + ' ' );
    
        Url +=  '/outputaccess' + Port + '?PW=' + WebIOPassword + '&State=' + ((State) ?  'ON' : 'OFF') + '&' ;
    
        request({url: Url, timeout: 2000}, function (err, stat, Body){
            // if (Body) {
    
            //log(Message + 'Called -> ' + Url);
    
            SetTimeStamp(WebIOName);
    
            if (State && Timeout > 0) {
                //log(Message + 'OFF Timeout = ' + Timeout);
                setStateDelayed(Id, false, Timeout);
            }
    
        });
    
        if (State && Timeout >0) {
            //log(Message +' SET State -> ' + false + ' ' + ' in Timeout = ' + Timeout );
            setStateDelayed(Id, false, Timeout);
        }
    
        BackGroundSyncEnabeld = true;
    
    } 
    
    function Init(WebIOName) {
    
        var a = 0;
    
        createState('WebIO.' + WebIOName + '.host' , '', {
          read: true, 
          write: false, 
          name: "Host IP / Name", 
          type: "string",
          def: ''
        });
    
        createState('WebIO.' + WebIOName + '.port' , 0, {
          read: true, 
          write: false, 
          name: "Host Port", 
          type: "number",
          def: 0
        });
    
        createState('WebIO.' + WebIOName + '.password' , '', {
          read: true, 
          write: false, 
          name: "Host password", 
          type: "string",
          def: ''
        });
    
       createState('WebIO.' + WebIOName + '.interval' , 5000, {
          read: true, 
          write: false, 
          name: "Pollint Intervalt", 
          type: "number",
          def: 0
        });
    
        createState('WebIO.' + WebIOName + '.timestamp', "", {
          read: true, 
          write: false, 
          name: "Timestamp", 
          type: "string", 
          unit: "",
          def: ""
        });
    
        for (a = 0; a <= 11; a++) {
        	Input[WebIOName + '.' + a ]  = [false, false];
    
            createState('WebIO.' + WebIOName + '.input.' + a + '.name' , "Input(" + a + ")", {
              read: true, 
              write: true, 
              name: "Name", 
              type: "string",
              def: null
            });
    
            createState('WebIO.' + WebIOName + '.input.' + a + '.counter' , 0, {
              read: true, 
              write: false, 
              name: "Counter", 
              type: "number",
              def: 0
            });
    
            createState('WebIO.' + WebIOName + '.input.' + a + '.clearcounter' , false, {
              read: true, 
              write: true, 
              name: "Clear Counter after Update", 
              type: "boolean", 
              unit: "",
              def: null
            });
    
            createState('WebIO.' + WebIOName + '.input.' + a + '.state' , false, {
              read: true, 
              write: true, 
              name: "Current State", 
              type: "boolean", 
              unit: "",
              def: null
            });   
    
            createState('WebIO.' + WebIOName + '.output.' + a + '.name' , "Output( " + a + ")", {
              read: true, 
              write: true, 
              name: "Name", 
              type: "string",
              def: null 
            }); 
    
            createState('WebIO.' + WebIOName + '.output.' + a + '.state' , false, {
              read: true, 
              write: true, 
              name: "Current State", 
              type: "boolean", 
              unit: "",
              def: null
            });
    
            createState('WebIO.' + WebIOName + '.output.' + a + '.timeout' , 0, {
              read: true, 
              write: true, 
              name: "Timeout", 
              type: "number", 
              unit: "",
              def: 0
            }); 
    
            on({id: 'javascript.0.WebIO.' + WebIOName + '.output.' + a + '.state', change: 'ne'  }, function (obj) { SetOutPutState(obj);});
        }
    
    } 
    
    function SetTimeStamp(WebIOName) {
        var Timestamp       = formatDate(new Date(), "hh:mm:ss DD.MM.JJ");
        setState('WebIO.' + WebIOName + '.timestamp', Timestamp);
    
    }
    
    function isBitSet(hex, bit) {
        // log( parseInt('03FF', 16).toString(2));
    
        var val = parseInt(hex,16);
        return (val & (1 << bit)) !== 0;
    }</pwd></interval> 
    

    Fan von ioBroker!

    <size size="50">und falls ich eine Frage stelle die irgendwo schon mal beantwortet wurde: "Ja, Suchfunktion genutzt, aber keine Lösung gefunden / nicht die richtigen Suchbegriffe gewusst."

    …</size>

    1 Antwort Letzte Antwort
    0
    • S Offline
      S Offline
      stoffel67
      schrieb am zuletzt editiert von
      #2

      SUPER,

      hab das gleiche WEB-IO :)

      Hab die Haustür-Klinkel dran, den Gaszähler (Counter) und über die S0-SS(RS232) einen Stromzähler

      würde mich über eine Integration in ioBroker riesig freuen…

      Mein Adapter: JUNG/GIRA eNet-Adapter

      1 Antwort Letzte Antwort
      0
      • M Offline
        M Offline
        malc
        schrieb am zuletzt editiert von
        #3

        Hallo!

        Das Projekt ist noch am Anfang, ich garantiere für nix :-)

        Update:

        // Erweiterte Funktionen im Vergleich zu 0.1

        // - Eingänge werden dargestellt

        // - Counter werden gelesen

        // - Neuer Datenpunkt input.<0-11>.clearcounter

        // Wenn true wird nach auslesen der Counter auf der WebIO zurückgesetzt

        // Im input.<0-11>.counter steht dann der zuletzt gelesene Wert!!

        Debug View
        6536_bildschirmfoto_2018-09-03_um_10.09.49.png

        Malc

        Fan von ioBroker!

        <size size="50">und falls ich eine Frage stelle die irgendwo schon mal beantwortet wurde: "Ja, Suchfunktion genutzt, aber keine Lösung gefunden / nicht die richtigen Suchbegriffe gewusst."

        …</size>

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

          Update:

          // Erweiterte Funktionen im Vergleich zu 0.2

          // - Üblen Bug behoben, Output Setzen wurde zur Disco

          Und so kann man einen Ausgang blinken lassen:

          setInterval(function() {

          setState("javascript.0.WebIO.RZ1.output.3.state",! getState("javascript.0.WebIO.RZ1.output.3.state").val);

          }, 1000);

          Malc

          Fan von ioBroker!

          <size size="50">und falls ich eine Frage stelle die irgendwo schon mal beantwortet wurde: "Ja, Suchfunktion genutzt, aber keine Lösung gefunden / nicht die richtigen Suchbegriffe gewusst."

          …</size>

          1 Antwort Letzte Antwort
          0
          • S Offline
            S Offline
            stoffel67
            schrieb am zuletzt editiert von
            #5

            so, hab mal dein Script bei mir eingebaut…

            bei dieser Stelle stimmt etwas nicht:

            (WebIOPassword) ?  '?PW=' + WebIOPassword : '') 
            

            ich glaube, es muss immer '?PW=' ausgegeben werden, auch wenn der Passwortstring leer ist…

            Mein Adapter: JUNG/GIRA eNet-Adapter

            1 Antwort Letzte Antwort
            0
            • M Offline
              M Offline
              malc
              schrieb am zuletzt editiert von
              #6

              @stoffel67:

              so, hab mal dein Script bei mir eingebaut…

              bei dieser Stelle stimmt etwas nicht:

              (WebIOPassword) ?  '?PW=' + WebIOPassword : '') 
              

              ich glaube, es muss immer '?PW=' ausgegeben werden, auch wenn der Passwortstring leer ist… `

              Schaue ich mir morgen direkt an, du kannst Recht haben :-)

              Ich hab da bei allen Devices ein Kennwort gesetzt, daher ist mir das nicht aufgefallen. Sollte schnell zu fixen sein. In meiner aktuellen Version habe ich noch so einiges verbessert, das pflege ich dann gleich mit ein.

              Malc

              Fan von ioBroker!

              <size size="50">und falls ich eine Frage stelle die irgendwo schon mal beantwortet wurde: "Ja, Suchfunktion genutzt, aber keine Lösung gefunden / nicht die richtigen Suchbegriffe gewusst."

              …</size>

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

                Update:

                // Erweiterte Funktionen im Vergleich zu 0.3

                // - BugFix: Kommunikation bei gesetztem Passwort auf der WebIO gefixt

                -Es ist tatsächlich so das der Wert "PW=" immer gesetzt werden muss auch wenn kein Passwort vergeben ist

                -Die Logik ist mittlerweile so optimiert das ein Ausgang auch mit werten von <500 msec "blinken" kann. Nicht das es wichtig ist doch ist ein gleichmäßiges Blinken einer Statusleuchte möglich. Ich nutzte das für eine Anzeige Sammelstörung .

                Ich habe mir auch schon mal die "native" TCP Kommunikation angesehen, das hatte ich in meine steinalte Steuerung realisiert. Aber erstens bin ich mit ioBroker in dem Bereich noch nicht fit genug und zweitens habe ich bisher noch keinen Grund gefunden das umzustellen weil alles dank dem ioBroker Konzept mehr als fix und stabil läuft. Da ich auch noch die WebThermometer 8x von Wut habe werde ich mal schauen das ich die auch noch reinbekomme.

                Malc

                Fan von ioBroker!

                <size size="50">und falls ich eine Frage stelle die irgendwo schon mal beantwortet wurde: "Ja, Suchfunktion genutzt, aber keine Lösung gefunden / nicht die richtigen Suchbegriffe gewusst."

                …</size>

                1 Antwort Letzte Antwort
                0
                • S Offline
                  S Offline
                  stoffel67
                  schrieb am zuletzt editiert von
                  #8

                  warum mich das interessiert… :)

                  wie gesagt, ich habe das gleiche (?) WebIO allerdings mit eine Anbindung an einen alten Intel X86 mit WinXP und TCL/TK...

                  alles sehr alt und anfällig...

                  ich will das Ganze jetzt auch mit ioBroker lösen...

                  ich habe z.B. die Haustürklingel an einem Input, der ist allerdings auf "Push" konfiguriert, unter TCL/TK habe ich einen WebServer laufen, der

                  dann ( beim Klinkeln) abhängig vomStatus meines TV (on/Off) entweder das Bild einer Kamera auf den TV bringt oder den TV-Recorder für 30 sec aktiviert.

                  Bei deiner Lösung mit dem 5 sec Polling auf die Inputs, würde ich schon 5 Sec verlieren...

                  hast du angedacht, die Inputs auch auf "Push" umzustellen?

                  ich hoffe, ich habe alles "verständlich" ausgedrückt. :)

                  Mein Adapter: JUNG/GIRA eNet-Adapter

                  1 Antwort Letzte Antwort
                  0
                  • M Offline
                    M Offline
                    malc
                    schrieb am zuletzt editiert von
                    #9

                    @stoffel67:

                    Bei deiner Lösung mit dem 5 sec Polling auf die Inputs, würde ich schon 5 Sec verlieren…

                    hast du angedacht, die Inputs auch auf "Push" umzustellen?

                    ich hoffe, ich habe alles "verständlich" ausgedrückt. :) `

                    Auf Dauer werde ich das vermutlich umbauen auf direkte TCP Kommunikation, aber da muss ich erstmal tiefer in die ioBroker Systemprogrammierung eintauchen. Ich denke aber das du problemlos das Pollintervall hochdrehen kannst.

                    Es würde ja ausreichend nur den Inputpoll anzupassen:

                        setInterval(function() {  
                            GetInPutState(WebIOName)
                        }, 1000);
                    
                    

                    Schau doch mal ob das erträglich schnell ist, wenn wir nicht die einzigen sind die diese Geräte haben würde ich mir dann sicher auch mal die Adapterentwicklung anschauen. Aktuell habe ich in 3 Standorten ingesamt 5 WebIO's im Einsatz.

                    Malc

                    Fan von ioBroker!

                    <size size="50">und falls ich eine Frage stelle die irgendwo schon mal beantwortet wurde: "Ja, Suchfunktion genutzt, aber keine Lösung gefunden / nicht die richtigen Suchbegriffe gewusst."

                    …</size>

                    1 Antwort Letzte Antwort
                    0
                    • S Offline
                      S Offline
                      stoffel67
                      schrieb am zuletzt editiert von
                      #10

                      Hallo malc,

                      hab mir das mal angesehen… bin nicht der geborene JS progger, aber es scheint zu funktionieren... :)

                      var WebIOName = "WuT-WebIO";
                      var WuT_port=85;
                      var net = require('net');
                      
                      var server = net.createServer();  
                      server.on('connection', handleConnection);
                      
                      server.listen(WuT_port, function() {  
                        console.log('server listening to '+ server.address());
                      });
                      
                      var ConvertBase = function (num) {
                              return {
                                  from : function (baseFrom) {
                                      return {
                                          to : function (baseTo) {
                                              return parseInt(num, baseFrom).toString(baseTo);
                                          }
                                      };
                                  }
                              };
                          };
                      
                      function handleConnection(conn) {  
                        var remoteAddress = conn.remoteAddress + ':' + conn.remotePort;
                        //console.log('new client connection from ' + remoteAddress);
                      
                        conn.on('data', onConnData);
                        conn.once('close', onConnClose);
                        conn.on('error', onConnError);
                      
                        function onConnData(d) {
                         // console.log('connection data from: '+ remoteAddress+':'+ d);
                          //conn.write(d);  // nicht zurückschreiben
                      
                          if (d.toString().includes('STOP')) {
                              console.log('Listener stopped from '+remoteAddress);
                              server.close()
                          } 
                          console.log('HEX:'+d.toString('binary'));
                          if (d.toString().includes('input')) {
                              var bindata=d.toString().split(';');
                              console.log(Number(bindata[1])+d.toString())
                              var binout=ConvertBase(bindata[1]).from(16).to(2); // convert HEX -> BIN
                              console.log(binout);
                              var z = binout.length-1;
                                  console.log('Inp '+ z +'  '+binout[0]);
                          setState('WebIO.' + WebIOName + '.input.'+z+'.name'         , true );  
                         } 
                        }
                      
                        function onConnClose() {
                      //    console.log('connection  closed from' + remoteAddress);
                        }
                      
                        function onConnError(err) {
                          console.log('Connection error:'+ remoteAddress +':'+err.message);
                          //server.close();
                        }
                      }
                      
                      

                      damit wird ein INPUT state gesetzt sobald, ein INPUT aktiv wird…

                      Mein Adapter: JUNG/GIRA eNet-Adapter

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

                        Vielen Dank für das Beispiel,

                        ich hatte das damals mal in Visual C programmiert, dein Code werde ich mit ansehen und mal eine neue Version bauen. Allerdings möchte ich beide Kommunikationswege möglich halten, je nach Anbindung!

                        …Sieht schon mal arg simpel aus, was man mit JS / ioBroker alles so machen kann :)

                        Malc

                        @stoffel67:

                        Hallo malc,

                        hab mir das mal angesehen… bin nicht der geborene JS progger, aber es scheint zu funktionieren... :)

                        var WebIOName = "WuT-WebIO";
                        var WuT_port=85;
                        var net = require('net');
                        
                        var server = net.createServer();  
                        server.on('connection', handleConnection);
                        
                        server.listen(WuT_port, function() {  
                          console.log('server listening to '+ server.address());
                        });
                        
                        var ConvertBase = function (num) {
                                return {
                                    from : function (baseFrom) {
                                        return {
                                            to : function (baseTo) {
                                                return parseInt(num, baseFrom).toString(baseTo);
                                            }
                                        };
                                    }
                                };
                            };
                        
                        function handleConnection(conn) {  
                          var remoteAddress = conn.remoteAddress + ':' + conn.remotePort;
                          //console.log('new client connection from ' + remoteAddress);
                        
                          conn.on('data', onConnData);
                          conn.once('close', onConnClose);
                          conn.on('error', onConnError);
                        
                          function onConnData(d) {
                           // console.log('connection data from: '+ remoteAddress+':'+ d);
                            //conn.write(d);  // nicht zurückschreiben
                           
                            if (d.toString().includes('STOP')) {
                                console.log('Listener stopped from '+remoteAddress);
                                server.close()
                            } 
                            console.log('HEX:'+d.toString('binary'));
                            if (d.toString().includes('input')) {
                                var bindata=d.toString().split(';');
                                console.log(Number(bindata[1])+d.toString())
                                var binout=ConvertBase(bindata[1]).from(16).to(2); // convert HEX -> BIN
                                console.log(binout);
                                var z = binout.length-1;
                                    console.log('Inp '+ z +'  '+binout[0]);
                            setState('WebIO.' + WebIOName + '.input.'+z+'.name'         , true );  
                           } 
                          }
                        
                          function onConnClose() {
                        //    console.log('connection  closed from' + remoteAddress);
                          }
                        
                          function onConnError(err) {
                            console.log('Connection error:'+ remoteAddress +':'+err.message);
                            //server.close();
                          }
                        }
                        
                        

                        damit wird ein INPUT state gesetzt sobald, ein INPUT aktiv wird… `

                        Fan von ioBroker!

                        <size size="50">und falls ich eine Frage stelle die irgendwo schon mal beantwortet wurde: "Ja, Suchfunktion genutzt, aber keine Lösung gefunden / nicht die richtigen Suchbegriffe gewusst."

                        …</size>

                        1 Antwort Letzte Antwort
                        1
                        • R Offline
                          R Offline
                          Roelli
                          schrieb am zuletzt editiert von Roelli
                          #12

                          Supergeil!

                          Ich hab auch 3 WEB-IO Geräte.

                          Was muss ich tun, wenn ich 0-Ahnung habe, um das bei mir an's laufen zu bekommen?
                          Passwort und IP Adresse habe ich auf meine Werte geändert.

                          Ich bekommen folgende Fehlermeldung:
                          javascript.0 script.js.Webio compile failed at script.js.Webio:745
                          (wobei 745 die allerletzte Zeile ist)

                          Kann man das nicht einfach mit Blockly progammieren? (dann würde ich es evtl. auch irgendwann verstehen)

                          Hab's mal so probiert... tut's natürlich überhaupt nicht. 0:-)

                          <xml xmlns="http://www.w3.org/1999/xhtml">
                            <block type="on_ext" id="|!p,R~kWe(W:{zM;s|Wo" x="-712" y="-837">
                              <mutation items="1"></mutation>
                              <field name="CONDITION">ne</field>
                              <field name="ACK_CONDITION"></field>
                              <value name="OID0">
                                <shadow type="field_oid" id="u3(^IY.L{?;)w]NIrTj`">
                                  <field name="oid">WEB_IO_192.168.1.Output_0.Output_1</field>
                                </shadow>
                              </value>
                              <statement name="STATEMENT">
                                <block type="controls_if" id="KH*!rCsEC5nOPK8xzyv9">
                                  <mutation elseif="1"></mutation>
                                  <value name="IF0">
                                    <block type="logic_compare" id="$*4nWry8)/w5iQoy$UCj">
                                      <field name="OP">EQ</field>
                                      <value name="A">
                                        <block type="get_value" id="1ZbyC8j};=CTguwEl6lF">
                                          <field name="ATTR">val</field>
                                          <field name="OID">WEB_IO_192.168.1.Output_0.Output_1</field>
                                        </block>
                                      </value>
                                      <value name="B">
                                        <block type="logic_boolean" id="ycK$5%#=1MPZM#e(33!J">
                                          <field name="BOOL">TRUE</field>
                                        </block>
                                      </value>
                                    </block>
                                  </value>
                                  <statement name="DO0">
                                    <block type="request" id="n8Dr(.}Qe)!GH.yiUxaI">
                                      <mutation with_statement="false"></mutation>
                                      <field name="WITH_STATEMENT">FALSE</field>
                                      <field name="LOG"></field>
                                      <value name="URL">
                                        <shadow type="text" id="`{D-$HwW!%t4.pdlipp*">
                                          <field name="TEXT">http://192.168.1.60/outputaccess11?PW=33118&amp;State=ON&amp;</field>
                                        </shadow>
                                      </value>
                                    </block>
                                  </statement>
                                  <value name="IF1">
                                    <block type="logic_compare" id="}IQgNOq~VNB5kndZLNIh">
                                      <field name="OP">EQ</field>
                                      <value name="A">
                                        <block type="get_value" id="$`kn;tPqaRtHq+u)ymQj">
                                          <field name="ATTR">val</field>
                                          <field name="OID">WEB_IO_192.168.1.Output_0.Output_1</field>
                                        </block>
                                      </value>
                                      <value name="B">
                                        <block type="logic_boolean" id="_zUus@P3aQ//A.!!@x^y">
                                          <field name="BOOL">FALSE</field>
                                        </block>
                                      </value>
                                    </block>
                                  </value>
                                  <statement name="DO1">
                                    <block type="request" id="5-SR|,T4}e|CIk-@|nY=">
                                      <mutation with_statement="false"></mutation>
                                      <field name="WITH_STATEMENT">FALSE</field>
                                      <field name="LOG"></field>
                                      <value name="URL">
                                        <shadow type="text" id="r=SYfE{xTq+ZAge*rTP3">
                                          <field name="TEXT">http://192.168.1.60/outputaccess11?PW=33118&amp;State=OFF&amp;</field>
                                        </shadow>
                                      </value>
                                    </block>
                                  </statement>
                                </block>
                              </statement>
                            </block>
                          </xml>
                          

                          NUC6i7KYK M.2 32GB RAM mit Proxmox
                          14 AccessPoints, 5 Switches 115 Adapter, 67913 Objekte, 57954 Zustände,126x Shelly, 26 Thermostate, Fire Tablets, DMX, USV, 18x echodot, 9xKlima, 4x heizung, beamer, 6x IP Speed dome, AiOnTheEdge, Tasmota Wemos, Fingerabdrucksensoren, VOIP TFE, Türsteuerung, BMZ,EMA

                          1 Antwort Letzte Antwort
                          0
                          • S Offline
                            S Offline
                            stoffel67
                            schrieb am zuletzt editiert von
                            #13

                            also bei mir gibt's keine Zeile 745
                            und woher stammt das XML ( ist das aus Blockly)?

                            Mein Adapter: JUNG/GIRA eNet-Adapter

                            R 1 Antwort Letzte Antwort
                            0
                            • S stoffel67

                              also bei mir gibt's keine Zeile 745
                              und woher stammt das XML ( ist das aus Blockly)?

                              R Offline
                              R Offline
                              Roelli
                              schrieb am zuletzt editiert von
                              #14

                              @stoffel67 said in Web-IO Digital 12xIn, 12xOut #57630 / Anbindung:

                              also bei mir gibt's keine Zeile 745
                              und woher stammt das XML ( ist das aus Blockly)?

                              Ich hab scheinbar nicht kapiert wie ich Dein Script einfügen kann.
                              So is scheinbar falsch: https://www.youtube.com/watch?v=9tqdxvXUC80&feature=youtu.be

                              Wie mus sich's tun?

                              NUC6i7KYK M.2 32GB RAM mit Proxmox
                              14 AccessPoints, 5 Switches 115 Adapter, 67913 Objekte, 57954 Zustände,126x Shelly, 26 Thermostate, Fire Tablets, DMX, USV, 18x echodot, 9xKlima, 4x heizung, beamer, 6x IP Speed dome, AiOnTheEdge, Tasmota Wemos, Fingerabdrucksensoren, VOIP TFE, Türsteuerung, BMZ,EMA

                              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

                              805

                              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