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.
    • 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
                    • mickym
                      mickym Most Active @rewenode last edited by mickym

                      @rewenode sagte in Werte auslesen von Webseite:

                      Das mit dem JSONATA ist ja nun nach den vorherigen Ausführungen zu erklären 😉 - aber mit den CSS Selektoren bist Du mir im Vorteil - auch wenn es in der Hilfe zur HTML Node verlinkt ist: https://github.com/fb55/css-select#user-content-supported-selectors

                      Aber ich bevorzuge dann die andere Schreibweise mit [class="price-type-name"] und dann die Vergleiche zu machen. Das mit dem vorangestellten Punkt einer Klasse entspricht - ist mir bei CSS zwar prinzipiell bekannt, aber hätte ich hier nie verwendet. 😉

                      6476581b-e6f7-4122-b9a5-095773bfe10d-image.png

                      Ok - ich merke - ich beginne das mit den CSS Selektoren erst langsam zu verstehen. Dann geht das was @merlin2k11 gesagt hat, dass es nicht exakt übereinstimmen muss. 🙂 - Klasse.

                      Dann gehen aber noch ein paar mehr Selektoren:

                      04028030-29a5-44cf-b1cb-e0fb117bb227-image.png

                      7e9d3149-10f9-44fe-9d85-416fead1dfc1-image.png

                      Ich hab heute jedenfalls wieder einiges von Dir gelernt.

                      Vielen Dank! 🙂

                      EDIT:

                      Noch eine Info - wenn man eine Standalone Version von NodeRed nutzt, kann man auch den doppelten Kontextspeicher verwenden, dann muss man für solche Tests keine Webanfragen machen. 😉

                      463bbd59-2e96-47f8-ae66-47ecebf6612c-image.png

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

                        @mickym sagte in Werte auslesen von Webseite:

                        Noch eine Info - wenn man eine Standalone Version von NodeRed nutzt, kann man auch den doppelten Kontextspeicher verwenden, dann muss man für solche Tests keine Webanfragen machen.

                        👍 wieder was gelernt

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

                          @rewenode Ich mach mal noch einen neuen Thread auf - weil ich immer wieder auf Verständnisprobleme stoße.

                          Aus einem anderen Thread - gabs auch eine Anforderung - ich habs zwar geschafft, fand das aber wieder umständlich. Um den Thread nicht vollständig hier zu kapern, habe ich mal einen eigenen aufgemacht: https://forum.iobroker.net/topic/57856/jsonata-verständnisprobleme

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

                            ähm ... topic#$i@$t.payload#$j@$p[$i=$j]{$t:$p}
                            Ihr müsst doch was geraucht haben... was auch immer es war ich will es auch damit ich verstehe was ihr da gebaut habt. Wie war das? Das ist Magisch?

                            Ich habe auch nach dem dritten mal lesen nur Fragezeichen und keine Ahnung was ihr da gebaut habt - aber es klappt und das war ja mein Ziel 🙂

                            Ich danke euch 🎆 🎆 🎈

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

                              @merlin2k11 Wie gesagt die finale Version sieht nun so aus:

                              69d865aa-31db-4589-84d5-aa9d06f91c6e-image.png

                              [
                                 {
                                     "id": "84644114056d7367",
                                     "type": "inject",
                                     "z": "d93c602e39839f86",
                                     "name": "",
                                     "props": [
                                         {
                                             "p": "trigger",
                                             "v": "true",
                                             "vt": "bool"
                                         }
                                     ],
                                     "repeat": "",
                                     "crontab": "",
                                     "once": false,
                                     "onceDelay": 0.1,
                                     "topic": "",
                                     "x": 170,
                                     "y": 1940,
                                     "wires": [
                                         [
                                             "18b108dc8d983dbe"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "18b108dc8d983dbe",
                                     "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": 330,
                                     "y": 1940,
                                     "wires": [
                                         [
                                             "58c77855680f94e2"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "58c77855680f94e2",
                                     "type": "html",
                                     "z": "d93c602e39839f86",
                                     "name": "",
                                     "property": "payload",
                                     "outproperty": "payload",
                                     "tag": ".price-type-name, [id|=current-price]",
                                     "ret": "html",
                                     "as": "single",
                                     "x": 620,
                                     "y": 1940,
                                     "wires": [
                                         [
                                             "06b25788793b83a0"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "74f9010595f6e982",
                                     "type": "debug",
                                     "z": "d93c602e39839f86",
                                     "name": "[id|=current-price]",
                                     "active": true,
                                     "tosidebar": true,
                                     "console": false,
                                     "tostatus": false,
                                     "complete": "payload",
                                     "targetType": "msg",
                                     "statusVal": "",
                                     "statusType": "auto",
                                     "x": 1190,
                                     "y": 1940,
                                     "wires": []
                                 },
                                 {
                                     "id": "06b25788793b83a0",
                                     "type": "change",
                                     "z": "d93c602e39839f86",
                                     "name": "",
                                     "rules": [
                                         {
                                             "t": "set",
                                             "p": "payload",
                                             "pt": "msg",
                                             "to": "payload#$i[($i%2)=0]{$$.payload[$i]:$$.payload[$i+1].$number()}",
                                             "tot": "jsonata"
                                         }
                                     ],
                                     "action": "",
                                     "property": "",
                                     "from": "",
                                     "to": "",
                                     "reg": false,
                                     "x": 930,
                                     "y": 1940,
                                     "wires": [
                                         [
                                             "74f9010595f6e982"
                                         ]
                                     ]
                                 }
                              ]
                              

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              550
                              Online

                              31.7k
                              Users

                              79.8k
                              Topics

                              1.3m
                              Posts

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