Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. daten über REST Schnittstelle lesen

    NEWS

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    daten über REST Schnittstelle lesen

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 @Ben1983 last edited by paul53

      @ben1983 sagte: die Variable "MyDevice.Id" wurde auch in der letzten Schleife richtig erkannt.

      Auf diese wird nicht in der Callback-Funktion zugegriffen. Die Einschränkung auf lokale Schleifen-Variablen bezieht sich nur auf Variablen, deren Wert in der Schleife verändert wird und auf die in der Callback-Funktion zugegriffen wird.

      Ben1983 1 Reply Last reply Reply Quote 0
      • Ben1983
        Ben1983 @paul53 last edited by

        @paul53 OK, ich hatte sie aber einmal zum test einfach dort geloggt und das hatte funktioniert.

        paul53 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @Ben1983 last edited by paul53

          @ben1983 sagte: dort geloggt und das hatte funktioniert.

          Innerhalb der Schleife ist "MyDevice.Id" eine Konstante.

          Ben1983 1 Reply Last reply Reply Quote 0
          • Ben1983
            Ben1983 @paul53 last edited by

            @paul53 Warum das denn? Wird doch auch durchlaufen in der obersten schleife.

            paul53 1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @Ben1983 last edited by paul53

              @ben1983 sagte: Wird doch auch durchlaufen in der obersten schleife.

              In der äußeren Schleife ist es eine lokale Schleifen-Variable. In der inneren Schleife ist es ein konstanter Wert.
              Test:

              for(let j = 0; j < 3; j++) {
                  for(let i = 0; i < 4; i++) {
                      setState('0_userdata.0.Test.neueZahl'/*neueZahl*/, j , true, function() {
                          log(i + ', ' + j);
                      });
                  }
              }
              

              Log:

              15:50:17.919	info	javascript.0 (1986) script.js.common.Neuer_Test: 0, 0
              15:50:17.920	info	javascript.0 (1986) script.js.common.Neuer_Test: 1, 0
              15:50:17.920	info	javascript.0 (1986) script.js.common.Neuer_Test: 2, 0
              15:50:17.921	info	javascript.0 (1986) script.js.common.Neuer_Test: 3, 0
              15:50:17.921	info	javascript.0 (1986) script.js.common.Neuer_Test: 0, 1
              15:50:17.921	info	javascript.0 (1986) script.js.common.Neuer_Test: 1, 1
              15:50:17.921	info	javascript.0 (1986) script.js.common.Neuer_Test: 2, 1
              15:50:17.921	info	javascript.0 (1986) script.js.common.Neuer_Test: 3, 1
              15:50:17.924	info	javascript.0 (1986) script.js.common.Neuer_Test: 0, 2
              15:50:17.927	info	javascript.0 (1986) script.js.common.Neuer_Test: 1, 2
              15:50:17.927	info	javascript.0 (1986) script.js.common.Neuer_Test: 2, 2
              15:50:17.928	info	javascript.0 (1986) script.js.common.Neuer_Test: 3, 2
              

              Gegentest:

              let j;
              for(j = 0; j < 3; j++) {
                  for(let i = 0; i < 4; i++) {
                      setState('0_userdata.0.Test.neueZahl'/*neueZahl*/, j , true, function() {
                          log(i + ', ' + j);
                      });
                  }
              }
              
              15:52:42.649	info	javascript.0 (1986) script.js.common.Neuer_Test: 0, 3
              15:52:42.649	info	javascript.0 (1986) script.js.common.Neuer_Test: 1, 3
              15:52:42.649	info	javascript.0 (1986) script.js.common.Neuer_Test: 2, 3
              15:52:42.650	info	javascript.0 (1986) script.js.common.Neuer_Test: 3, 3
              15:52:42.650	info	javascript.0 (1986) script.js.common.Neuer_Test: 0, 3
              15:52:42.650	info	javascript.0 (1986) script.js.common.Neuer_Test: 1, 3
              15:52:42.650	info	javascript.0 (1986) script.js.common.Neuer_Test: 2, 3
              15:52:42.650	info	javascript.0 (1986) script.js.common.Neuer_Test: 3, 3
              15:52:42.650	info	javascript.0 (1986) script.js.common.Neuer_Test: 0, 3
              15:52:42.650	info	javascript.0 (1986) script.js.common.Neuer_Test: 1, 3
              15:52:42.650	info	javascript.0 (1986) script.js.common.Neuer_Test: 2, 3
              15:52:42.655	info	javascript.0 (1986) script.js.common.Neuer_Test: 3, 3
              
              Ben1983 1 Reply Last reply Reply Quote 0
              • Ben1983
                Ben1983 @paul53 last edited by Ben1983

                @paul53 Das ist mir schon klar... fürchte wir reden aneinander vorbei:
                Mir geht es um die Werte, wie sie später im Callback zur Verfügung stehen.

                Habe gerade nochmal einen Test gemacht:

                let x = 0;
                            MyDevice.HistoricValue.forEach(function (MyHistoricValue)
                            {
                                let y = 0;
                                MyHistoricValue.Assign.forEach(function (MyAssign)
                                {
                                    x = x + 1;
                                    y = y + 1;
                                    let ax= x;
                                    let ay= y;
                                    const Url = 'http://localhost:8080/rest/1/projects/EnergieMonitoring/devices/' + MyDevice.Id + '/hist/energy/' + MyHistoricValue.Value + '/' + MyAssign.Type + '/.json?' + MyAssign.Time;
                                    request(Url, function(error, response, result)
                                    {
                                        log("X: " + ax.toString() + "Y: " + ay.toString());
                                        if(error)
                                        {
                                            log(error, 'warn');
                                        }
                                        else
                                        {
                                            let value = JSON.parse(result).energy
                                            if(value != NaN &&value != "NaN")
                                            {
                                                setState(MyAssign.InternalId,value);
                                            }
                                            else
                                            {
                                                log(result);
                                                log("Es gab einen fehlerhaften Eintrag in der Response von GridVis: " + MyAssign.InternalId);
                                            }
                                        }
                                    });
                                    x = x + 1;
                                    y = y + 1;
                                    ax = x;
                                    ay =y;
                                });
                            });
                

                offensichtlich stehen für den Callback NICHT die Werte zum Zeitpunkt des Requests zur Verfügung, sondern die Werte am Ende des Schleifendurchlaufs, denn ich bekam hier diesen Log:

                f9d1af2c-c593-4de6-9430-7a7ebf6e924c-image.png

                Also immer 2er Schritte. (Addition vor und nachdem Request.

                paul53 1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @Ben1983 last edited by

                  @ben1983 sagte: Addition vor und nachdem Request.

                  Interessant.

                  Ben1983 1 Reply Last reply Reply Quote 0
                  • Ben1983
                    Ben1983 @paul53 last edited by

                    @paul53 wenn ich das richtig sehe, kann man über die Rest API aber keinen online-Wert schreiben, oder?

                    paul53 1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @Ben1983 last edited by paul53

                      @ben1983 sagte: kann man über die Rest API aber keinen online-Wert schreiben, oder?

                      Mit request.post(url) sollte man manualinput schreiben können.
                      Wozu willst Du schreiben?

                      Ben1983 1 Reply Last reply Reply Quote 0
                      • Ben1983
                        Ben1983 @paul53 last edited by

                        @paul53 Ich habe mit iobroker ein Modbus Gerät simuliert.
                        Anstatt über Modbus könnte ich ja auch über REST schreiben, oder?

                        paul53 1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @Ben1983 last edited by

                          @ben1983 sagte: Anstatt über Modbus könnte ich ja auch über REST schreiben, oder?

                          Nur, wenn die REST-API es hergibt.

                          Ben1983 1 Reply Last reply Reply Quote 0
                          • Ben1983
                            Ben1983 @paul53 last edited by Ben1983

                            @paul53 Bekomme ichauchirgend wie den HTTP Status Code mit?
                            habe gerade erfahren, dass nur wenn dieser 200 ist auf json geparst werden kann.

                            Edit:
                            Den findet man unter:

                            response.statusCode
                            
                            paul53 1 Reply Last reply Reply Quote 0
                            • paul53
                              paul53 @Ben1983 last edited by paul53

                              @ben1983 sagte: Bekomme ichauchirgend wie den HTTP Status Code mit?

                              Zeile 19 ergänzen:

                                                      else if(response.statuscode == 200)
                              
                              1 Reply Last reply Reply Quote 0
                              • First post
                                Last post

                              Support us

                              ioBroker
                              Community Adapters
                              Donate
                              FAQ Cloud / IOT
                              HowTo: Node.js-Update
                              HowTo: Backup/Restore
                              Downloads
                              BLOG

                              1.0k
                              Online

                              32.1k
                              Users

                              80.7k
                              Topics

                              1.3m
                              Posts

                              3
                              84
                              3428
                              Loading More Posts
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes
                              Reply
                              • Reply as topic
                              Log in to reply
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                              The ioBroker Community 2014-2023
                              logo