Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. In Node Red Informationen aus einen Script empfangen und auswerten

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    209

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

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

In Node Red Informationen aus einen Script empfangen und auswerten

In Node Red Informationen aus einen Script empfangen und auswerten

Scheduled Pinned Locked Moved Skripten / Logik
14 Posts 2 Posters 4.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • N Offline
    N Offline
    NetFritz
    wrote on last edited by
    #1

    Hallo

    Ich bin auf der Suche nach einer Möglichkeit in Node Red Werte aus mein Schript ( Node js ) zu empfangen und auszuwerten.

    Wie stellt man das ohne großen Aufwand an?

    Kann man das direkt ohne ioBroker Adpter machen?

    Vieleicht über HTTP ?

    Gruß NetFritz

    1 Reply Last reply
    0
    • N Offline
      N Offline
      nobody
      wrote on last edited by
      #2

      Hi.

      Wenn ich dich richtig verstanden habe, läuft das Skript nicht unter iobroker. Ist das so richtig?

      Wenn ja, kannst du du in node red z.b. einfach einen flow für einen http Webservice erstellen und die Parameter als get-Parameter übergeben.

      Alternativ bietet dir die simple API von iobroker auch die Möglichkeit, Werte in iobroker mittels http zu setzen. Dann wäre es in node-red einfach ein iobroker in node.

      Gesendet von meinem SM-G930F mit Tapatalk

      1 Reply Last reply
      0
      • N Offline
        N Offline
        NetFritz
        wrote on last edited by
        #3

        Hallo

        Das Script läuft nicht in ioBroker.

        Gibt es dafür ein Link, wie wird das gemacht.

        Ich habe ein Script gefunden ist aber wohl für ioBroker.

         `var request = require('request');
        var URL = 'http://192.168.2.87:1880';
        
        createState('temperature', {
            name: 'Temperature',
            type: 'number',
            unit: '°C'
        });
        
        request(URL, function (error, response, result) {
            if (result) {
                // 111°F/44°C
               var temp = result.match(/``\d+°F\/(\d+)°C<\/div>/);
               if (temp) {
                  setState('temperature', temp[1]);
               }
            }
        });` 
        Wie muss den das Script aussehen das auserhalb von ioBroker läuft und per HTTP in Node Red die Daten auswertet?
        
        Gruß NetFritz
        
        1 Reply Last reply
        0
        • N Offline
          N Offline
          nobody
          wrote on last edited by
          #4

          Hi NetFritz,

          die Simple API ist hier beschrieben: https://github.com/ioBroker/ioBroker.simple-api.

          Für das Setzen eines Werts ist die SET-Funktion da. Die Parameter werden einfach als get-Parameter an die URL gehängt. Hier das Beispiel hierfür:

          http://ip:8087/set/hm-rpc.0.IEQ12345.LEVEL?value=1
          

          Zum Senden der Daten gibt es in node.js mehrere REST-Implementierungen. Aber die einfachste Variante ist es, den String einfach selbst zusammen zu bauen und diesen als http-Request zu senden.

          Hier ein Beispiel hierfür:

          var request = require('request');
          request('http://ip:8087/set/hm-rpc.0.IEQ12345.LEVEL?value=1', function (error, response, body) {
              if (!error && response.statusCode == 200) {
                  console.log(body) // Print answer from Server
               }
          })
          
          

          Mit https oder Authentifizierung sieht es etwas anders aus.

          1 Reply Last reply
          0
          • N Offline
            N Offline
            NetFritz
            wrote on last edited by
            #5

            Hallo

            Danke für den Hinweiß.

            Ich habe es mal versucht ohne ioBroker API.

            Gebe ich im Browser fogendes ein

            "http://192.168.2.87:1880/test?temperature=22"

            dann empfängt Node Red mit "http in" und URL /test den Aufruf vom Browser.

            Unter DEBUG kann ich auch temperature: "22" sehen.

            Das geht sehr schnell.

            Rufe ich folgendes Node Js auf so dauert es lange das das Script durchläuft.

            NODE_DEBUG=request node request2.js

             var request = require('request');
            
            var value1=22;
            var URL = "http://192.168.2.87:1880/test?temperature=22";
            console.log (URL);
            
            request.put(URL, function (error, response, result) {
                if (result) {
                   console.log(result);
                }
            }); 
            

            Die Ausgabe vom Script ist folgendes

             http://192.168.2.87:1880/test?temperature=22
            REQUEST { uri: 'http://192.168.2.87:1880/test?temperature=22',
              callback: [Function],
              method: 'PUT' }
            REQUEST make request http://192.168.2.87:1880/test?temperature=22
            REQUEST onRequestResponse http://192.168.2.87:1880/test?temperature=22 404 { 'x-powered-by': 'Express',
              'content-security-policy': 'default-src \'self\'',
              'x-content-type-options': 'nosniff',
              'content-type': 'text/html; charset=utf-8',
              'content-length': '143',
              date: 'Tue, 02 Jan 2018 12:07:01 GMT',
              connection: 'close' }
            REQUEST reading response's body
            REQUEST finish init function http://192.168.2.87:1880/test?temperature=22
            REQUEST response end http://192.168.2.87:1880/test?temperature=22 404 { 'x-powered-by': 'Express',
              'content-security-policy': 'default-src \'self\'',
              'x-content-type-options': 'nosniff',
              'content-type': 'text/html; charset=utf-8',
              'content-length': '143',
              date: 'Tue, 02 Jan 2018 12:07:01 GMT',
              connection: 'close' }
            REQUEST end event http://192.168.2.87:1880/test?temperature=22
            REQUEST has body http://192.168.2.87:1880/test?temperature=22 143
            REQUEST emitting complete http://192.168.2.87:1880/test?temperature=22
            
            <title>Error</title>
            
            ```
            Cannot PUT /test
            ```
            
            

            Das Script hat 404 Error Cannot PUT als Ausgabe.

            Wie bekomme ich das Sript Fehlfrei zum Laufen?

            Gruß NetFritz

            1 Reply Last reply
            0
            • N Offline
              N Offline
              nobody
              wrote on last edited by
              #6

              ja, das liegt an der method: 'PUT'.

              Es gibt bei Http unterschiedliche Methods, die unterschiedliche Aktionen auf dem HTTP-Server auslösen (https://developer.mozilla.org/en-US/doc … TP/Methods).

              Mit PUT kann man eine Datei auf dem Server speichern. Was hier nicht gewünscht ist. Da vom Testskript keine Daten im Body gesendet werden, wird halt bis zum Timeout gewartet und dann der Fehler erzeugt.

              Die HTTP-Methode, die für die Simple-API-Aufrufe verwendet werden muss, ist GET, da die Parameter direkt an der URL hängen. Aus HTTP-Sicht ist der REST-API-Aufruf wie ein Abruf einer Website vom Server.

              Versuche mal request.get (…) oder einfach nur request (...) wie in meinem Beispiel. Damit sollte es gehen. (Das Request-Object ist hier beschrieben https://github.com/request/request)

              1 Reply Last reply
              0
              • N Offline
                N Offline
                NetFritz
                wrote on last edited by
                #7

                Hallo

                Das habe ich mir schon gedacht das es an PUT liegt.

                Füge ich nun request.get ein dann braucht die Übertragung zu Node Red ca. 3 sekunden.

                Das Script bricht aber erst nach langer Zeit ab.

                Mache ich den curl Aufruf in der Konsole bricht der Aufruf in der Konsole nicht ab.

                Die Übertragung erfogt sofort.

                curl "http://192.168.2.87:1880/test?temperature=22"
                

                Ach ja der Browser Aufruf läuft auch lange bis zum Abbruch.

                Das wird sicherlich daran liegen das GET ein responde erwartet.

                Ich habe ja hinter "http in" eine "function" und dann ein "debug"

                In der "function" habe ich folgendes eingetragen:

                msg.payload.helloText = 'Hello World!';
                node.log('Hey There, World!');
                return msg;
                

                Es ging schon mal wenn ich den im Browser ausgeführt habe das ich als Rückmeldung im Browser

                "Hey There, World" stehen hatte.

                Gruß NetFritz

                1 Reply Last reply
                0
                • N Offline
                  N Offline
                  nobody
                  wrote on last edited by
                  #8

                  Zeig mal deinen node-red-Flow. Hört sich danach an, dass es kein http-response gibt, der den Statuscode auf 200 (=OK) setzt.

                  Der Request erwartet natürlich eine Antwort vom Server. Wenn du nur einen http-in-Node hast, bekommt das Request-Objekt im Testskript jedoch keine Antwort von node-red und wartet bis zum Timeout.

                  Damit man den Request korrekt beantworten kann gibt es in node-red nicht nur einen http-in sondern auch einen http-out. Der http-response-Node muss mit dem in-Node verbunden werden, damit dieser die Verbindung übernehmen kann. Dazwischen kann z.B. durch einen Change-Node der zu sendende Inhalt festgelegt werden. In deinem Fall brauchst du das nicht, weil der body bereits leer ist und als statusCode per Default 200 gesendet wird.

                  Sollte in etwa wie auf dem Bild aussehen.
                  632_screenshot.png

                  1 Reply Last reply
                  0
                  • N Offline
                    N Offline
                    NetFritz
                    wrote on last edited by
                    #9

                    Hallo

                    Habe jetzt hinter den "http in" noch ein "http request" gesetzt.

                    Bekomme jetzt im Browser als Request "temperature: "22" " und im Node Red ist sofort nach dem Absenden

                    die "temperature "22" " zu sehen.

                    Auch in der Konsole mit "curl "http://192.168.2.87:1880/test?temperature=22" " sofort in Node Red

                    die "temperature "22" " zu sehen.

                    Blos das Node js braucht ca. 5 sekunden dafür.

                     */
                    var request = require('request');
                    var URL = "http://192.168.2.87:1880/test?temperature=22";
                    
                    request.get(URL, function (error, response, result) {
                        if (error) {
                           //console.log(error);
                        }
                    }); 
                    

                    Keine Ahnung warum.

                    Hier noch die DEBUG Ausgabe:

                     NODE_DEBUG=request node request2.js
                    REQUEST { uri: 'http://192.168.2.87:1880/test?temperature=22',
                      callback: [Function],
                      method: 'GET' }
                    REQUEST make request http://192.168.2.87:1880/test?temperature=22
                    REQUEST onRequestResponse http://192.168.2.87:1880/test?temperature=22 200 { 'x-powered-by': 'Express',
                      'x-content-type-options': 'nosniff',
                      'content-type': 'application/json; charset=utf-8',
                      'content-length': '20',
                      etag: 'W/"14-0d4s4gMIkyPp/otqo6vG2W1Qf5M"',
                      date: 'Tue, 02 Jan 2018 16:59:12 GMT',
                      connection: 'close' }
                    REQUEST reading response's body
                    REQUEST finish init function http://192.168.2.87:1880/test?temperature=22
                    REQUEST response end http://192.168.2.87:1880/test?temperature=22 200 { 'x-powered-by': 'Express',
                      'x-content-type-options': 'nosniff',
                      'content-type': 'application/json; charset=utf-8',
                      'content-length': '20',
                      etag: 'W/"14-0d4s4gMIkyPp/otqo6vG2W1Qf5M"',
                      date: 'Tue, 02 Jan 2018 16:59:12 GMT',
                      connection: 'close' }
                    REQUEST end event http://192.168.2.87:1880/test?temperature=22
                    REQUEST has body http://192.168.2.87:1880/test?temperature=22 20
                    REQUEST emitting complete http://192.168.2.87:1880/test?temperature=22
                    root@raspberrypi:/var/www/html/myhouse/nodejs#
                    
                    

                    Gruß NetFritz

                    1 Reply Last reply
                    0
                    • N Offline
                      N Offline
                      nobody
                      wrote on last edited by
                      #10

                      @NetFritz:

                      Hallo

                      Habe jetzt hinter den "http in" noch ein "http request" gesetzt `
                      Wieso http request? Der ist zum senden von requests.

                      Nimm mal den http Response .

                      Gesendet von meinem SM-G930F mit Tapatalk

                      1 Reply Last reply
                      0
                      • N Offline
                        N Offline
                        NetFritz
                        wrote on last edited by
                        #11

                        Hallo

                        Schon richtig ist ein "http response".

                        Habe mich verschrieben.

                        Gruß NetFritz

                        1 Reply Last reply
                        0
                        • N Offline
                          N Offline
                          nobody
                          wrote on last edited by
                          #12

                          Mal ausprobiert, ob node.js die 5 Sekunden zum starten braucht?

                          Gesendet von meinem SM-G930F mit Tapatalk

                          1 Reply Last reply
                          0
                          • N Offline
                            N Offline
                            NetFritz
                            wrote on last edited by
                            #13

                            Hallo

                            Mal am des Node js Script ein "console.log("start");" gesetzt.

                            Nach Return kommt "start" nach ca. 2sek. und dann nach ca. 3sek.

                            ist das Script durgelaufen und in Node Red unter DEBUG die Ausgabe.

                            Gruß NetFritz

                            1 Reply Last reply
                            0
                            • N Offline
                              N Offline
                              NetFritz
                              wrote on last edited by
                              #14

                              Hallo

                              Habe es mal mit

                               var get = require('simple-get');
                              
                              get('http://192.168.2.87:1880/test?temperature=22', function (err, res) {
                                if (err) throw err;
                                console.log(res.statusCode); // 200
                                res.pipe(process.stdout); // `res` is a stream
                              }); 
                              

                              versucht.

                              Geht viel schneller.

                              Start braucht auch ca 2sek., danach ist das Script sofort durchgelaufen

                              und Node Red reagiert auch sofort danach.

                              var request = require('request'); braucht wohl so lange.

                              Das ganze läuft auf einem RPi Zero W.

                              Gruß NetFritz

                              1 Reply Last reply
                              0
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              99

                              Online

                              32.4k

                              Users

                              81.3k

                              Topics

                              1.3m

                              Posts
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                              ioBroker Community 2014-2025
                              logo
                              • Login

                              • Don't have an account? Register

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Recent
                              • Tags
                              • Unread 0
                              • Categories
                              • Unreplied
                              • Popular
                              • GitHub
                              • Docu
                              • Hilfe