Skip to content
  • 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
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Node-Red
  5. Node-red: Spritpreise einlesen

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

Node-red: Spritpreise einlesen

Geplant Angeheftet Gesperrt Verschoben Node-Red
125 Beiträge 24 Kommentatoren 37.6k Aufrufe
  • Ä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.
  • C Offline
    C Offline
    chaos99
    schrieb am zuletzt editiert von
    #58

    Guten Morgen,

    so ich hab mich da mal durchgelesen , und habe es soweit auch hinbekommen, ich habe jetzt aber das problem das mir in Vis nicht alle abfragen angezeigt werden,

    ich habe mir die Spritpreis abfrage mit den 3 Tankstellen und der festen ID genommen , das geht soweit auch

    aber bei vis oder IObroker objekte werden mir im node-red adapter nur einmal sprit preis und einmal staions angezeigt,

    ich muss doch jetzt irgendwo die einzelnen abfragen von NODE-RED zufügen können damit ich sie dann bei vis sehen kann

    aber wie mache ich das?

    edit:

    sorry zur gleichen zeit , ich lese mir den beitrag mal durch vielleicht wird ja meine frage schon beantwortet

    1 Antwort Letzte Antwort
    0
    • HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von
      #59

      Du musst ggf. In den ausgabenodes für iobroker die Namen der variablen anpassen und den Haken bei variable erstellen, wenn nicht vorhanden setzen.

      @michael:

      Super Zusammenfassung! Habe jetzt Urlaub und genug mit node-red gespielt, dass ich denke, dass ich die doku beginnen kann.

      Werde da von dir bestimmt was klauen.

      Gesendet von meinem LIFETAB_S785X mit Tapatalk

      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      1 Antwort Letzte Antwort
      0
      • ruhr70R Offline
        ruhr70R Offline
        ruhr70
        schrieb am zuletzt editiert von
        #60

        Hey, Du bist ja schnell 😉

        Nur 50 Sekunden nach der Zusammenfassung hast Du schon alles ausprobiert 😄 :mrgreen:

        Ich bin mir nicht sicher, ob ich Deinen offenen Punkt genau verstehe. Wenn Du so weit gekommen bist, kann es das eigentlich nicht sein:

        327_2015-05-10_tankerk_nig_drei_detailabfragen.png

        In dem derzeitigen Flow, musst Du drei URLs mit den Detailabfragen für die jeweilige Tankstelle in den einzelnen Nodes eintragen.

        Ich würde dann mit den Debug Bausteinen probieren, wo es hängt und mich herantasten.

        Z.B. sollte nach jeder der drei Detailabfragen der Debug Baustein aktiv sein.

        Und bei allen drei muss die Rückmeldung von Tankerkönig zu sehen sein.

        VG,

        Michael

        Adapter: Fritzbox, Unify Circuit
        Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

        1 Antwort Letzte Antwort
        0
        • ruhr70R Offline
          ruhr70R Offline
          ruhr70
          schrieb am zuletzt editiert von
          #61

          @Homoran:

          @michael:

          Habe jetzt Urlaub und genug mit node-red gespielt, dass ich denke, dass ich die doku beginnen kann.

          Gesendet von meinem LIFETAB_S785X mit Tapatalk `

          Na dann wünsche ich Dir doch einen tollen Urlaub! 🙂

          Ich bin auf die Doku gespannt!

          Auch zum lernen ist Node-Red einfach genial, da man so schnell die Debug setzen kann und während das Aktivieren und Deaktivieren während der Laufzeit funktioniert.

          Ich kann mir gut vorstellen, dass man das eine oder andere Rundumsorglos-Paket, wie Du es nanntest, damit realisieren kann (Flow, Doku, Widget), um es als erweiterten Adapterersatz verwenden zu können. Mit Node-red bekommt man auch als Rookie was hin :mrgreen: . Einen Adapter werde ich diese Dekade nicht mehr selbst schreiben 😉

          Noch einmal… Schönen Urlaub! 🙂

          P.S.: danke für den Tipp mit dem Pi 2. Wurde schnell und sicher geliefert.

          Adapter: Fritzbox, Unify Circuit
          Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

          1 Antwort Letzte Antwort
          0
          • HomoranH Nicht stören
            HomoranH Nicht stören
            Homoran
            Global Moderator Administrators
            schrieb am zuletzt editiert von
            #62

            Danke,

            wird aber eher ein arbeitsurlaub.

            Ich habe node-red auch zum spielend lernen benutzt als absoluter no-js user.

            Aber die Vorführung in Kassel und die ersten flows von pix haben schon gewaltig Lust auf mehr gemacht.

            Und die doku kann ich nur schreiben, wenn ich selbst damit gespielt habe. Je mehr Probleme dabei, desto besser wird sie -hoffe ich zumindest.

            Gruß

            Rainer

            Gesendet von meinem LIFETAB_S785X mit Tapatalk

            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            1 Antwort Letzte Antwort
            0
            • C Offline
              C Offline
              chaos99
              schrieb am zuletzt editiert von
              #63

              vielen dank natürlich erstmal für eure hilfe ,

              ne ich habe gestern abend damit angefangen und stehe jetzt vor dem Problem und noch habe ich keine lösung gefunden , dass mir der output nicht angezeigt wird also node red ansich scheint zu stimmen und die werte werden bei Tankkönig abgefragt , aber mir werden die daten nicht unter objekte angezeigt.

              ich hab mal ein Bild angehangen: dort werden ja nur zwei werte angezeigt, aber da sollte ja eigentlich für jede abfrage also benzin , öffnungszeiten und so weiter je ein wert sein also müssten da ja etwa 20 werte stehen (über den daumen 😄 )

              edit:

              ich habe keine ahnung ich habe wirklich nix gemacht , und jetzt sind sie alle da
              343_1.jpg

              1 Antwort Letzte Antwort
              0
              • HomoranH Nicht stören
                HomoranH Nicht stören
                Homoran
                Global Moderator Administrators
                schrieb am zuletzt editiert von
                #64

                Hast du, wie ich oben schon schrieb, die Ausgaben angepasst?

                Gesendet von meinem LIFETAB_S785X mit Tapatalk

                kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                1 Antwort Letzte Antwort
                0
                • ruhr70R Offline
                  ruhr70R Offline
                  ruhr70
                  schrieb am zuletzt editiert von
                  #65

                  mhh… ich würde sagen, dass Du einen anderen Flow aus dem Thread, als in der Kurzbeschreibung unter (4) beschrieben, importiert hast.

                  sprit_preis und sprit_station kommt in dem nicht vor (die Variablen nutze ich in dem Flow mit den vier plus zwei Anzeigen für die beiden dynamischen Tankstellen).

                  Im Flow für das dreier Widget heissen die Variablen alle Tank1_, Tanke2_ Tanke3_, siehe die blauen ioBroker Output Kästchen:

                  http://forum.iobroker.org/download/file … &mode=view

                  Adapter: Fritzbox, Unify Circuit
                  Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                  1 Antwort Letzte Antwort
                  0
                  • C Offline
                    C Offline
                    chaos99
                    schrieb am zuletzt editiert von
                    #66

                    ich hab nix gemacht und auf einmal waren sie alle da, also es ist jetzt alles gut und ich werd das jetzt bei vis einbinden

                    1 Antwort Letzte Antwort
                    0
                    • ruhr70R Offline
                      ruhr70R Offline
                      ruhr70
                      schrieb am zuletzt editiert von
                      #67

                      @chaos99:

                      ich hab nix gemacht und auf einmal waren sie alle da, also es ist jetzt alles gut und ich werd das jetzt bei vis einbinden `

                      ca. 10 Minuten nach dem ersten Deploy? 😉

                      Der Flow wird alle 10 Minuten ausgeführt.

                      Beim inject Node oben links ist das Häkchen "fire once at start" nicht angeklickt.

                      D.h. 10 Minuten warten oder manuell einmal den inject button drücken.

                      Aktualisiert wird alle 10 Minuten (Zeit ist im Inject Node konfigurierbar) oder beim manuellen Inject.

                      Wenn direkt beim deploy abgefragt werden soll, dann muss der Haken bei "fire once at start" gesetzt werden.

                      Ansonsten kann man noch einmal durchatmen und die ersten Werte mit einem feierlichen Klick abholen.

                      Wenn das die Ursache war, bitte kurzer Hinweis. An so etwas denk man ja nicht.

                      Adapter: Fritzbox, Unify Circuit
                      Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                      1 Antwort Letzte Antwort
                      0
                      • C Offline
                        C Offline
                        chaos99
                        schrieb am zuletzt editiert von
                        #68

                        10 min waren das nicht eher 1 stunde , aber ich habe hier auch eine sehr schlechte Internet verbindung ,

                        1 Antwort Letzte Antwort
                        0
                        • P Offline
                          P Offline
                          pix
                          schrieb am zuletzt editiert von
                          #69

                          Hallo,

                          allen, die mit dem Thema nod-red beginnen, kann ich folgenden Tipp geben: Strukturiert von Anfang an Eure ioBroker Variablen, es wird sonst schnell unübersichtlich. ruhr70 hat mich mit seinem geofency-flow inspiriert. Ich habe jetzt alle Objekte aus node-red kategorisiert.
                          261_bildschirmfoto_2015-05-10_um_14.25.34.jpg
                          Natürlich müssen danach evtl. JS-Skript und VIS-Views angepasst werden.

                          Es gibt mehrere Wege zum Ziel. Man kann natürlich automatisiert, je nach Inhalt, die Variable in eine Baumstruktur packen. Für den Anfang geht es aber auch einfach per Hand.

                          Beispiel Tankerkoenig: Ich hole die Infos zu 5 festgelegten Tankstellen (1-5) und zusätzlich die billigste (kann durchaus eine der fünf sein). Die Werte werden dann entsprechend in Baumstruktur auf ioBroker eingeordnet. Eingestellt wird das in den Topic Einstellungen im blauen ioBroker output-Node. Für die Kategorie sprit/Tankstelle01/strasse muss der node so ausgefüllt werden (die zwischenebenen mit Punkt trennen):
                          261_bildschirmfoto_2015-05-10_um_14.25.07.jpg

                          Wenn man sich von Anfang an Gedanken über diese Struktur macht, ist die Übersicht auch bei vielen Node-Red-Projekten garantiert.

                          Gruß

                          Pix

                          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                          1 Antwort Letzte Antwort
                          0
                          • ruhr70R Offline
                            ruhr70R Offline
                            ruhr70
                            schrieb am zuletzt editiert von
                            #70

                            Ich bin ein bisschen beeindruckt, wie viele Flows bei Dir schon Werte ablegen!

                            Da brauchst Du ja keine Adapter mehr.

                            Ja, mit Geofency habe ich angefangen eine Struktur reinzubringen. Der Rest folgt jetzt nach und nach. Der Tipp von Dir ist Gold wert! Nutzt Du Geofency? Owntracks bekommt man schneller zum laufen und mit der Moves Funktion schreibt Owntracks sogar die Wegepunkte. Zumindest für kurze Zeit, dann ist der Akku leer. 😉

                            Klasse Tipp!!

                            Gesendet von iPhone mit Tapatalk

                            Adapter: Fritzbox, Unify Circuit
                            Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

                            1 Antwort Letzte Antwort
                            0
                            • P Offline
                              P Offline
                              pix
                              schrieb am zuletzt editiert von
                              #71

                              Hallo,

                              ich habe erstmal versucht, einige alte CCU.IO Adapter zu ersetzen. Zuerst quick & dirty, doch jetzt muss langsam Ordnung rein, damit ich auch in 6 Monaten noch verstehe, was ich heute angestellt habe. Ich habe jetzt meine flows alle umgestellt (nur Kleinschreibung, Baumstruktur, evtl. spätere Zusatzgeräte oder -quellen berücksichtigt). Die Jetzt werden die ioBroker Objekte doch so halb dynamisch angelegt, das macht es übersichtlicher. Es kommen auch fast wöchentlich neue Datenquellen hinzu (Wetterportale, Verkehrsdaten, Bus & Bahn, Preise für alles mögliche).

                              Geofency habe ich mal installiert, nutze es aber noch nicht. Ich möchte gern iBeacons verwenden. Ich habe zwar noch keine bestellt, aber schon eine Idee für ein Projekt.

                              Gruß

                              pix

                              ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                              1 Antwort Letzte Antwort
                              0
                              • V Offline
                                V Offline
                                vader722
                                schrieb am zuletzt editiert von
                                #72

                                Moin !

                                Oh iBeacons klingt interessant. Ich hab meine Raspis zu iBeacons ertürchtigt, aber so richtig überzeugt bin ich noch nicht. Am Anfang klappte es ganz gut, aber inzwischen ist die Erkennung und die Entfernungsauswertung seeeehr bescheiden…aber vielleicht liegts auch an den Bluetooth Adaptern. Mal schauen ob deine iBeacons besser funktionieren 🙂

                                Gruss Marco

                                1 Antwort Letzte Antwort
                                0
                                • J Offline
                                  J Offline
                                  Jens1809
                                  schrieb am zuletzt editiert von
                                  #73

                                  Hi,

                                  auch wenn es vielleicht nicht mehr ganz aktuell ist aber hier ein etwas anderer Lösungsansatz von mir.

                                  Ich mag nicht tausend verschiedene Elemente im Flow zu haben und habe deswegen die ganzen Teile in eine Funktion gepackt die mir einen HTML Table in die Variable schreibt und ich nur noch im VIS die Variable einem HTML Element zuweisen muss. Da ich das Design von Tankekoenig.de als gelungen empfinde habe ich es gleich noch übernommen für die Liste.

                                  Das ganze sieht dann so aus:

                                  267_flow.jpg

                                  267_vis.jpg

                                  [{"id":"2557ff5f.daa8","type":"debug","name":"","active":true,"console":"false","complete":"false","x":508,"y":156,"z":"8f57432c.70a8c","wires":[]},{"id":"fe35f67.f01ca08","type":"function","name":"fncName","func":"var cntItems = msg.payload.stations;\nvar htmlMsg = \"\";\nvar Preis = \"\";\n\nhtmlMsg += ''+\n            ''+\n            '';\n\ncntItems.forEach(function(currentValue, index, Liste) {\n    var Preis = Liste[index].price.toString();\n\thtmlMsg += ''+\n\t\t''+\n\t\t''+\n\t'';\n})\nhtmlMsg += '
                                  
                                  | '+\n\t\t    ''+Preis.substr(0,4)+'<sup>'+Preis.substr(4,1)+'</sup>€'+\n\t\t' | '+\n\t\t\t''+Liste[index].brand+'
                                  '+\n\t\t\t''+Liste[index].street+' '+Liste[index].houseNumber+', '+Liste[index].postCode+' '+Liste[index].place+''+\n\t\t' |
                                  
                                  ';\nmsg.payload = htmlMsg;\nreturn msg;","outputs":1,"noerr":0,"x":378,"y":237,"z":"8f57432c.70a8c","wires":[["2557ff5f.daa8","d4988781.2b6778"]]},{"id":"efd0a14d.102f6","type":"http request","name":"Preisliste","method":"GET","ret":"obj","url":"https://creativecommons.tankerkoenig.de/json/list.php?lat=51.149801800000006&lng=6.867880899999999&rad=6&sort=price&type=e10&apikey=xxxxxxxxxxxxxxxxxx","x":263,"y":144,"z":"8f57432c.70a8c","wires":[["fe35f67.f01ca08"]]},{"id":"efbeae66.10415","type":"inject","name":"","topic":"","payload":"","payloadType":"date","repeat":"1800","crontab":"","once":true,"x":119.666015625,"y":113.3340072631836,"z":"8f57432c.70a8c","wires":[["efd0a14d.102f6"]]},{"id":"d4988781.2b6778","type":"ioBroker out","name":"","topic":"Spritpreisliste","ack":"true","autoCreate":"true","x":537.333984375,"y":290,"z":"8f57432c.70a8c","wires":[]}]
                                  
                                  1 Antwort Letzte Antwort
                                  0
                                  • BluefoxB Offline
                                    BluefoxB Offline
                                    Bluefox
                                    schrieb am zuletzt editiert von
                                    #74

                                    ich denke, es ist Zeit einen Adapter daraus zu machen! ?

                                    1 Antwort Letzte Antwort
                                    0
                                    • S Offline
                                      S Offline
                                      stephan61
                                      schrieb am zuletzt editiert von
                                      #75

                                      Hallo Jens

                                      ich versuche mich gerade in node red und vis einzuarbeiten und test die verschiedenen Flows

                                      wie kann ich von dem Flow die Preise in Vis angezeigt bekommen welches Widget?

                                      Vielen dank im Voraus

                                      Stephan

                                      1 Antwort Letzte Antwort
                                      0
                                      • M Offline
                                        M Offline
                                        MehrCurry
                                        schrieb am zuletzt editiert von
                                        #76

                                        Super Ideen hier im Thread.

                                        Ich habe den Flow mal ein bisschen aufgeräumt - mit Subflows, die wohl nur wenige kennen - eine Art Unterprogramm.

                                        Damit kann man mit nur einem Knoten weitere Tankstellen hinzufügen.

                                        485_bildschirmfoto_2015-08-06_um_22.10.48.png

                                        Man muss lediglich einen Knoten anlegen, mit der ID und dem Topic für die Variablen:

                                        msg.payload="167804fa-e116-4ee7-a287-35634c1d47ac";
                                        msg.topic="node-red.0.Tankstelle01";
                                        return msg;
                                        
                                        
                                        [{"id":"da6abe3d.25954","type":"subflow","name":"Nachkommastellen berechnen","in":[{"x":530.6428833007812,"y":296.33337783813477,"wires":[{"id":"c1e6b599.3e1948"}]}],"out":[{"x":947.6428852081299,"y":267.76194953918457,"wires":[{"id":"c1e6b599.3e1948","port":0}]},{"x":949.0714740753174,"y":324.9047842025757,"wires":[{"id":"c1e6b599.3e1948","port":1}]}]},{"id":"c1e6b599.3e1948","type":"function","name":"auf 2-Stellen, Nachkomma extra","func":"// Preis kürzen\n    var rechenwert = msg.payload * 100;   // 100facher Preis jetzt mit einer Nachkommastelle\n    var rechenwert2 = msg.payload * 1000; // 1000facher Preis ohne Nachkommastelle\n    rechenwert = Math.floor(rechenwert);  // Nachkommastelle (.x) wird abgeschnitten\n    rechenwert = rechenwert/100;          // es bleiben zwei Nachkommastellen\n    msg1 = {};\n    msg1.payload = rechenwert.toFixed(2); // Preis mit 2 Nachkommastellen ausgeben (abgeschnitten)\n    msg1.topic=msg.topic+\".kurz\";\n    msg2 = {};\n    msg2.topic=msg.topic+\".nachkomma\"\n    msg2.payload = rechenwert2 - (rechenwert * 1000); // Dritte Nachommastelle einzeln ermitteln\n\nreturn [msg1,msg2];","outputs":"2","noerr":0,"x":739.1428833007812,"y":296.33337783813477,"z":"da6abe3d.25954","wires":[[],[]]},{"id":"b30f57f3.4cf0a8","type":"subflow","name":"Tankstellen Details","in":[{"x":44.071441650390625,"y":197,"wires":[{"id":"6b48df60.94b72"}]}],"out":[{"x":1040.0000305175781,"y":116.58723831176758,"wires":[{"id":"2fd18338.d02e7c","port":0}]},{"x":1037.0714225769043,"y":165.19044876098633,"wires":[{"id":"c5ef7d67.3a108","port":0}]},{"x":1037.0714225769043,"y":212.33330917358398,"wires":[{"id":"c5ef7d67.3a108","port":1}]},{"x":1037.0396842956543,"y":260.33343410491943,"wires":[{"id":"e030bb31.1fcf48","port":0}]},{"x":1035.611078262329,"y":311.7619924545288,"wires":[{"id":"6f99eeb5.90661","port":0}]},{"x":1036.8968200683594,"y":359.7619915008545,"wires":[{"id":"6f99eeb5.90661","port":1}]},{"x":1035.4682216644287,"y":409.7620220184326,"wires":[{"id":"74ade6ee.8b5218","port":0}]},{"x":1035.5714530944824,"y":455.68272399902344,"wires":[{"id":"32fefa.ffcd0106","port":0}]},{"x":1036.6429557800293,"y":502.2540683746338,"wires":[{"id":"32fefa.ffcd0106","port":1}]},{"x":1040.0000820159912,"y":551.3335075378418,"wires":[{"id":"ea9965d8.156698","port":0}]},{"x":1040.2858142852783,"y":598.9050846099854,"wires":[{"id":"a835bcc6.57ca4","port":0}]},{"x":1039.8572425842285,"y":651.9050407409668,"wires":[{"id":"55006a9.faaff94","port":0}]},{"x":1040.8571529388428,"y":707.4285230636597,"wires":[{"id":"56a735ce.a958cc","port":0}]},{"x":1039.428524017334,"y":763.142822265625,"wires":[{"id":"e738f540.18c708","port":0}]},{"x":1037.1428909301758,"y":821.4285793304443,"wires":[{"id":"7c921b4.f836de4","port":0}]},{"x":1035.7142372131348,"y":885.7143497467041,"wires":[{"id":"83ed7e53.7c128","port":0}]}]},{"id":"5a46f08d.a5b91","type":"http request","name":"Details abfragen","method":"GET","ret":"obj","url":"","x":199.7142791748047,"y":491.1428451538086,"z":"b30f57f3.4cf0a8","wires":[["11fa5e38.ee05a2","f14ea6e0.0eb158","103dd346.efc22d","ea9965d8.156698","a835bcc6.57ca4","55006a9.faaff94","56a735ce.a958cc","e738f540.18c708","7c921b4.f836de4","83ed7e53.7c128"]]},{"id":"11fa5e38.ee05a2","type":"function","name":"Diesel Preis extrahieren","func":"msg.payload = parseFloat(msg.payload.station.diesel);\nmsg.topic=msg.topic+\".diesel\";\nreturn msg;","outputs":"1","noerr":0,"x":542.7142944335938,"y":210.87295150756836,"z":"b30f57f3.4cf0a8","wires":[["2fd18338.d02e7c","c5ef7d67.3a108"]]},{"id":"f14ea6e0.0eb158","type":"function","name":"E10 extrahieren","func":"msg.payload = parseFloat(msg.payload.station.e10);\nmsg.topic=msg.topic+\".e10\";\n\nreturn msg;","outputs":"1","noerr":0,"x":504.4286117553711,"y":346.96847105026245,"z":"b30f57f3.4cf0a8","wires":[["32fefa.ffcd0106","74ade6ee.8b5218"]]},{"id":"103dd346.efc22d","type":"function","name":"E5 extrahieren","func":"msg.payload = parseFloat(msg.payload.station.e5);\nmsg.topic=msg.topic+\".e5\";\nreturn msg;","outputs":"1","noerr":0,"x":510.4286117553711,"y":282.96847105026245,"z":"b30f57f3.4cf0a8","wires":[["6f99eeb5.90661","e030bb31.1fcf48"]]},{"id":"ea9965d8.156698","type":"function","name":"ist auf","func":"msg.payload = msg.payload.station.isOpen;\nmsg.topic=msg.topic+\".offen\";\n\nreturn msg;","outputs":"1","noerr":0,"x":729.8571434020996,"y":549.9684228897095,"z":"b30f57f3.4cf0a8","wires":[[]]},{"id":"a835bcc6.57ca4","type":"function","name":"ganztags auf","func":"msg.payload = msg.payload.station.wholeDay;\nmsg.topic=msg.topic+\".ganztags\";\nreturn msg;","outputs":"1","noerr":0,"x":742.4286499023438,"y":590.8255300521851,"z":"b30f57f3.4cf0a8","wires":[[]]},{"id":"55006a9.faaff94","type":"function","name":"Öffnungszeiten Text","func":"msg.payload = msg.payload.station.openingTimes[0].text;\nmsg.topic=msg.topic+\".oeffnungszeiten.text\";\nreturn msg;","outputs":"1","noerr":0,"x":759.0000534057617,"y":642.762035369873,"z":"b30f57f3.4cf0a8","wires":[[]]},{"id":"56a735ce.a958cc","type":"function","name":"Start","func":"msg.payload = msg.payload.station.openingTimes[0].start;\nmsg.topic=msg.topic+\".oeffnungszeiten.start\";\nreturn msg;","outputs":"1","noerr":0,"x":720.2857933044434,"y":700.3336553573608,"z":"b30f57f3.4cf0a8","wires":[[]]},{"id":"e738f540.18c708","type":"function","name":"End","func":"msg.payload = msg.payload.station.openingTimes[0].end;\nmsg.topic=msg.topic+\".oeffnungszeiten.end\";\nreturn msg;","outputs":"1","noerr":0,"x":717.0000686645508,"y":760.4764575958252,"z":"b30f57f3.4cf0a8","wires":[[]]},{"id":"6b48df60.94b72","type":"function","name":"Api Key setzen","func":"msg.config = msg.config || {};\nmsg.config.apiKey=\"Bitte hier den API Key eintragen\";\nreturn msg;","outputs":1,"noerr":0,"x":212.57144165039062,"y":196.5713653564453,"z":"b30f57f3.4cf0a8","wires":[["f65ac767.09a538"]]},{"id":"f65ac767.09a538","type":"function","name":"Request bauen","func":"msg.url=\"https://creativecommons.tankerkoenig.de/json/detail.php?id=\" + msg.payload +\"&apikey=\" + msg.config.apiKey;\nreturn msg;","outputs":1,"noerr":0,"x":188.85711669921875,"y":319.99993324279785,"z":"b30f57f3.4cf0a8","wires":[["5a46f08d.a5b91"]]},{"id":"2fd18338.d02e7c","type":"function","name":"Topic","func":"msg.topic=msg.topic+\".lang\"\nreturn msg;","outputs":1,"noerr":0,"x":770.8571128845215,"y":153.1427984237671,"z":"b30f57f3.4cf0a8","wires":[[]]},{"id":"c5ef7d67.3a108","type":"subflow:da6abe3d.25954","name":"","x":804.2856979370117,"y":212.33329963684082,"z":"b30f57f3.4cf0a8","wires":[[],[]]},{"id":"6f99eeb5.90661","type":"subflow:da6abe3d.25954","name":"","x":810.8571243286133,"y":318.85706329345703,"z":"b30f57f3.4cf0a8","wires":[[],[]]},{"id":"32fefa.ffcd0106","type":"subflow:da6abe3d.25954","name":"","x":803.7143249511719,"y":475.9999523162842,"z":"b30f57f3.4cf0a8","wires":[[],[]]},{"id":"e030bb31.1fcf48","type":"function","name":"Topic","func":"msg.topic=msg.topic+\".lang\"\nreturn msg;","outputs":1,"noerr":0,"x":743.7142791748047,"y":260.2856674194336,"z":"b30f57f3.4cf0a8","wires":[[]]},{"id":"74ade6ee.8b5218","type":"function","name":"Topic","func":"msg.topic=msg.topic+\".lang\"\nreturn msg;","outputs":1,"noerr":0,"x":750.8571319580078,"y":411.71424865722656,"z":"b30f57f3.4cf0a8","wires":[[]]},{"id":"7c921b4.f836de4","type":"function","name":"Marke","func":"msg.payload = msg.payload.station.brand.toLowerCase();\nmsg.topic=msg.topic+\".brand\";\nreturn msg;","outputs":"1","noerr":0,"x":717.1428833007812,"y":820,"z":"b30f57f3.4cf0a8","wires":[[]]},{"id":"83ed7e53.7c128","type":"function","name":"Name","func":"msg.payload = msg.payload.station.name;\nmsg.topic=msg.topic+\".name\";\nreturn msg;","outputs":"1","noerr":0,"x":720,"y":891.4285888671875,"z":"b30f57f3.4cf0a8","wires":[[]]},{"id":"827db1f7.7d825","type":"inject","name":"Abfrage Spritpreise","topic":"","payload":"","payloadType":"date","repeat":"600","crontab":"","once":false,"x":171.4285888671875,"y":77.14286041259766,"z":"88ac60c9.7753a","wires":[["942f3740.6bd0c8","939cbfef.6c634"]]},{"id":"110c83a7.eef37c","type":"subflow:b30f57f3.4cf0a8","name":"","x":475.21429443359375,"y":248.1668357849121,"z":"88ac60c9.7753a","wires":[["615e9fe3.9ea16"],["615e9fe3.9ea16"],["615e9fe3.9ea16"],["615e9fe3.9ea16"],["615e9fe3.9ea16"],["615e9fe3.9ea16"],["615e9fe3.9ea16"],["615e9fe3.9ea16"],["615e9fe3.9ea16"],["615e9fe3.9ea16"],["615e9fe3.9ea16"],["615e9fe3.9ea16"],["615e9fe3.9ea16"],["615e9fe3.9ea16"],["615e9fe3.9ea16"],["615e9fe3.9ea16"]]},{"id":"942f3740.6bd0c8","type":"function","name":"Shell abfragen","func":"msg.payload=\"167804fa-e116-4ee7-a287-35634c1d47ac\";\nmsg.topic=\"node-red.0.Tankstelle01\";\nreturn msg;","outputs":1,"noerr":0,"x":272.8571472167969,"y":174.28570365905762,"z":"88ac60c9.7753a","wires":[["110c83a7.eef37c"]]},{"id":"41a8d0a3.be573","type":"ioBroker out","name":"","topic":"","ack":"false","autoCreate":"true","x":975.7143173217773,"y":245.7142791748047,"z":"88ac60c9.7753a","wires":[]},{"id":"955099c8.6aaf68","type":"debug","name":"","active":true,"console":"false","complete":"false","x":987.1428184509277,"y":195.7142858505249,"z":"88ac60c9.7753a","wires":[]},{"id":"615e9fe3.9ea16","type":"function","name":"Join","func":"\nreturn msg;","outputs":1,"noerr":0,"x":752.8571548461914,"y":245.71429538726807,"z":"88ac60c9.7753a","wires":[["955099c8.6aaf68","41a8d0a3.be573"]]},{"id":"939cbfef.6c634","type":"function","name":"Aral abfragen","func":"msg.payload=\"51a467c6-1ca2-4bf4-81e2-945a6973ac94\";\nmsg.topic=\"node-red.0.Tankstelle02\";\nreturn msg;","outputs":1,"noerr":0,"x":260,"y":300,"z":"88ac60c9.7753a","wires":[["110c83a7.eef37c"]]}]
                                        
                                        

                                        Im Subflow gibt es einen Knoten Names "API Key setzen" - dort müsst ihr einen gültigen API Key eintragen.

                                        Im Ergebnis gibt es dann - wie vorgeschlagen - die Werte strukturiert in ioBroker:

                                        485_bildschirmfoto_2015-08-06_um_22.17.24.png

                                        1 Antwort Letzte Antwort
                                        0
                                        • P Offline
                                          P Offline
                                          pix
                                          schrieb am zuletzt editiert von
                                          #77

                                          Hallo,

                                          wie schon an anderer Stelle berichtet, versuche ich gerade die Node-Red Geschichten auf den Javascript Adapter zu portieren. Aktuell gibt es immer mal wieder http://forum.iobroker.org/viewtopic.php?f=20&t=1178, weshalb ich die Zahl der Flows minimieren will.

                                          Heute bin ich nicht fertig geworden, hier nur der erste Teil. Das Skript liest die Liste der billigsten Tankstellen im Umkreis ein und schreibt alle Werte in ioBroker Objekte (und loggt auf Wunsch). Es startet bei Skriptstart und sonst alle 5 Minuten. Ich verwende nur die Werte der ersten (günstigsten) Tankstelle, theoretisch ist auch eine Liste möglich (deshalb die '1' in der Baumstuktur).

                                          Für die Ausführung ist eine Tankerkönig API nötig, genau wie oben in den flows. Meine API habe ich anonymisiert, also bitte die eigene eintragen. Ebenso habe ich die Länge und Breite anonymisiert, auch hier die eigenen Werte.

                                          Dazu eine Frage: Wie kann ich die lat/lng Werte aus den Javascript - Einstellungen einfügen?

                                          Hier das Skript:

                                          /* Spritpreis einlesen
                                          Quelle: Tankerkoenig mit API
                                          
                                          todo: gezielten Tankstellen (zweites Skript anlegen)
                                                Meldung (pushover/Email) bei Unterschreitung eines Preises (Optin)
                                          
                                          Unter Verwendung von Scripts/flows von Bluefox und ruhr70
                                          erstellt: 24.08.2015 von pix
                                          */
                                          
                                          var logging = true; // (true;false) Logausgabe zentral schalten, da bei true 5minütlich ein Mehrzeiler geloggt wird.
                                          
                                          // Billigste Tankstelle
                                          // Parameter festlegen
                                          var breite = '48.0', // eigene Position eintragen
                                              laenge = '11.0', // eigene Position eintragen
                                              radius = '5',
                                              sortierung = 'price',
                                              typ = 'diesel',
                                              api = 'EIGENE-API-EINTRAGEN';
                                          
                                          var url = 'https://creativecommons.tankerkoenig.de/json/list.php?lat=' + breite + '&lng=' + laenge + '&rad=' + radius + '&sort=' + sortierung + '&type=' + typ + '&apikey=' + api; 
                                          
                                          // Objekste erstellen (mit Struktur)
                                          createState('Sprit.billigste_Tankstelle.json', {name: 'Billigste Tankstelle - JSON'});
                                          createState('Sprit.billigste_Tankstelle.1.Name', {name: 'Billigste Tankstelle - Name'});
                                          createState('Sprit.billigste_Tankstelle.1.Marke', {name: 'Billigste Tankstelle - Marke'});
                                          createState('Sprit.billigste_Tankstelle.1.ID', {name: 'Billigste Tankstelle - ID'});
                                          createState('Sprit.billigste_Tankstelle.1.Adresse.Strasse', {name: 'Billigste Tankstelle - Strasse'});
                                          createState('Sprit.billigste_Tankstelle.1.Adresse.Hausnummer', {name: 'Billigste Tankstelle - Hausnummer'});
                                          createState('Sprit.billigste_Tankstelle.1.Adresse.PLZ', {name: 'Billigste Tankstelle - PLZ'});
                                          createState('Sprit.billigste_Tankstelle.1.Adresse.Ort', {name: 'Billigste Tankstelle - Ort'});
                                          createState('Sprit.billigste_Tankstelle.1.Adresse.Laenge', {name: 'Billigste Tankstelle - geografische Laenge', unit: '°'});
                                          createState('Sprit.billigste_Tankstelle.1.Adresse.Breite', {name: 'Billigste Tankstelle - geografische Breite', unit: '°'});
                                          createState('Sprit.billigste_Tankstelle.1.Adresse.Entfernung', {name: 'Billigste Tankstelle - Entfernung', unit: 'km'});
                                          createState('Sprit.billigste_Tankstelle.1.Diesel.Preis', {name: 'Billigste Tankstelle - Preis', unit: '€'});
                                          createState('Sprit.billigste_Tankstelle.1.Diesel.Preis_kurz', {name: 'Billigste Tankstelle - Preis (gekürzt)', unit: '€'});
                                          createState('Sprit.billigste_Tankstelle.1.Diesel.Preis_dritte_Stelle', {name: 'Billigste Tankstelle - Preis (dritte Dezimalstelle)'});
                                          
                                          // Daten einlesen
                                          var request = require('request');
                                          function billigste_Tankstelle() {
                                              request(url, function (error, response, body) {
                                                  if (!error && response.statusCode == 200) {
                                                      var result;
                                                      try{
                                                          result = JSON.parse(body);
                                                          var data = JSON.stringify(result, null, 2);
                                                          // if (logging) log(data);
                                                          setState('Sprit.billigste_Tankstelle.json', data);
                                          
                                                      } catch (e) {
                                                          log('Parse Fehler:' + e);
                                                      }    
                                                      if (result) {
                                                          if (logging) {
                                                              log('-------------- Spritpreise -----------');
                                                              log('Billigste Station im Radius von ' + radius + 'km');
                                                              log('Name:                     ' + result.stations[0].name); 
                                                              log('Marke:                    ' + result.stations[0].brand); 
                                                              log('ID:                       ' + result.stations[0].id); 
                                                              log('Strasse:                  ' + result.stations[0].street); 
                                                              log('Hausnummer:               ' + result.stations[0].houseNumber);
                                                              log('PLZ:                      ' + result.stations[0].postCode); 
                                                              log('Stadt:                    ' + result.stations[0].place); 
                                                              log('Geografische Breite:      ' + result.stations[0].lat + '°'); 
                                                              log('Geografische Länge:       ' + result.stations[0].lng + '°'); 
                                                              log('Entfernung:               ' + result.stations[0].dist + ' km'); 
                                                              log('Preis:                    ' + result.stations[0].price + ' €'); 
                                                              log('Preis (gekürzt):          ' + preis_ermitteln(result.stations[0].price).preis_kurz); + ' €'); 
                                                              log('Preis (3\. Dezimaltelle):  0.' + preis_ermitteln(result.stations[0].price).preis_dritte_stelle); + ' Cent'); 
                                                              log('--------------------------------------');                    
                                                          }
                                                          setState('Sprit.billigste_Tankstelle.1.Name', result.stations[0].name);
                                                          setState('Sprit.billigste_Tankstelle.1.Marke', result.stations[0].brand);
                                                          setState('Sprit.billigste_Tankstelle.1.ID', result.stations[0].id);
                                                          setState('Sprit.billigste_Tankstelle.1.Adresse.Strasse', result.stations[0].street);
                                                          setState('Sprit.billigste_Tankstelle.1.Adresse.Hausnummer', result.stations[0].houseNumber);
                                                          setState('Sprit.billigste_Tankstelle.1.Adresse.PLZ', result.stations[0].houseNumber);
                                                          setState('Sprit.billigste_Tankstelle.1.Adresse.Ort', result.stations[0].place);
                                                          setState('Sprit.billigste_Tankstelle.1.Adresse.Breite', result.stations[0].lat);
                                                          setState('Sprit.billigste_Tankstelle.1.Adresse.Laenge', result.stations[0].lng);
                                                          setState('Sprit.billigste_Tankstelle.1.Adresse.Entfernung', result.stations[0].dist);
                                                          setState('Sprit.billigste_Tankstelle.1.Diesel.Preis', result.stations[0].price);
                                                          setState('Sprit.billigste_Tankstelle.1.Diesel.Preis_kurz', preis_ermitteln(result.stations[0].price).preis_kurz);
                                                          setState('Sprit.billigste_Tankstelle.1.Diesel.Preis_dritte_Stelle', preis_ermitteln(result.stations[0].price).preis_dritte_stelle);
                                                      }
                                                  } else {
                                                      log('Spritpreise einlesen - Fehler:' + error);
                                                  }
                                              });   // Ende request 
                                          }
                                          
                                          // Dezimalstellen des Preises ermitteln
                                          function preis_ermitteln(preis) {
                                              var rechenwert = preis * 100;   // 100facher Preis jetzt mit einer Nachkommastelle
                                              var rechenwert2 = preis * 1000; // 1000facher Preis ohne Nachkommastelle
                                              rechenwert = Math.floor(rechenwert);  // Nachkommastelle (.x) wird abgeschnitten
                                              rechenwert = rechenwert/100;          // es bleiben zwei Nachkommastellen
                                              var ohne_dritte_stelle = rechenwert.toFixed(2); // Preis mit 2 Nachkommastellen ausgeben (abgeschnitten)
                                              var dritte_stelle = rechenwert2 - (rechenwert * 1000); // Dritte Nachommastelle einzeln ermitteln
                                              return {
                                                  'preis_kurz': ohne_dritte_stelle,
                                                  'preis_dritte_stelle': dritte_stelle
                                              }; 
                                          }
                                          
                                          // Ausführung
                                          billigste_Tankstelle();
                                          schedule("*/15 * * * *", billigste_Tankstelle); // jede 15 Minuten
                                          
                                          

                                          EDIT (14.1.2016): Schedule auf 15min gestellt, da tankerkönig.de sonst evtl. überlastet wird.

                                          EDIT (1.2.2016): Funktion "preis_kuerzen" und "preis_dritte_stelle" zusammengefügt und Code gespart. Neue Funktion "preis_ermitteln" gibt jetzt die Dezimalstellen zurück

                                          Morgen komme ich wohl nicht dazu, aber werde die Woche noch das Skript für die gezielte Tankstellen-Abfrage (mit ID, ohne API) einstellen. Ich denke, für jede Tankstelle ein eigenes Skript anzulegen ist nicht zu aufwendig, sondern eher übersichtlich und auch leichter zu warten.

                                          @Bluefox:

                                          ich denke, es ist Zeit einen Adapter daraus zu machen! ? `
                                          Hab tatsächlich mal drüber nachgedacht. Aber mir fehlt noch das Know-How. :?

                                          Viel Spaß und Gruß

                                          Pix

                                          EDIT: Habs gerad gesehen: Ich nutze nur Dieselpreise und deshalb wird in der Objektstruktur nach DIESEL sortiert. Bitte bei anderen Spritsorten entsprechend ändern (createState…), sorry für die Umstände :roll:

                                          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                                          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

                                          751

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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