Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Node-Red
  5. [Gelöst] Werte von Clever Tanken

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    324

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.5k

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

[Gelöst] Werte von Clever Tanken

Geplant Angeheftet Gesperrt Verschoben Node-Red
29 Beiträge 6 Kommentatoren 2.2k Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • R rewenode

    @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

    mickymM Online
    mickymM Online
    mickym
    Most Active
    schrieb am zuletzt editiert von mickym
    #16

    @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.

    :+1: :+1: :+1:

    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.

    Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

    1 Antwort Letzte Antwort
    0
    • R rewenode

      @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

      mickymM Online
      mickymM Online
      mickym
      Most Active
      schrieb am zuletzt editiert von mickym
      #17

      @rewenode Lieber Reiner - ich danke Dir wieder einmal so recht herzlich. :+1: :+1: :+1:

      • 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": []
         }
      ]
      

      :grin: :grin: :grin:

      NodeRed ist einfach genial. ;)

      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

      R 1 Antwort Letzte Antwort
      0
      • mickymM mickym

        @rewenode Lieber Reiner - ich danke Dir wieder einmal so recht herzlich. :+1: :+1: :+1:

        • 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": []
           }
        ]
        

        :grin: :grin: :grin:

        NodeRed ist einfach genial. ;)

        R Offline
        R Offline
        rewenode
        schrieb am zuletzt editiert von rewenode
        #18

        @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

        mickymM 1 Antwort Letzte Antwort
        0
        • R 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

          mickymM Online
          mickymM Online
          mickym
          Most Active
          schrieb am zuletzt editiert von mickym
          #19

          @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 :bulb: :bulb: :bulb: - muss man vorher ausfiltern. :+1: :+1:

          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. :)

          Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

          R 1 Antwort Letzte Antwort
          0
          • mickymM 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 :bulb: :bulb: :bulb: - muss man vorher ausfiltern. :+1: :+1:

            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 Offline
            R Offline
            rewenode
            schrieb am zuletzt editiert von
            #20

            @mickym So?

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

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

            Ja, sollte vlt. ein eigener Thread werden

            Gruß
            Reiner

            mickymM 1 Antwort Letzte Antwort
            0
            • R rewenode

              @mickym So?

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

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

              Ja, sollte vlt. ein eigener Thread werden

              Gruß
              Reiner

              mickymM Online
              mickymM Online
              mickym
              Most Active
              schrieb am zuletzt editiert von mickym
              #21

              @rewenode sagte in Werte auslesen von Webseite:

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

              Ja - das geht auch. :) - Meins ist umständlicher.

              Ist abgespeichert. ;)

              Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

              R 1 Antwort Letzte Antwort
              0
              • mickymM 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 Offline
                R Offline
                rewenode
                schrieb am zuletzt editiert von rewenode
                #22

                @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

                mickymM 1 Antwort Letzte Antwort
                1
                • R 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

                  mickymM Online
                  mickymM Online
                  mickym
                  Most Active
                  schrieb am zuletzt editiert von mickym
                  #23

                  @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.

                  Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                  R 1 Antwort Letzte Antwort
                  0
                  • mickymM 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 Offline
                    R Offline
                    rewenode
                    schrieb am zuletzt editiert von
                    #24

                    @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

                    mickymM 1 Antwort Letzte Antwort
                    0
                    • R rewenode

                      @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

                      mickymM Online
                      mickymM Online
                      mickym
                      Most Active
                      schrieb am zuletzt editiert von mickym
                      #25

                      @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

                      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                      R 1 Antwort Letzte Antwort
                      0
                      • mickymM 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 Offline
                        R Offline
                        rewenode
                        schrieb am zuletzt editiert von
                        #26

                        @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.

                        :+1: wieder was gelernt

                        mickymM 1 Antwort Letzte Antwort
                        0
                        • R rewenode

                          @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.

                          :+1: wieder was gelernt

                          mickymM Online
                          mickymM Online
                          mickym
                          Most Active
                          schrieb am zuletzt editiert von
                          #27

                          @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

                          Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                          1 Antwort Letzte Antwort
                          0
                          • M Offline
                            M Offline
                            merlin2k11
                            schrieb am zuletzt editiert von
                            #28

                            ä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 :fireworks: :fireworks: :balloon:

                            mickymM 1 Antwort Letzte Antwort
                            0
                            • M merlin2k11

                              ä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 :fireworks: :fireworks: :balloon:

                              mickymM Online
                              mickymM Online
                              mickym
                              Most Active
                              schrieb am zuletzt editiert von mickym
                              #29

                              @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"
                                         ]
                                     ]
                                 }
                              ]
                              

                              Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                              1 Antwort Letzte Antwort
                              0
                              Antworten
                              • In einem neuen Thema antworten
                              Anmelden zum Antworten
                              • Älteste zuerst
                              • Neuste zuerst
                              • Meiste Stimmen


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              600

                              Online

                              32.5k

                              Benutzer

                              81.7k

                              Themen

                              1.3m

                              Beiträge
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                              ioBroker Community 2014-2025
                              logo
                              • Anmelden

                              • Du hast noch kein Konto? Registrieren

                              • Anmelden oder registrieren, um zu suchen
                              • Erster Beitrag
                                Letzter Beitrag
                              0
                              • Home
                              • Aktuell
                              • Tags
                              • Ungelesen 0
                              • Kategorien
                              • Unreplied
                              • Beliebt
                              • GitHub
                              • Docu
                              • Hilfe