Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Daten aus einer URL in eine Variable schreiben

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Daten aus einer URL in eine Variable schreiben

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      stoepselinho last edited by

      hallo,

      ich würde gerne von der URL http://192.168.xxx.xxx/pc.js?min zwei Daten in eine Variable schreiben.

      sieht dann so bei mir aus: (ein kleiner Auszug) davon möchte ich z.b. die 623 und die erste 0 nach dem | in eine Variable schreiben. Die Zahlen können auch Mal vierstellig werden. Hat da jemand eine Idee?

      m[mi++]="28.01.17 18:20:00|623;0;8368|0;0;0;6275;0;0"

      m[mi++]="28.01.17 18:15:00|623;0;8317|0;0;0;6275;0;0"

      m[mi++]="28.01.17 18:10:00|652;0;8265|0;0;0;6275;0;0"

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

        Das sind keine Daten, sondern es ist Javascript Code.

        1 Reply Last reply Reply Quote 0
        • S
          stoepselinho last edited by

          Dann hätte ich gerne den Code in eine Variable

          1 Reply Last reply Reply Quote 0
          • a200
            a200 last edited by

            Sind es immer drei Zeilen?

            ich würde das in etwa so machen:

            var url = "http://192.168.xxx.xxx/pc.js?min";

            my $html = qx{curl –silent $url};

            var zeile html[html.length - 1];

            var FeldArray = zeile.split('|');

            var mitteArray = FeldArray[2].split(';');

            var rechtsArray = FeldArray[3].split(';');

            var a = parseInt(mitteArray[1]);

            var b = parseInt(rechtsArray[1]);

            In der Variable a sollte "623" als Integer stehen

            In der Variable b sollte "0" als Integer stehen

            Alles ungeprüft. aber so in etwa sollte es gehen.

            1 Reply Last reply Reply Quote 0
            • S
              stoepselinho last edited by

              Es sind deutlich mehr als drei Zeilen. In den ersten Zeilen steht allgemeines zu Anlagen Größe und so.

              1 Reply Last reply Reply Quote 0
              • a200
                a200 last edited by

                @stoepselinho:

                Es sind deutlich mehr als drei Zeilen. In den ersten Zeilen steht allgemeines zu Anlagen Größe und so. `

                Was willst du denn genau ausgelesen bekommen?

                1 Reply Last reply Reply Quote 0
                • apollon77
                  apollon77 last edited by

                  hey,

                  Es gibt den neuen "Parser"-Adapter … der kann regelmäßig URLs abholen und dort per Regex parsen

                  1 Reply Last reply Reply Quote 0
                  • S
                    stoepselinho last edited by

                    Hinter der IP steckt mein PV Datenlogger und ich will mir den aktuellen Ertrag und den aktuellen Verbrauch vom Haus in einer Variablen speichern um es mit vis darzustellen

                    1 Reply Last reply Reply Quote 0
                    • P
                      pix last edited by

                      Hallo,

                      mit diesem Ausdruck (nicht greedy) kannst du die Zahlen aus der erste Zeile rausfischen:

                      (?<=[|])[0-9]*(?=[;])
                      

                      Der Ausdruck sucht Zahlenkombinationen, denen ein "|" vorausgeht und ein ";" folgt.

                      Das ganze in den parser-Adapter kopiert sollte funktionieren.
                      261_bildschirmfoto_2017-01-30_um_13.04.07.png

                      Jetzt wird alle 300.000 ms oder 5min der Ausdruck gesucht und in den Datenpunkt parser.0.solar geschrieben.

                      Kann sein, dass der Typ number noch Probleme macht und natürlich solltest du den URL noch komplettieren.

                      Kann es selbst natürlich nicht ausprobieren 😄

                      Gruß

                      Pix

                      1 Reply Last reply Reply Quote 0
                      • S
                        stoepselinho last edited by

                        Werd ich heute Abend mal ausprobieren. Muss ich die richtige Zeile irgendwo angeben?

                        Speichert der dann beide Werte in einer Variablen ab?

                        1 Reply Last reply Reply Quote 0
                        • P
                          pix last edited by

                          Nein, er speichert pro Zeile in den Einstellungen des parser-Adapters nur einen Wert. Da musst du noch eine Zeile anfügen.

                          Du kannst auch diesen Ausdruck nehmen:

                          [0-9]*(?=[;])
                          ````für jede Zahl vor einem Semikolon nicht gierig, also nur beim ersten Vorkommen (nur der rote Wert).
                          
                          m[mi++]="28.01.17 18:20:00|623;0;8368|0;0;0;6275;0;0"
                          
                          m[mi++]="28.01.17 18:15:00|623;0;8317|0;0;0;6275;0;0"
                          
                          m[mi++]="28.01.17 18:10:00|652;0;8265|0;0;0;6275;0;0"
                          
                          Welche Werte brauchst du? Ist mir immer noch nicht klar. Kannst du das auch mal den Farben markieren?
                          
                          Gruß
                          
                          Pix
                          1 Reply Last reply Reply Quote 0
                          • S
                            stoepselinho last edited by

                            Hallo,

                            der erste Rote wert müsste der aktuelle Verbrauch sein und der zweite der aktuelle Ertrag.

                            m[mi++]="30.01.17 19:15:00|568;0;6100|0;0;0;309;0;0"

                            1 Reply Last reply Reply Quote 0
                            • S
                              stoepselinho last edited by

                              keine Idee wie man an den zweiten Wert kommt?

                              1 Reply Last reply Reply Quote 0
                              • M
                                moebius last edited by

                                mit node-red zB:````
                                [{"id":"d622dd6c.13e18","type":"tab","label":"Flow 6"},{"id":"abca901f.329ba","type":"inject","z":"d622dd6c.13e18","name":"","topic":"","payload":"m[mi++]="28.01.17 18:20:00|623;0;8368|0;0;0;6275;0;0"","payloadType":"str","repeat":"","crontab":"","once":false,"x":123,"y":61,"wires":[["a8676829.f6bd48"]]},{"id":"a8676829.f6bd48","type":"split","z":"d622dd6c.13e18","name":"","splt":"|","x":263,"y":112,"wires":[["dd824334.af6fc"]]},{"id":"d54f3a3c.30d558","type":"split","z":"d622dd6c.13e18","name":"","splt":";","x":561,"y":199,"wires":[["fcd7879b.764f28"]]},{"id":"1bca33e3.e423fc","type":"debug","z":"d622dd6c.13e18","name":"","active":true,"console":"false","complete":"true","x":859,"y":264,"wires":[]},{"id":"dd824334.af6fc","type":"switch","z":"d622dd6c.13e18","name":"","property":"parts.index","propertyType":"msg","rules":[{"t":"gt","v":"0","vt":"num"}],"checkall":"true","outputs":1,"x":419,"y":152,"wires":[["d54f3a3c.30d558"]]},{"id":"fcd7879b.764f28","type":"switch","z":"d622dd6c.13e18","name":"","property":"parts.index","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"}],"checkall":"true","outputs":1,"x":713,"y":237,"wires":[["1bca33e3.e423fc"]]}]

                                Du müsstest noch inject durch den http request ersetzen.
                                [1803_clipboard02.jpg](/assets/uploads/files/1803_clipboard02.jpg)
                                1 Reply Last reply Reply Quote 0
                                • Bluefox
                                  Bluefox last edited by

                                  var text = 'm[mi++]="28.01.17 18:20:00|623;0;8368|0;0;0;6275;0;0"\n';
                                  text += 'm[mi++]="28.01.17 18:15:00|623;0;8317|0;0;0;6275;0;0"\n';
                                  text += 'm[mi++]="28.01.17 18:10:00|652;0;8265|0;0;0;6275;0;0"\n';
                                  
                                  var m = text.match(/\|(\d+);/g);
                                  console.log(JSON.stringify(m));
                                  console.log(m[0].substring(1, m[0].length - 1) + ' - ' + m[1].substring(1, m[1].length - 1));
                                  

                                  URL kann man so bekommen:

                                  var request = require('request');
                                  createState('myState1', {unit: 'W', type: 'number'});
                                  createState('myState2', {unit: 'W', type: 'number'});
                                  request('http://google.com', function (err, resp, body) {
                                  	if (body) {
                                  		var m = text.match(/\|(\d+);/g);
                                  		if (m && m.length > 1) {
                                  		       setState('myState1', parseInt(m[0].substring(1, m[0].length - 1) , 10), true);
                                  		       setState('myState2', parseInt(m[1].substring(1, m[1].length - 1) , 10), true);
                                  		}
                                  	} else {
                                  		console.warn('NO response: ' + err);
                                  	}
                                  });
                                  
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • S
                                    stoepselinho last edited by

                                    @moebius:

                                    mit node-red zB:````
                                    [{"id":"d622dd6c.13e18","type":"tab","label":"Flow 6"},{"id":"abca901f.329ba","type":"inject","z":"d622dd6c.13e18","name":"","topic":"","payload":"m[mi++]="28.01.17 18:20:00|623;0;8368|0;0;0;6275;0;0"","payloadType":"str","repeat":"","crontab":"","once":false,"x":123,"y":61,"wires":[["a8676829.f6bd48"]]},{"id":"a8676829.f6bd48","type":"split","z":"d622dd6c.13e18","name":"","splt":"|","x":263,"y":112,"wires":[["dd824334.af6fc"]]},{"id":"d54f3a3c.30d558","type":"split","z":"d622dd6c.13e18","name":"","splt":";","x":561,"y":199,"wires":[["fcd7879b.764f28"]]},{"id":"1bca33e3.e423fc","type":"debug","z":"d622dd6c.13e18","name":"","active":true,"console":"false","complete":"true","x":859,"y":264,"wires":[]},{"id":"dd824334.af6fc","type":"switch","z":"d622dd6c.13e18","name":"","property":"parts.index","propertyType":"msg","rules":[{"t":"gt","v":"0","vt":"num"}],"checkall":"true","outputs":1,"x":419,"y":152,"wires":[["d54f3a3c.30d558"]]},{"id":"fcd7879b.764f28","type":"switch","z":"d622dd6c.13e18","name":"","property":"parts.index","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"}],"checkall":"true","outputs":1,"x":713,"y":237,"wires":[["1bca33e3.e423fc"]]}]

                                    Du müsstest noch inject durch den http request ersetzen. `  
                                    

                                    hab das versucht, bekomm das irgendwie nicht hin. wie genau funktioniert das denn mit dem node-red? angezeigt wird es mir aber wo wird es denn gespeichert

                                    1 Reply Last reply Reply Quote 0
                                    • M
                                      moebius last edited by

                                      Was genau hast du versucht? Was genau hat nicht funktioniert?

                                      Wenn du was mit node-red machen willst, schau dir bitte doch mal die schöne Hilfe die Homoran geschrieben hat an:

                                      http://www.iobroker.net/?page_id=4284&lang=de

                                      Da steht auch drin, wie du Werte von node-red wieder in iobroker speichern kannst.

                                      1 Reply Last reply Reply Quote 0
                                      • P
                                        pix last edited by

                                        Für den zweiten Wert nimmst du diesen Ausdruck (vorausgesetzt, der Wert 6275 bleibt immer gleich; könnte aber auch ohne 6275 gehen)

                                        [0-9]*(?=;0;0;6275)
                                        

                                        https://regex101.com/r/QFGi6C/1

                                        Sorry, hatte den Thread schon wieder vergessen.

                                        Pix

                                        EDIT: Also in http://forum.iobroker.net/viewtopic.php?f=21&t=5039&p=51250#p50343 ist der grüne Wert (0) gemeint

                                        1 Reply Last reply Reply Quote 0
                                        • S
                                          stoepselinho last edited by

                                          das scheint nicht zu klappen,

                                          die werte sind nur 0 wenn die anlage nicht läuft. Jetzt sieht die Zeile so aus:

                                          m[mi++]="04.02.17 12:50:00|462;0;3636|665;463;258;3218;405;406"

                                          mit dem Code so funktionierts

                                          [0-9]*(?=;*[0-9]*;*[0-9]*;*[0-9]*;*[0-9]*;*[0-9]*;*[0-9]")
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • P
                                            pix last edited by

                                            Super gelöst! Danke fürs Feedback.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            707
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            11
                                            28
                                            4552
                                            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