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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. HTTP POST an CCU in Javascript

NEWS

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

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

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

HTTP POST an CCU in Javascript

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
16 Beiträge 4 Kommentatoren 2.8k 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.
  • BlackmikeB Offline
    BlackmikeB Offline
    Blackmike
    schrieb am zuletzt editiert von
    #1

    MOD-Edit by eric2905 (19.04.2017-19:36 ) : Aus Ursprungsforum "Vis" hierher verschoben

    So, nachdem ich mir hier schon den Abend die Finger breche, ein hilferuf.

    ich möchte gerne über die :8181 remote schnittstelle der CCU via Post Befehl programmcode ausführen lassen

    klingt Easy, für die Javascript Profis hier wohl auch, net für mich.

    Ich habs in Python für mein Logamatic 2107 Gateway geproggt, tuts seit 2 Jahren ohne Probleme

    da sieht der Code so aus:

    def pushState (command):
    # im Testmode schreiben wir nicht wild auf de CCU rum
        if a.RealRun and ENpushCCU:
            blockpush=threading.Lock ()
            blockpush.acquire ()
            try:
                httpServ = http.client.HTTPConnection(ipCCU2, xmlrpcPort)
                httpServ.connect()
                httpServ.request('POST', 'blabla.exe', command)
                response = httpServ.getresponse()
                reason= response.status,response.reason
                httpServ.close()
                blockpush.release ()
                return reason
            except:
            # Wenn eine Fehlübertragung: egal
                blockpush.release ()
                return ""
    

    aber ich kriegs net hin javascript hin.

    an die Adresse: 'http://192.168.2.2:8181/blabla.exe'

    will ich den Proigrammcode zum testen

    dom.GetObject ("ZZTEST").State (22);

    übertragen. was eine Systemvariable mit einem Wert setzen sollte.

    versucht habs ich hiermit:

    request.post({
        url:     'http://192.168.2.2:8181/blabla.exe',
        form:    { title: 'dom.GetObject ("ZZTEST").State (22);' }
    }, function(error, response, body) {
        if (error) log(error, 'error');
    });
    

    ich kriegs net hin…. wahrscheinlich irgendne kleinigkeit wo ich hängenbleib

    die Wahrheit ist ein Chor aus Wind

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

      @Blackmike:

      an die Adresse: 'http://192.168.2.2:8181/blabla.exe'

      will ich den Proigrammcode zum testen

      dom.GetObject ("ZZTEST").State (22);

      übertragen. was eine Systemvariable mit einem Wert setzen sollte. `

      Probier mal:

      var http = require('http'); 
      
      var path = "/blabla.exe";
      var data = 'dom.GetObject ("ZZTEST").State (22);';
      
      var options = {
          host: '192.168.2.2',
          port: 8181,
          path: path,
          method: 'POST',
          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+1,
          }
      };
      
      function httpPost(data) { // schickt an ein Alexa-Gerät (device) ein Kommando (data) per https-Request / Daten im Body
          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)
          });
      
          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 angegeben"));
          req.end();
      }
      
      httpPost(data);
      

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

      1 Antwort Letzte Antwort
      0
      • BlackmikeB Offline
        BlackmikeB Offline
        Blackmike
        schrieb am zuletzt editiert von
        #3

        danke, habich sofort probiert…

        ccu variable ändert sich nicht,

        bei mir kommt folgendes im log:

        <code>[code]
        00:03:12.059	[warn]	javascript.1 script.js.TestSchedule: ERROR: socket hang up
        00:03:30.681	[info]	javascript.1 Stop script script.js.TestSchedule
        00:03:30.681	[info]	javascript.0 Stop script script.js.TestSchedule
        00:03:30.884	[info]	javascript.1 Start javascript script.js.TestSchedule
        00:03:30.885	[info]	javascript.1 script.js.TestSchedule: Data to request body: dom.GetObject ("ZZTEST").State (11)
        00:03:30.885	[info]	javascript.1 script.js.TestSchedule: registered 0 subscriptions and 0 schedules
        00:04:31.209	[warn]	javascript.1 script.js.TestSchedule: ERROR: socket hang up[/code]</code>
        

        Sinn ist natürlich nicht im Endzustand damit Systemvariablem zu setzen, sondern über xmlrpc.PutParamset zugriff auf die MASTER (Konfigeinstellungen der Geräte) und LINK (Direktverknüpfungen der geräte) zu bekommen und diese von IOBRoker aus ändrn zu können

        die Wahrheit ist ein Chor aus Wind

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

          @Blackmike:

          danke, habich sofort probiert…

          ccu variable ändert sich nicht, `

          und wenn Du das +1 hinter data.length entfernst?

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

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

            Ohne die +1 sieht es bei mir wie folgt aus:

            00:10:40.172	[info]	javascript.2 Start javascript script.js.Test.http_POST
            00:10:40.172	[info]	javascript.2 script.js.Test.http_POST: Data to request body: dom.GetObject ("wz_ip").State (19);
            00:10:40.174	[info]	javascript.2 script.js.Test.http_POST: registered 0 subscriptions and 0 schedules
            00:10:40.187	[info]	javascript.2 script.js.Test.http_POST: http Status: 200
            00:10:40.187	[info]	javascript.2 script.js.Test.http_POST: HEADERS: {"server":"ise GmbH HTTP-Server v2.0","accept-ranges":"bytes","cache-control":"no-store, no-cache","content-type":"text/xml","content-length":"222","date":"Wed, 19 Apr 2017 00:10:40 GMT","connection":"close"}
            

            Und der Wert im hm-rega ändert sich (meine Variable heisst in dem Beispiel: wz_ip).

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

            1 Antwort Letzte Antwort
            0
            • BlackmikeB Offline
              BlackmikeB Offline
              Blackmike
              schrieb am zuletzt editiert von
              #6

              treffer, muchas gracias, das wars…

              wert ändert sich...

              perfekt.

              javascript.1	2017-04-19 00:12:46.718	info	script.js.TestSchedule: HEADERS: {"server":"ise GmbH HTTP-Server v2.0","accept-ranges":"bytes","cache-control":"no-store, no-cache","content-type":"text/xml","content-length":"222","date":"Wed, 19 Ap
              javascript.1	2017-04-19 00:12:46.718	info	script.js.TestSchedule: http Status: 200
              javascript.1	2017-04-19 00:12:46.685	info	script.js.TestSchedule: registered 0 subscriptions and 0 schedules
              javascript.1	2017-04-19 00:12:46.684	info	script.js.TestSchedule: Data to request body: dom.GetObject ("ZZTEST").State (11)
              

              Wenn interesse daran besteht, poste ich hier dann gerne mal ein paar Zeilen Code, mit dem man dann zum Beispiel in Thermostaten Wochenprogramme umschalten kann, zeiten und temperaturen ändern kann, bei Schaltaktoren die einschaltzeit ändern kann (bei Direktverknüpfungen)

              greetz, Black

              die Wahrheit ist ein Chor aus Wind

              1 Antwort Letzte Antwort
              0
              • BlackmikeB Offline
                BlackmikeB Offline
                Blackmike
                schrieb am zuletzt editiert von
                #7

                das tuts soweit, das verändern von Parametern aus dem Mastersatz tuts auch schon.

                ich brauch aber nochmal ein Denkansatz.

                Nach dem Post gibt der webserver der CCU brav antwort.

                javascript.1 script.js.TestSchedule: HEADERS: {"server":"ise GmbH HTTP-Server v2.0","accept-ranges":"bytes","cache-control":"no-store, no-cache","content-type":"text/xml","content-length":"253","date":"Wed, 19 Apr 2017 11:13:04 GMT","connection":"close"}
                

                in dem Falle eine Antwort von 253 Zeichen.

                wo und wie komme ich an die Antwort von dem Server ? res.resposeText ist es nicht, das ist undefiniert ..

                thnx, Black

                die Wahrheit ist ein Chor aus Wind

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

                  => https://github.com/request/request

                  Im einfachsten Fall:

                  request( <url und/optionen="">... , function (error, response, body) {
                      // body enthält die Antwort
                  });</url>
                  

                  Verwendet aber das zusätzliche "request"-Modul anstatt "http". Soweit ich weiß, ist das im JS-Adapter bereits geladen.

                  –-

                  Alternativ kannst du auf das "data"-Event der Response lauschen (https://nodejs.org/api/http.html#http_h ... s_callback):

                    res.on('data', (chunk) => {
                      console.log(`BODY: ${chunk}`);
                    });
                    res.on('end', () => {
                      console.log('No more data in response.');
                    });
                  

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

                  1 Antwort Letzte Antwort
                  0
                  • BlackmikeB Offline
                    BlackmikeB Offline
                    Blackmike
                    schrieb am zuletzt editiert von
                    #9

                    auch dieser schritt war erfolgreich… danke bisher...

                    nu kommt di enächste Frage, javascritp ist da echt mühsam.

                    folgender code durch die im ersten post genannte python routine gejagt ergibt folgende antwort:

                    Aufruf mit:

                    state= 'dom.GetObject ("ZZTEST").State (22); string s1= "TESTTEST";'
                    
                    q= pushState (state)
                    print (q)
                    

                    antwort der CCU:

                    >>> 
                    b'<xml><exec>blabla.exe</exec><httpuseragent></httpuseragent><s1>TESTTEST</s1></xml>'
                    >>> 
                    

                    wichtig ist das: <s1>TESTTEST</s1>

                    das sagt aus, das die Variable s1 den Inhalt TESTTEST hat.

                    in python wie ichs kenn, tutti.

                    nun Javascript

                    die o.g. routinen sind so eingebaut.

                    function httpPost(data) { // schickt an ein Alexa-Gerät (device) ein Kommando (data) per https-Request / Daten im Body
                     //   log (data.length );
                        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 body='';
                        res.on('data', function(d) {
                            body += d.toString ();
                        });
                    
                        res.on('end', function() {
                            log (body.toString ());
                        });         
                        });
                    
                        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 angegeben"));
                    
                        req.end();
                    }
                    
                    httpPost(data);
                    

                    das ergebnis ist:

                    15:30:58.399	[info]	javascript.1 script.js.TestSchedule: /blabla.exeUser-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.36TESTTEST
                    

                    hier sind wohl alle XML Tags weg. wieso ? und wie krieg ich die wieder ?

                    die Wahrheit ist ein Chor aus Wind

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

                      Content-Type steht auf text/plain

                      Eventuell ändern

                      Gesendet von iPad mit Tapatalk

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

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

                        Mh… wird wohl Blödsinn sein... es gibt noch eine Einstellung, was man als Antwort erwartet/akzeptiert.

                        Bin nur gerade nicht am Rechner.

                        Gesendet von iPad mit Tapatalk

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

                        1 Antwort Letzte Antwort
                        0
                        • BlackmikeB Offline
                          BlackmikeB Offline
                          Blackmike
                          schrieb am zuletzt editiert von
                          #12

                          hmmm, was irriterend ist:

                          /blabla.exeUser-Agent: Mozilla/5.0TESTTEST
                          

                          das ist die Antwort, die im log dargestellt wird

                          allerdigs passt die länge von 129 zeichen nicht zu diesem text

                          wenn das so aussehen würde, wäre es stimmiger

                          <xml><exec>blabla.exe</exec><httpuseragent>User-Agent: Mozilla/5.0</httpuseragent><s1>TESTTEST</s1></xml>
                          

                          also mal eben das in die Auswertung reinprogrammiert

                              res.on('end', function() {
                                  log (body.toString().length);
                                  log (body.toString ());
                                  var erg= body.substring(body.lastIndexOf("<s1>")+4,body.lastIndexOf("</s1>"));
                                  log (erg);
                              });  
                          

                          heisst versuche in dem Ausgabesting den text zwischen <s1>und</s1> zu filtern

                          laut dem log ist der text nicht im string body enthalten.

                          der Filteraufruf ergibt aber TESTTEST

                          würde heissen, es läuft alles richtig, aber die log Ausgabe verschluckt XML Tags ?

                          <<– ratlos

                          die Wahrheit ist ein Chor aus Wind

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

                            gerade mal nachgesehen…

                            ohne am Skript was zu ändern:

                            Im Log wird es ohne XML Tags angezeigt.

                            Wenn man im "großen" Log mit der Maus über den Eintrag steht, stehen die XML Tags drin.

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

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

                              @Blackmike:

                              würde heissen, es läuft alles richtig, aber die log Ausgabe verschluckt XML Tags ?

                              <<– ratlos `

                              Tja, da warst Du schneller…

                              Hatte gerade auch das Erlebnis.

                              Die Tags scheinen da zu sein, da sie mit Mouseover sichtbar werden.

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

                              1 Antwort Letzte Antwort
                              0
                              • BlackmikeB Offline
                                BlackmikeB Offline
                                Blackmike
                                schrieb am zuletzt editiert von
                                #15

                                so, und nun ein paar zeilen HM-Script Code… Falls es hier jemand brauchen kann.

                                Dieses beispiel nun: Umschreiben des Wochenprogrammes in dem Wandthermostat.

                                var path = "/blabla.exe";
                                var wochenprog= 1;
                                var sDevice   = 'AI_KUECHE_TH';
                                
                                    data = 'object o1= devices.Get("' + sDevice + '");';
                                    data +='string s2="";';
                                    data +='if (o1) {';
                                    data += 'xmlrpc.PutParamset (o1.Interface(), o1.Address(), "MASTER", "WEEK_PROGRAM_POINTER", '+ wochenprog.toString () +'); s2="SET";';
                                    data += '} else { s2 = "NO DEVICE"; }';
                                

                                AI_KUECHE_TH heisst natürlich mein Teil an der Wand, hier muss der Device Name des WT rein.

                                Wochenprog ist 0, 1, 2 entspricht der Einstellung Wochenprogramm 1,2,3 in der Web UI

                                filtern auf S2 ergibt dann SET wenn der Aufruf erfolgreich war bzw NO DEVICE, wen der Gerätename ungültig war.

                                greetz Black

                                die Wahrheit ist ein Chor aus Wind

                                1 Antwort Letzte Antwort
                                0
                                • K Offline
                                  K Offline
                                  Kev0
                                  schrieb am zuletzt editiert von
                                  #16

                                  Hi,

                                  ich muss dass hier leider mal aufwärmen, da ich nicht durchsteige.

                                  Hintergrund:

                                  Ich möchte die Wochenprogramme meiner Heißkörperthermostate via ioBroker durchschalten.

                                  Wie? :-D

                                  okay hab da jetzt was zusammengepfluckt was zu funktionieren scheint:

                                  `// Konstanten für CCU Push
                                  var http = require('http'); 
                                  var path = "/blabla.exe";
                                  
                                  function setCCUscript (sDevice,wochenprog) {
                                      var data = 'object o1= devices.Get("' + sDevice + '");';
                                      data +='string s2="";';
                                      data +='if (o1) {';
                                      data += 'xmlrpc.PutParamset (o1.Interface(), o1.Address(), "MASTER", "WEEK_PROGRAM_POINTER", '+ wochenprog.toString () +'); s2="SET";';
                                      data += '} else { s2 = "NO DEVICE"; }';   
                                      return data
                                  }
                                  
                                  function setPushVar (data) {
                                      var options = {
                                      host: getObject('system.adapter.hm-rpc.0').native.homematicAddress,
                                      port: 8181,
                                      path: path,
                                      method: 'POST',
                                      headers: {
                                          'User-Agent' : 'Mozilla/5.0',
                                          'Content-Type': 'text/plain',
                                          'Content-Length': data.length,
                                      }
                                      };
                                      return options;
                                  }
                                  
                                  function httpPost (options,data) {
                                      var req = http.request(options, function(res) {
                                          var body='';
                                          res.on('data', function(d) { body += d.toString (); });
                                          res.on('end', function() {   });      
                                      });
                                      req.on('error', function(e) { log('ERROR: ' + e.message,"warn"); });
                                      (data ? req.write(data) : log("Daten: keine Daten angegeben"));
                                      req.end();
                                  }
                                  
                                  on ({id: "javascript.0.Heizung_Energiesparmodus", change: 'ne'}, function(obj) {
                                      if (getState ("javascript.0.Heizung_Energiesparmodus").val ==1) { 
                                          var array = ["Wohnzimmer Heizung Gruppe", "Schlafzimmer Heizung Gruppe", "Küche Heizung Gruppe", "Büro Heizung Gruppe", "Kinderzimmer Heizung Gruppe", "Hauswirtschaftsraum Heizung Gruppe", "Badezimmer Wanne Heizung Gruppe", "Badezimmer Dusche Heizung Gruppe", "Flur Heizung Gruppe"];
                                          var i;
                                          log ("Heizung_Energiesparmodus ist an");
                                          for (i = 0; i < array.length; i++) {
                                          var script = setCCUscript (array[i], 2);
                                          httpPost (setPushVar (script),script);
                                          }
                                  
                                    } else {
                                          var array = ["Wohnzimmer Heizung Gruppe", "Schlafzimmer Heizung Gruppe", "Küche Heizung Gruppe", "Büro Heizung Gruppe", "Kinderzimmer Heizung Gruppe", "Hauswirtschaftsraum Heizung Gruppe", "Badezimmer Wanne Heizung Gruppe", "Badezimmer Dusche Heizung Gruppe", "Flur Heizung Gruppe"];
                                          var i;
                                          log ("Heizung_Energiesparmodus ist aus");
                                          for (i = 0; i < array.length; i++) {
                                          var script = setCCUscript (array[i], 0);
                                          httpPost (setPushVar (script),script);
                                          }
                                    }
                                  });` 
                                  
                                  Grüße
                                  
                                  Kevin[/i][/i]
                                  
                                  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

                                  499

                                  Online

                                  32.4k

                                  Benutzer

                                  81.4k

                                  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