Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. [Gelöst] Werte von Clever Tanken

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Gelöst] Werte von Clever Tanken

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      merlin2k11 @mickym last edited by

      @mickym vielen dank
      das schaut soweit schon gut aus.

      Danke

      mickym 1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @merlin2k11 last edited by

        @merlin2k11 sagte in Preisabfrage von clever-tanken:

        Daher ist der Tanker"König" gar nicht so toll wie der Name sagt.

        dafür hat Herr Kurz als erster eine API zur Abfrage bereitgestellt, während bei clever tanken in den AGB steht

        Insbesondere ist es nicht gestattet, eigene Robots, Webcrawler oder sonstige Automatismen zu programmieren und die Inhalte von clever-tanken.de systematisch und umfassend in anderen Medien darzustellen oder für sonstige Zwecke zu extrahieren und zu verarbeiten.

        mickym 1 Reply Last reply Reply Quote 0
        • mickym
          mickym Most Active @merlin2k11 last edited by

          @merlin2k11 So ich bin einfach zu blöde für JSONATA manchmal - nun habe ich es wieder mit einer function Node gemacht. Um beides zu synchronisieren wird das Ganze über Flow-Variablen synchronisiert:

          f4d9d6ae-642b-432d-abe9-7243ad8fcc41-image.png

          [
             {
                 "id": "67e607404c4e23a9",
                 "type": "inject",
                 "z": "02dece3d313bbbd7",
                 "name": "",
                 "props": [
                     {
                         "p": "trigger",
                         "v": "true",
                         "vt": "bool"
                     }
                 ],
                 "repeat": "",
                 "crontab": "",
                 "once": false,
                 "onceDelay": 0.1,
                 "topic": "",
                 "x": 250,
                 "y": 1940,
                 "wires": [
                     [
                         "978278b345db5c20"
                     ]
                 ]
             },
             {
                 "id": "978278b345db5c20",
                 "type": "http request",
                 "z": "02dece3d313bbbd7",
                 "name": "",
                 "method": "GET",
                 "ret": "txt",
                 "paytoqs": "ignore",
                 "url": "https://nopaste.net/WEArq4Mojd",
                 "tls": "",
                 "persist": false,
                 "proxy": "",
                 "insecureHTTPParser": false,
                 "authType": "",
                 "senderr": false,
                 "headers": [],
                 "x": 410,
                 "y": 1940,
                 "wires": [
                     [
                         "8817da5505a0693f",
                         "8788187a998a0e95"
                     ]
                 ]
             },
             {
                 "id": "8817da5505a0693f",
                 "type": "html",
                 "z": "02dece3d313bbbd7",
                 "name": "",
                 "property": "payload",
                 "outproperty": "payload",
                 "tag": "[class=\"price-type-name\"]",
                 "ret": "html",
                 "as": "single",
                 "x": 650,
                 "y": 1960,
                 "wires": [
                     [
                         "02886d2e0b848154"
                     ]
                 ]
             },
             {
                 "id": "8788187a998a0e95",
                 "type": "html",
                 "z": "02dece3d313bbbd7",
                 "name": "",
                 "property": "payload",
                 "outproperty": "payload",
                 "tag": "[class=\"price-field\"]",
                 "ret": "html",
                 "as": "single",
                 "x": 650,
                 "y": 2020,
                 "wires": [
                     [
                         "2d504fa994be0707"
                     ]
                 ]
             },
             {
                 "id": "2d504fa994be0707",
                 "type": "split",
                 "z": "02dece3d313bbbd7",
                 "name": "",
                 "splt": "\\n",
                 "spltType": "str",
                 "arraySplt": 1,
                 "arraySpltType": "len",
                 "stream": false,
                 "addname": "",
                 "x": 850,
                 "y": 2020,
                 "wires": [
                     [
                         "284ff73a429033e2"
                     ]
                 ]
             },
             {
                 "id": "284ff73a429033e2",
                 "type": "change",
                 "z": "02dece3d313bbbd7",
                 "name": "",
                 "rules": [
                     {
                         "t": "change",
                         "p": "payload",
                         "pt": "msg",
                         "from": ".*(\\d\\.\\d+).*\\s.*",
                         "fromt": "re",
                         "to": "$1",
                         "tot": "str"
                     },
                     {
                         "t": "set",
                         "p": "payload",
                         "pt": "msg",
                         "to": "$number(payload)\t",
                         "tot": "jsonata"
                     }
                 ],
                 "action": "",
                 "property": "",
                 "from": "",
                 "to": "",
                 "reg": false,
                 "x": 1030,
                 "y": 2020,
                 "wires": [
                     [
                         "05e5ced4362eb8c0"
                     ]
                 ]
             },
             {
                 "id": "05e5ced4362eb8c0",
                 "type": "join",
                 "z": "02dece3d313bbbd7",
                 "name": "",
                 "mode": "auto",
                 "build": "object",
                 "property": "payload",
                 "propertyType": "msg",
                 "key": "topic",
                 "joiner": "\\n",
                 "joinerType": "str",
                 "accumulate": "false",
                 "timeout": "",
                 "count": "",
                 "reduceRight": false,
                 "x": 1210,
                 "y": 2020,
                 "wires": [
                     [
                         "bfbea56e53fc265e"
                     ]
                 ]
             },
             {
                 "id": "02886d2e0b848154",
                 "type": "change",
                 "z": "02dece3d313bbbd7",
                 "name": "",
                 "rules": [
                     {
                         "t": "set",
                         "p": "Tankstelle.Kraftstoff",
                         "pt": "flow",
                         "to": "payload",
                         "tot": "msg"
                     }
                 ],
                 "action": "",
                 "property": "",
                 "from": "",
                 "to": "",
                 "reg": false,
                 "x": 930,
                 "y": 1960,
                 "wires": [
                     []
                 ]
             },
             {
                 "id": "bfbea56e53fc265e",
                 "type": "change",
                 "z": "02dece3d313bbbd7",
                 "name": "",
                 "rules": [
                     {
                         "t": "set",
                         "p": "Tankstelle.Preise",
                         "pt": "flow",
                         "to": "payload",
                         "tot": "msg"
                     }
                 ],
                 "action": "",
                 "property": "",
                 "from": "",
                 "to": "",
                 "reg": false,
                 "x": 1420,
                 "y": 2020,
                 "wires": [
                     [
                         "974f3660f83b4189"
                     ]
                 ]
             },
             {
                 "id": "974f3660f83b4189",
                 "type": "function",
                 "z": "02dece3d313bbbd7",
                 "name": "create Object",
                 "func": "var kraftstoffe = flow.get(\"Tankstelle\").Kraftstoff;\nvar preise = flow.get(\"Tankstelle\").Preise;\nvar i=0; \n\nmsg.payload={};\n\nfor (let x of kraftstoffe){\n    msg.payload[x] = preise[i];\n    i++;\n}\n\n\nreturn msg;",
                 "outputs": 1,
                 "noerr": 0,
                 "initialize": "",
                 "finalize": "",
                 "libs": [],
                 "x": 1210,
                 "y": 2100,
                 "wires": [
                     [
                         "46df44dc0df76366"
                     ]
                 ]
             },
             {
                 "id": "46df44dc0df76366",
                 "type": "debug",
                 "z": "02dece3d313bbbd7",
                 "name": "debug 20",
                 "active": true,
                 "tosidebar": true,
                 "console": false,
                 "tostatus": false,
                 "complete": "false",
                 "statusVal": "",
                 "statusType": "auto",
                 "x": 1380,
                 "y": 2100,
                 "wires": []
             }
          ]
          

          R 1 Reply Last reply Reply Quote 0
          • mickym
            mickym Most Active @Homoran last edited by

            @homoran Ich verstehe diese Diskussion nicht - es geht darum, wie man aus einer HTML Seite mit Node-Red ähnlich wie mit dem Parser Daten auslesen und aufbereiten kann. Der Inhalt ist mir wurscht - man kann ja die Überschrift ändern und schreiben

            Website mit NodeRed parsen

            Aber ansonsten halte ich mich da raus - ich hab nun eine technische Lösung präsentiert und gut ist.

            1 Reply Last reply Reply Quote 0
            • OliverIO
              OliverIO @Homoran last edited by

              @homoran sagte in Werte auslesen von Webseite:

              und bitte keine externen Hoster für den Quelltext!

              doch, wenn sie regex101 direkt nehmen dann schon
              dort kann man wunderschön einen link auf seine gespeicherten daten speichern

              W 1 Reply Last reply Reply Quote 1
              • R
                rewenode @mickym last edited by rewenode

                @mickym Wenn es nur um Jsonata geht, da kann ich helfen, was nicht heißt, dass es nicht noch einfacher geht.

                2022-09-10_10-16-52.png

                [
                   {
                       "id": "df9f925401039198",
                       "type": "change",
                       "z": "d43ad352c5585762",
                       "name": "combine art and price",
                       "rules": [
                           {
                               "t": "set",
                               "p": "payload",
                               "pt": "msg",
                               "to": "(\t$art :=  $filter(payload,function(\t        $v,$i){\t          ($i)%2=0  \t        });\t$preis := $map($filter(payload,function(\t        $v,$i){\t          ($i)%2=1  \t        }),function($v,$i){\t            $split($v,\"\\n\")[2].$trim().$number()\t        })      \t        ;\t\t$map($art,function($v,$i){\t     $v & \": \" & $preis[$i]\t\t})\t\t)",
                               "tot": "jsonata"
                           }
                       ],
                       "action": "",
                       "property": "",
                       "from": "",
                       "to": "",
                       "reg": false,
                       "x": 280,
                       "y": 300,
                       "wires": [
                           [
                               "49c238fb0d7c57f6"
                           ]
                       ]
                   }
                ]
                

                Gruß
                Reiner

                mickym 1 Reply Last reply Reply Quote 0
                • W
                  Wildbill @OliverIO last edited by

                  @oliverio Es geht darum, dass Files (oder auch Bilder) vom extern Hoster auch mal gelöscht oder der Link geändert werden könnte. Dann ist das Anhängsel hier im Thread wertlos, da es sich nicht mehr öffnen lässt. Was direkt im Filesystem des Forums liegt, bleibt auch da, bislang auch nach Umzügen zu anderen Hostern.
                  Deshalb sollte man immer Anhänge forenintern speichern und verlinken.

                  Gruss, Jürgen

                  1 Reply Last reply Reply Quote 0
                  • mickym
                    mickym Most Active @rewenode last edited by

                    @rewenode Ach schön dass Du Dich meldest - mein JSONATA Lehrer. Ich kanns nur leider nicht importieren - da Du den Export nicht in CodeTags gepackt hast und dann interpretiert der Browser irgendwelche Zeichen. Kannst Du es nochmal in CodeTags exportieren?

                    Ja und war mir neu, wie oder dass man mehrere Abschnitte in der html node kombinieren kann. 😉

                    So und die größte Herausforderung ist aber ken Array als Text, sondern ein Objekt mit den Kraftstoffen als Eingenschaften des Objektes wie bei mir unten.

                    Also Ergebnis, sollte schon so aussehen:

                    435fbad5-ebaa-48ff-9edf-a5fa0853bd86-image.png

                    Ich scheitere immer daran die Objektingenschaften durch zu iterieren bzw. mappen.

                    Aber vielleicht kannst Du ja erst mal Deinen Flow nochmal in CodeTags packen, damit ich es mir in Ruhe anschauen kann, aber wie gesagt Ziel wäre EIN Objekt mit den entsprechenden Eigenschaften zu haben. 😉

                    R 1 Reply Last reply Reply Quote 0
                    • R
                      rewenode @mickym last edited by

                      @mickym sagte in Werte auslesen von Webseite:

                      Ich kanns nur leider nicht importieren - da Du den Export nicht in CodeTags gepackt hast und dann interpretiert der Browser irgendwelche Zeichen. Kannst Du es nochmal in CodeTags exportieren?

                      Oh, sorry ;-( Schau mal ob es jetzt geht. Hab deb Beitrag geändert.

                      Gruß
                      Reiner

                      mickym 1 Reply Last reply Reply Quote 0
                      • mickym
                        mickym Most Active @rewenode last edited by

                        @rewenode Ja jetzt ist die Change-Node solo drin und das wichtigste ist mit dem Code:

                        (
                        $art :=  $filter(payload,function(
                                $v,$i){
                                  ($i)%2=0  
                                });
                        $preis := $map($filter(payload,function(
                                $v,$i){
                                  ($i)%2=1  
                                }),function($v,$i){
                                    $split($v,"\n")[2].$trim().$number()
                                })      
                                ;
                        
                        $map($art,function($v,$i){
                             $v & ": " & $preis[$i]
                        
                        })
                        
                        )
                        

                        Allerdings stimmt das Ergebnis nicht.

                        Schön wäre wie gesagt ein Objekt - Ok das bekomme ich nun auch ohne Flow variablen aber halt mit JS hin. Ich schau mir das nochmal in Ruhe an. Hab mal den Output in eine InjectNode gemacht, um nicht immer die Webabfrage zu starten:

                        0d019c68-67cb-4f21-8745-40335a12f1cf-image.png

                        Momentan kommt bei Deinem Code - immer noch ein Array, statt eines Objektes raus und die Werte passen noch nicht. Aber ich werde es erst nochmal so in JS machen und dann unterhalten wir uns über JSONATA. 😉

                        R 1 Reply Last reply Reply Quote 0
                        • R
                          rewenode @mickym last edited by

                          @mickym Meinst du so?

                          2022-09-10_14-28-21.png

                          [
                             {
                                 "id": "d43ad352c5585762",
                                 "type": "tab",
                                 "label": "Flow 3",
                                 "disabled": false,
                                 "info": "",
                                 "env": []
                             },
                             {
                                 "id": "67e607404c4e23a9",
                                 "type": "inject",
                                 "z": "d43ad352c5585762",
                                 "name": "",
                                 "props": [
                                     {
                                         "p": "trigger",
                                         "v": "true",
                                         "vt": "bool"
                                     }
                                 ],
                                 "repeat": "",
                                 "crontab": "",
                                 "once": false,
                                 "onceDelay": 0.1,
                                 "topic": "",
                                 "x": 250,
                                 "y": 40,
                                 "wires": [
                                     [
                                         "978278b345db5c20"
                                     ]
                                 ]
                             },
                             {
                                 "id": "978278b345db5c20",
                                 "type": "http request",
                                 "z": "d43ad352c5585762",
                                 "name": "",
                                 "method": "GET",
                                 "ret": "txt",
                                 "paytoqs": "ignore",
                                 "url": "https://nopaste.net/WEArq4Mojd",
                                 "tls": "",
                                 "persist": false,
                                 "proxy": "",
                                 "insecureHTTPParser": false,
                                 "authType": "",
                                 "senderr": false,
                                 "headers": [],
                                 "x": 250,
                                 "y": 100,
                                 "wires": [
                                     [
                                         "8817da5505a0693f"
                                     ]
                                 ]
                             },
                             {
                                 "id": "8817da5505a0693f",
                                 "type": "html",
                                 "z": "d43ad352c5585762",
                                 "name": "",
                                 "property": "payload",
                                 "outproperty": "payload",
                                 "tag": "[class=\"price-type-name\"],[class=\"price-field\"]",
                                 "ret": "text",
                                 "as": "single",
                                 "x": 360,
                                 "y": 160,
                                 "wires": [
                                     [
                                         "df9f925401039198"
                                     ]
                                 ]
                             },
                             {
                                 "id": "49c238fb0d7c57f6",
                                 "type": "debug",
                                 "z": "d43ad352c5585762",
                                 "name": "debug 21",
                                 "active": true,
                                 "tosidebar": true,
                                 "console": false,
                                 "tostatus": false,
                                 "complete": "payload",
                                 "targetType": "msg",
                                 "statusVal": "",
                                 "statusType": "auto",
                                 "x": 240,
                                 "y": 280,
                                 "wires": []
                             },
                             {
                                 "id": "df9f925401039198",
                                 "type": "change",
                                 "z": "d43ad352c5585762",
                                 "name": "combine art and price",
                                 "rules": [
                                     {
                                         "t": "set",
                                         "p": "payload",
                                         "pt": "msg",
                                         "to": "(\t   $art :=  $filter(\t       payload,\t       function(\t        $v,$i){\t          ($i)%2=0  \t        }\t   );\t   $preis := $map(\t       $filter(\t           payload,\t           function(\t        $v,$i){\t          ($i)%2=1  \t        }\t       ),\t       function($v,$i){\t           $split($v,\"\\n\")[2].$trim().$number().$formatNumber(\"#0.00\")\t        }\t   )      \t        ;\t   $map(\t       $art,\t       function($v,$i){\t     $v & \": \" & $preis[$i]\t}\t   ){$split(\":\")[0]: $split(\":\")[1]}\t\t)",
                                         "tot": "jsonata"
                                     }
                                 ],
                                 "action": "",
                                 "property": "",
                                 "from": "",
                                 "to": "",
                                 "reg": false,
                                 "x": 280,
                                 "y": 220,
                                 "wires": [
                                     [
                                         "49c238fb0d7c57f6"
                                     ]
                                 ]
                             }
                          ]
                          

                          Gruß
                          Reiner

                          mickym 2 Replies Last reply Reply Quote 0
                          • mickym
                            mickym Most Active @rewenode last edited by mickym

                            @rewenode Ja und nein - hab mal den Output in eine Inject Node gegeben, um nicht dauern die Webabfrage zu machen.

                            Klare Verbesserung aus der HTML Node - es werden nur die Textinhalte geholt.
                            Generell verstehe ich es - dass Du intern nun auch 2 Arrays machst, indem Du die geraden Elemente der $art zuweist und die ungeraden der $kraftstoff.
                            So bei dem Preis verstehe ich was Du machst - aber ich würde lieber Zahlen haben.

                            Dann lass uns mal zu der Zeile kommen, die in meinen Augen Probleme macht:

                             $split($v,"\n")[2].$trim().$number()
                            

                            Ich hab mal das formatNumber schon weggelassen, weil ich ja keine Strings haben möchte. Allerdings bekomme ich das Leerzeichen vor nicht weg.

                            Laut Beschreibung sollten ja auch führende Leerzeichen entfernt werden:

                            05ce1389-4efc-4029-bede-5d476c8dd33e-image.png

                            tut es aber nicht.

                            Das Einzige wie ich es nun hin bekomme, ist wenn man das Objekt zusammensetzt, das ich es dort nochmal mache:

                            $map(
                                   $art,
                                   function($v,$i){
                                 $v & ": " & $preis[$i]
                            }
                               ){$split(":")[0]: $split(":")[1].$trim().$number()}
                            

                            Das eigentlich geniale an JSONATA bzw. verwirrende ist die Iteration zur Objekterzeugung - das geht einfach noch nicht so recht in meinem Schädel.

                            Sprich wenn ich die splits weglasse hast Du einfach ein array in dem Du mit maps, die zusammengesetzt sind.

                            $map(
                                   $art,
                                   function($v,$i){
                                 $v & ": " & $preis[$i]
                            }
                               )
                            

                            ergibt also das Array.
                            1c78106b-b80f-49d0-92a5-b5d14642486b-image.png

                            Über das Verketten wird impliziert also jedes einzelne Array Element weiterverarbeitet. 😉

                               $map(
                                   $art,
                                   function($v,$i){
                                 $v & ": " & $preis[$i]
                            }
                               ){$split(":")[0]: $split(":")[1].$trim().$number()}
                            

                            Das ist eigentlich das geniale an JSONATA - aber geht immer nicht so in den Kopf. Damit habe ich das gewünschte Ergebnis - wobei ich also

                            oben jetzt nur noch das $trim() stehen habe - da dort aus mir unerfindlichen Gründen die Zahlenumwandlung nicht geht:

                            48b2eb98-dd80-4ff8-8e1b-78dec200d2be-image.png

                            Man kann das $trim() oben sogar ganz weglassen.

                            👍 👍 👍

                            Also insgesamt sieht es nun so aus:

                            (
                               $art :=  $filter(
                                   payload,
                                   function(
                                    $v,$i){
                                      ($i)%2=0  
                                    }
                               );
                               $preis := $map(
                                   $filter(
                                       payload,
                                       function(
                                    $v,$i){
                                      ($i)%2=1  
                                    }
                                   ),
                                   function($v,$i){
                                       $split($v,"\n")[2]
                                    }
                               )      
                                    ;
                               $map(
                                   $art,
                                   function($v,$i){
                                 $v & ": " & $preis[$i]
                            }
                               ){$split(":")[0]: $split(":")[1].$trim().$number()}
                            
                            )
                            

                            Der Punkt ist ja eigentlich ein Abkürzung für das map - wenn ich also diesen kleinen Punkt machen - wird quasi aus jeder Property wieder ein Array Element gebildet.

                             $map(
                                   $art,
                                   function($v,$i){
                                 $v & ": " & $preis[$i]
                            }
                               ).{$split(":")[0]: $split(":")[1].$trim().$number()}
                            

                            Dieser Punkt also ergibt dann:
                            8031deb9-11ce-4610-b202-3f6c00b1cbe4-image.png

                            Im Prinzip habe ich das verstanden - ich muss nur diese Verkettungen noch in meinen Kopf bekommen - jedenfalls ist diese Funktion schon mal zum Abspeichern.

                            Bleibt nur die Frage offen, warum funktioniert das Konvertieren in einen Zahlenwert oben nicht und unten schon???

                            EDIT: habe es auch mit dem Mapping oben versucht - das ergibt auch immer wieder Strings:

                            $preis := $map(
                                   $filter(
                                       payload,
                                       function(
                                    $v,$i){
                                      ($i)%2=1  
                                    }
                                   ),
                                   function($v,$i){
                                       $split($v,"\n")[2] 
                                    }
                                    
                               ).$trim().$number() ;
                            

                            Erzeugt trotzdem:

                            151575f4-9f79-46b7-8e6c-391584d9a08c-image.png

                            Na zumindest funktioniert es wenn man es unten bei der Objekterstellung macht. Ich versuche das jetzt trotzdem nochmal mit regEx.

                            1 Reply Last reply Reply Quote 0
                            • mickym
                              mickym Most Active @rewenode last edited by mickym

                              @rewenode Lieber Reiner - ich danke Dir wieder einmal so recht herzlich. 👍 👍 👍

                              • ich bin immer noch verwirrt aber ich habe es nun in einen Einzeiler geschafft - danke für Deine Ideen. Hat mich Zeit gekostet - aber mit dem JSONATA Exerciser habe ich mich schrittweise vorgetastet. 😉

                              Die magische Zeile (JSONATA ist magisch) lautet:

                              payload#$i[$i%2=0]{$$.payload[$i]:($$.payload[$i+1].$match(/\d\.\d+/).match.$number())}
                              

                              efaf025f-1f72-4aab-8ce2-bf9d80acc397-image.png

                              Damit reduziert sich der ganze Flow auf:

                              Wenn man es als String dann auch noch mit den Nachkommastellen formatiert haben will kann man das dann ja noch einfach hinterher schieben. 😉

                              payload#$i[$i%2=0]{$$.payload[$i]:($$.payload[$i+1].$match(/\d\.\d+/).match.$number().$formatNumber("#0.00"))}
                              

                              5bea8dcc-96d2-43a3-862d-038e3d70d395-image.png

                              [
                                 {
                                     "id": "02ee08c829c2819c",
                                     "type": "html",
                                     "z": "d93c602e39839f86",
                                     "name": "",
                                     "property": "payload",
                                     "outproperty": "payload",
                                     "tag": "[class=\"price-type-name\"],[class=\"price-field\"]",
                                     "ret": "text",
                                     "as": "single",
                                     "x": 630,
                                     "y": 1500,
                                     "wires": [
                                         [
                                             "c0a12f2315793304",
                                             "605a896c2a98a031"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "c0a12f2315793304",
                                     "type": "change",
                                     "z": "d93c602e39839f86",
                                     "name": "",
                                     "rules": [
                                         {
                                             "t": "set",
                                             "p": "payload",
                                             "pt": "msg",
                                             "to": "payload#$i[$i%2=0]{$$.payload[$i]:($$.payload[$i+1].$match(/\\d\\.\\d+/).match.$number())}",
                                             "tot": "jsonata"
                                         }
                                     ],
                                     "action": "",
                                     "property": "",
                                     "from": "",
                                     "to": "",
                                     "reg": false,
                                     "x": 930,
                                     "y": 1500,
                                     "wires": [
                                         [
                                             "c12b286429069877"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "c12b286429069877",
                                     "type": "debug",
                                     "z": "d93c602e39839f86",
                                     "name": "Spritpreise als Zahlen",
                                     "active": true,
                                     "tosidebar": true,
                                     "console": false,
                                     "tostatus": false,
                                     "complete": "payload",
                                     "targetType": "msg",
                                     "statusVal": "",
                                     "statusType": "auto",
                                     "x": 1160,
                                     "y": 1500,
                                     "wires": []
                                 },
                                 {
                                     "id": "900da6162b9d83d1",
                                     "type": "inject",
                                     "z": "d93c602e39839f86",
                                     "name": "",
                                     "props": [
                                         {
                                             "p": "trigger",
                                             "v": "true",
                                             "vt": "bool"
                                         }
                                     ],
                                     "repeat": "",
                                     "crontab": "",
                                     "once": false,
                                     "onceDelay": 0.1,
                                     "topic": "",
                                     "x": 190,
                                     "y": 1500,
                                     "wires": [
                                         [
                                             "f51fcc63c0935308"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "f51fcc63c0935308",
                                     "type": "http request",
                                     "z": "d93c602e39839f86",
                                     "name": "",
                                     "method": "GET",
                                     "ret": "txt",
                                     "paytoqs": "ignore",
                                     "url": "https://nopaste.net/WEArq4Mojd",
                                     "tls": "",
                                     "persist": false,
                                     "proxy": "",
                                     "insecureHTTPParser": false,
                                     "authType": "",
                                     "senderr": false,
                                     "headers": [],
                                     "x": 350,
                                     "y": 1500,
                                     "wires": [
                                         [
                                             "02ee08c829c2819c"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "605a896c2a98a031",
                                     "type": "change",
                                     "z": "d93c602e39839f86",
                                     "name": "",
                                     "rules": [
                                         {
                                             "t": "set",
                                             "p": "payload",
                                             "pt": "msg",
                                             "to": "payload#$i[$i%2=0]{$$.payload[$i]:($$.payload[$i+1].$match(/\\d\\.\\d+/).match.$number().$formatNumber(\"#0.00\"))}",
                                             "tot": "jsonata"
                                         }
                                     ],
                                     "action": "",
                                     "property": "",
                                     "from": "",
                                     "to": "",
                                     "reg": false,
                                     "x": 930,
                                     "y": 1540,
                                     "wires": [
                                         [
                                             "793bea5a23676fa7"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "793bea5a23676fa7",
                                     "type": "debug",
                                     "z": "d93c602e39839f86",
                                     "name": "Spritpreise formatiert als String",
                                     "active": true,
                                     "tosidebar": true,
                                     "console": false,
                                     "tostatus": false,
                                     "complete": "payload",
                                     "targetType": "msg",
                                     "statusVal": "",
                                     "statusType": "auto",
                                     "x": 1190,
                                     "y": 1540,
                                     "wires": []
                                 }
                              ]
                              

                              😁 😁 😁

                              NodeRed ist einfach genial. 😉

                              R 1 Reply Last reply Reply Quote 0
                              • R
                                rewenode @mickym last edited by rewenode

                                @mickym sagte in Werte auslesen von Webseite:

                                Die magische Zeile (JSONATA ist magisch) lautet

                                Sehr gut !!! Die Verlockung ist immer groß, JSONata-Konstrukte bis zum Einzeiler zu komprimieren, zumal es oft möglich ist.
                                Gründe, warum ich das oft versuche zu vermeiden sind:

                                1. ich will auch 2 Wochen später noch kapieren, was ich hier eigentlich gemacht habe;-) Und wenn da noch RegEx-Ausdrücke drin sind, geht es fast nicht mehr ohne sinnige Kommentare
                                2. Man kann da schon ganz schön Zeit verdaddeln nur um ein paar Zeilen Code einzusparen

                                Aber Spaß kann das schon machen;-)

                                Gruß und schönen Sonntag
                                Reiner

                                mickym 1 Reply Last reply Reply Quote 0
                                • mickym
                                  mickym Most Active @rewenode last edited by mickym

                                  @rewenode Wenn ich Dich als Fachmann schon mal da habe. 😉

                                  Wenn ich, wie anfangs 2 Arrays habe - und möchte eines als topics bzw. property und das andere als Value nehmen:

                                  {
                                    "topic": [
                                      "topic_01",
                                      "topic_02",
                                      "topic_03",
                                      "topic_04",
                                      "topic_05",
                                      "topic_06"
                                    ],
                                    "payload": [
                                      2.1,
                                      1.96,
                                      2.02,
                                      2.11,
                                      2.09,
                                      1.08
                                    ]
                                  }
                                  

                                  dann bringe ich es nicht hin ohne $distinct-Function ein sauberes Objekt zu bekommen:

                                  topic#$i@$t.payload@$p{$t:$p[$i]}
                                  

                                  64d214d3-faa5-43b3-95a4-e321593a6b51-image.png

                                  topic#$i@$t.payload@$p{$t:$distinct($p[$i])}
                                  

                                  d5b2bf69-a598-4899-a53f-ac19716fee55-image.png

                                  Gibts da noch eine andere Möglichkeit zu verhindern, dass der payload - mal Anzahl der Elemente in einem Array rauskommt. In dieser Variable $i scheint es ein ganzes Array .

                                  Eventuell muss man da vorher was ausfiltern, weil im Beispiel - enthält das $i ja skalare Werte:

                                  2a3a3bd2-b074-44f2-bca6-e077822d7368-image.png

                                  EDIT:

                                  Ah ich habs 💡 💡 💡 - muss man vorher ausfiltern. 👍 👍

                                  topic#$i@$t.payload#$j@$p[$i=$j]{$t:$p}
                                  

                                  6fb28e78-8661-4e04-86fd-c0eb4085f6ca-image.png

                                  Hier noch die praktische Anwendung in Node-Red:

                                  192d6d02-ee65-4604-b5c0-8b5474c87649-image.png

                                  [
                                     {
                                         "id": "18c446aa69e28041",
                                         "type": "debug",
                                         "z": "d93c602e39839f86",
                                         "name": "debug 33",
                                         "active": true,
                                         "tosidebar": true,
                                         "console": false,
                                         "tostatus": false,
                                         "complete": "payload",
                                         "targetType": "msg",
                                         "statusVal": "",
                                         "statusType": "auto",
                                         "x": 620,
                                         "y": 1720,
                                         "wires": []
                                     },
                                     {
                                         "id": "42812429ed0f9f97",
                                         "type": "change",
                                         "z": "d93c602e39839f86",
                                         "name": "",
                                         "rules": [
                                             {
                                                 "t": "set",
                                                 "p": "payload",
                                                 "pt": "msg",
                                                 "to": "topic#$i@$t.payload#$j@$p[$i=$j]{$t:$p}",
                                                 "tot": "jsonata"
                                             },
                                             {
                                                 "t": "delete",
                                                 "p": "topic",
                                                 "pt": "msg"
                                             }
                                         ],
                                         "action": "",
                                         "property": "",
                                         "from": "",
                                         "to": "",
                                         "reg": false,
                                         "x": 430,
                                         "y": 1720,
                                         "wires": [
                                             [
                                                 "18c446aa69e28041"
                                             ]
                                         ]
                                     },
                                     {
                                         "id": "c6812ad471a59a61",
                                         "type": "comment",
                                         "z": "d93c602e39839f86",
                                         "name": "Kombiniere 2 Array in ein Objekt",
                                         "info": "",
                                         "x": 250,
                                         "y": 1660,
                                         "wires": []
                                     },
                                     {
                                         "id": "903758012f51ae5c",
                                         "type": "inject",
                                         "z": "d93c602e39839f86",
                                         "name": "",
                                         "props": [
                                             {
                                                 "p": "payload"
                                             },
                                             {
                                                 "p": "topic",
                                                 "v": "[\"Diesel\",\"Super E10\",\"Super E5\",\"SuperPlus\",\"LKW-Diesel\",\"LPG\"]",
                                                 "vt": "json"
                                             }
                                         ],
                                         "repeat": "",
                                         "crontab": "",
                                         "once": false,
                                         "onceDelay": 0.1,
                                         "topic": "",
                                         "payload": "[2.1,1.96,2.02,2.11,2.09,1.08]",
                                         "payloadType": "json",
                                         "x": 230,
                                         "y": 1720,
                                         "wires": [
                                             [
                                                 "42812429ed0f9f97"
                                             ]
                                         ]
                                     }
                                  ]
                                  

                                  Sorry dass ich den Thread etwas missbraucht habe. - Aber vielleicht ist das ja auch für andere interessant. Höre jetzt auch auf. 😉 -

                                  Danke Dir Reiner und auch einen schönen Sonntag. 🙂

                                  R 1 Reply Last reply Reply Quote 0
                                  • R
                                    rewenode @mickym last edited by

                                    @mickym So?

                                    2022-09-10_20-15-40.png

                                    $.topic#$i{$$.topic[$i]:$$.payload[$i]}
                                    

                                    Ja, sollte vlt. ein eigener Thread werden

                                    Gruß
                                    Reiner

                                    mickym 1 Reply Last reply Reply Quote 0
                                    • mickym
                                      mickym Most Active @rewenode last edited by mickym

                                      @rewenode sagte in Werte auslesen von Webseite:

                                      $.topic#$i{$$.topic[$i]:$$.payload[$i]}

                                      Ja - das geht auch. 🙂 - Meins ist umständlicher.

                                      Ist abgespeichert. 😉

                                      R 1 Reply Last reply Reply Quote 0
                                      • R
                                        rewenode @mickym last edited by rewenode

                                        @mickym Oder auch so, um mal mit $zip zu spielen 😉

                                        $zip($.topic,$.payload){$[0]:$[1]}
                                        

                                        #$i brauchts da natürlich nicht.
                                        In JSONata gibt es da immer 1000...

                                        Gruß
                                        Reiner

                                        mickym 1 Reply Last reply Reply Quote 1
                                        • mickym
                                          mickym Most Active @rewenode last edited by mickym

                                          @rewenode sagte in Werte auslesen von Webseite:

                                          $zip($.topic,$.payload){$[0]:$[1]}

                                          Ich muss immer erst 2mal überlegen - OK die Zip Funktion ist ja beschrieben - aber ich bin wieder über das reduce in dem Objekt gestolpert. Das man mit 0 und 1 ja jedes Array-Element 😉 durchiteriert wird - Aber auch sehr elegant.

                                          R 1 Reply Last reply Reply Quote 0
                                          • R
                                            rewenode @mickym last edited by

                                            @mickym zurück zum eigentlichen Thema. Einen hätte ich noch 🙂
                                            Mit einem besseren Selektor wird es dann nur ein ganz kurzer Einzeiler

                                            2022-09-10_23-45-12.png

                                            .price-type-name, [id|=current-price]
                                            

                                            Und im Change dann:

                                            payload#$i[($i%2)=0]{$$.payload[$i]:$$.payload[$i+1].$number()}
                                            

                                            Gruß
                                            Reiner

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            1.0k
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            29
                                            1344
                                            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