node-red: Spritpreise einlesen

Antworten
pix
guru
Beiträge: 2621
Registriert: 04.11.2014, 17:49
Kontaktdaten:

node-red: Spritpreise einlesen

Beitrag von pix » 20.04.2015, 14:38

Hallo,

hier mal die Alternative zum Spritpreis Adapter. Nutze dafür als Basis die API von creativecommons.tankerkoenig.de und lasse mit den günstigsten Dieselpreis imRadius von 5km um eine Geopisition anzeigen. Ausgegeben werden der Name der Station und der Dieselpreis ohne Währung.
Bildschirmfoto 2015-04-20 um 15.37.07.jpg
Flow Spritpreis
Ich bin in JavaScript noch nicht so fit. Es gibt sicher eine schönere Variante, die Daten auszulösen, aber es funktioniert.

Erst auf creativecommons.tankerkoenig.de registrieren und API besorgen.
Den folgenden Code kopieren und im Node-Red Adapter über Import (Knopf mit drei Strichen rechts oben) einlesen. Dann unbedingt im zweiten (gelbgrünen) Node die URL anpassen (eigene API, Geoposition Lat/Long mit Dezimalpunkt, Sorte (Diesel, E10, E5) und Radius in km). Im ersten Node ist die Zeitsteuerung (zur alle Zeit 5 min, sicher reicht auch 15 oder 30min). Die Ausgabe in den grünen Nodes ist zur Kontrolle fürs Debug Fenster (rechts). Die Ausgabe in die blauen ioBroker Nodes bringt die Werte in die Felder sprit_station und sprit_preis. Die grünen Nodes können gelöscht werden sobald alles funktioniert.

Hier der Flow (Zeile 23 unbedingt anpassen):
Spoiler: Show hidden text

Code: Alles auswählen

[{
    "id": "2b6dcb0f.d49234",
    "type": "inject",
    "name": "Abfrage zeitgesteuert starten (5min)",
    "topic": "",
    "payload": "",
    "payloadType": "none",
    "repeat": "300",
    "crontab": "",
    "once": false,
    "x": 143,
    "y": 53,
    "z": "9ae8b4fd.651748",
    "wires": [
        ["7f68193d.8097e8"]
    ]
}, {
    "id": "7f68193d.8097e8",
    "type": "http request",
    "name": "Tankerkoenig mit API abfragen",
    "method": "GET",
    "ret": "txt",
    "url": "https://creativecommons.tankerkoenig.de/json/list.php?lat=48.XXXXX&lng=11.XXXXX&rad=5&sort=price&type=diesel&apikey=XXXXX-XXXXX-XXXXX-XXXX-XXXXXXXXX",
    "x": 447,
    "y": 53,
    "z": "9ae8b4fd.651748",
    "wires": [
        ["d9506f10.26af9"]
    ]
}, {
    "id": "3c451f54.c3bae",
    "type": "debug",
    "name": "Ausgabe Name",
    "active": true,
    "console": "false",
    "complete": "payload",
    "x": 677,
    "y": 262,
    "z": "9ae8b4fd.651748",
    "wires": []
}, {
    "id": "d9506f10.26af9",
    "type": "function",
    "name": "Name und Preis extrahieren",
    "func": "var quelle = msg.payload;\n\nmsg1 = {};\n//  \"name\" finden (4 Zeichen lang), 3 überspringen und danach 50 Zeichen verwenden\nvar name_startpos = quelle.indexOf('name');\nvar sprit_name = quelle.substr(name_startpos + 3 + 4, 50);\n// Finde \"'\" und merke dir die Position. Schneide aus von 0 bis Position\nvar name_endpos = sprit_name.indexOf('\"');\nsprit_name = sprit_name.substring(0, name_endpos);\nmsg1.payload = sprit_name; // String\n\n\nmsg2 = {};\n//  \"price\" finden (5 Zeichen lang), 3 überspringen und danach die 5 Zeichen verwenden\nvar preis_startpos = quelle.indexOf('price');\nvar sprit_preis = quelle.substr(preis_startpos + 5 + 2, 5);\nsprit_preis = parseFloat(sprit_preis); // String\nmsg2.payload = sprit_preis;\n\nreturn [msg1,msg2];",
    "outputs": "2",
    "valid": true,
    "x": 414,
    "y": 268,
    "z": "9ae8b4fd.651748",
    "wires": [
        ["3c451f54.c3bae", "297392e5.d68c6e"],
        ["50f49f3c.af0b6", "754f3c12.8ab0c4"]
    ]
}, {
    "id": "50f49f3c.af0b6",
    "type": "debug",
    "name": "Ausgabe Preis",
    "active": true,
    "console": "false",
    "complete": "payload",
    "x": 673,
    "y": 378,
    "z": "9ae8b4fd.651748",
    "wires": []
}, {
    "id": "297392e5.d68c6e",
    "type": "ioBroker out",
    "name": "Sprit Name der Station",
    "topic": "sprit_station",
    "ack": "true",
    "autoCreate": "true",
    "x": 697,
    "y": 297,
    "z": "9ae8b4fd.651748",
    "wires": []
}, {
    "id": "754f3c12.8ab0c4",
    "type": "ioBroker out",
    "name": "Sprit Preis",
    "topic": "sprit_preis",
    "ack": "true",
    "autoCreate": "true",
    "x": 658,
    "y": 417,
    "z": "9ae8b4fd.651748",
    "wires": []
}]
Wenn man nun in den Wert sprit_preis im Admin Adapter unter Objekte im Ordner node-red.0 noch für den History Adapter freigibt, erhält man nach ein paar Tagen schon eine schöne Grafik.

Gruß
Pix

EDIT: Im nächsten Post eine bessere Variante zum Auslösen der Daten aus JSON beschrieben.

EDIT: 31.5.2016 -> Es gibt jetzt einen Adapter für die Abfrage von 10 Stationen auf einmal http://forum.iobroker.net/viewtopic.php?f=20&t=2992
Zuletzt geändert von pix am 31.05.2016, 21:42, insgesamt 2-mal geändert.
Mac mini (OS X 10.12.6, node v6.12.2, npm v4.6.1), Redis, InfluxDB, VIS via iOS; gesteuerte Systeme: Homematic CCU2, Homepilot, Roomba, Sonos, XEOMA auf Odroid XU4; Adapter: feiertage, tvspielfilm, rtv, solarwetter, tankerkoenig, homepilot, epson_stylus_px830

pix
guru
Beiträge: 2621
Registriert: 04.11.2014, 17:49
Kontaktdaten:

Re: node-red: Spritpreise einlesen

Beitrag von pix » 20.04.2015, 16:26

Hallo,

nachdem ich Bluefox' Staumelder nochmal studiert habe, habe ich den Spritpreismelder auch noch stark vereinfacht. Ds Einlesen der JSON-Daten geht natürlich so viel leichter.

Hier der neue Flow (bitte an die eigene API, Geoposition und Spritart denken).

Code: Alles auswählen

[{"id":"2b6dcb0f.d49234","type":"inject","name":"Abfrage zeitgesteuert starten (5min)","topic":"","payload":"","payloadType":"date","repeat":"300","crontab":"","once":false,"x":180,"y":61,"z":"9ae8b4fd.651748","wires":[["7f68193d.8097e8"]]},{"id":"7f68193d.8097e8","type":"http request","name":"Tankerkoenig mit API abfragen","method":"GET","ret":"obj","url":"https://creativecommons.tankerkoenig.de/json/list.php?lat=48.XXXX&lng=11.XXXX5&rad=5&sort=price&type=diesel&apikey=XXXX-XXXX-XXXX-XXXX-XXXX","x":192,"y":137,"z":"9ae8b4fd.651748","wires":[["d9506f10.26af9","a1655315.5e9ab"]]},{"id":"3c451f54.c3bae","type":"debug","name":"Ausgabe Name","active":true,"console":"false","complete":"payload","x":677,"y":262,"z":"9ae8b4fd.651748","wires":[]},{"id":"d9506f10.26af9","type":"function","name":"Preis extrahieren","func":"msg.payload = msg.payload.stations[0].price;\nreturn msg;","outputs":"1","valid":true,"x":442,"y":186,"z":"9ae8b4fd.651748","wires":[["754f3c12.8ab0c4"]]},{"id":"50f49f3c.af0b6","type":"debug","name":"Ausgabe Preis","active":true,"console":"false","complete":"payload","x":664,"y":175,"z":"9ae8b4fd.651748","wires":[]},{"id":"297392e5.d68c6e","type":"ioBroker out","name":"Sprit Name der Station","topic":"sprit_station","ack":"true","autoCreate":"true","x":697,"y":297,"z":"9ae8b4fd.651748","wires":[]},{"id":"754f3c12.8ab0c4","type":"ioBroker out","name":"Sprit Preis","topic":"sprit_preis","ack":"true","autoCreate":"true","x":656,"y":211,"z":"9ae8b4fd.651748","wires":[]},{"id":"a1655315.5e9ab","type":"function","name":"Name extrahieren","func":"msg.payload = msg.payload.stations[0].name;\nreturn msg;","outputs":"1","valid":true,"x":444,"y":225,"z":"9ae8b4fd.651748","wires":[["297392e5.d68c6e"]]}]
Bildschirmfoto 2015-04-20 um 17.25.05.jpg
Flow Spritpreis (JSON einlesen)
Gruß
Pix
Mac mini (OS X 10.12.6, node v6.12.2, npm v4.6.1), Redis, InfluxDB, VIS via iOS; gesteuerte Systeme: Homematic CCU2, Homepilot, Roomba, Sonos, XEOMA auf Odroid XU4; Adapter: feiertage, tvspielfilm, rtv, solarwetter, tankerkoenig, homepilot, epson_stylus_px830

Benutzeravatar
Homoran
guru
Beiträge: 11859
Registriert: 08.08.2014, 16:50

Re: node-red: Spritpreise einlesen

Beitrag von Homoran » 20.04.2015, 21:23

Hier ist ein post verschollen:
Ich hatte zwischenzeitlich selber mal mein Glück versucht und den Flow verändert:
iobroker_Nodered_sprit.jpg
Ich habe den flow auf zwei Spritsorten erweitert und wollte mich jetzt mal wieder an etwas javascript wagen und noch den Zweit- und drittbilligsten auslesen.
Gibt es dazu so etwas wie next "name", oder so?

Störend kam noch dazu, dass der Dieselteil mir Werte anzeigte, die nicht nachprüfbar waren, da wurde eine geschlossene Tankstelle angegeben, mit einem vermutlich veralteten Preis.
Nach Verringerung des Radius war die dann raus.

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

pix
guru
Beiträge: 2621
Registriert: 04.11.2014, 17:49
Kontaktdaten:

Re: node-red: Spritpreise einlesen

Beitrag von pix » 20.04.2015, 22:31

Hallo Homoran,

ich empfehle Dir liebe die zweite Variante des flows zu verwenden: Da steigt man besser durch, welche Werte man anpassen muss, damit man die richtigen Daten bekommt. Der Unterchied ist, dass für jeden Wert ein eigener Function-node verwendet wird.Aber durch die Grafik lässt sich das trotzdem noch gut organisieren. Du legst also hinter jeden gelben node jeweils zwei "orangene" Funktionen (Preis+Name). Willst du den 2. oder 3. musst also 4 oder 6 nodes dahinterpacken.

Gruß
Pix
Mac mini (OS X 10.12.6, node v6.12.2, npm v4.6.1), Redis, InfluxDB, VIS via iOS; gesteuerte Systeme: Homematic CCU2, Homepilot, Roomba, Sonos, XEOMA auf Odroid XU4; Adapter: feiertage, tvspielfilm, rtv, solarwetter, tankerkoenig, homepilot, epson_stylus_px830

Benutzeravatar
eric2905
guru
Beiträge: 3213
Registriert: 23.03.2015, 18:41
Wohnort: Wuppertal

node-red: Spritpreise einlesen

Beitrag von eric2905 » 21.04.2015, 04:20

Moin zusammen,

das Thema node-red hat mich auf dem Usertreffen echt fasziniert.

Ich baue mir den flow heute Abend auch um :-)
Ich möchte den Preis einer bzw. mehrerer bestimmter Tankstellen haben und werde dafür die Auswahl nicht nach Preis, sondern nach der ID machen.
Dafür macht man einmal manuell eine Suche und sucht sich dann die gewünschte Tankstelle aus der Liste aus und gibt diese als Suchkriterium mit an.

Mal sehen, ob das klappt (ibzw. ich das hinbekomme ;-) )

Gruß,
Eric
-----------------------------------------------------------------------------------------------
Roses are red, violets are blue,
if I listen to heavy metal, my neighbours do too

Benutzeravatar
ruhr70
guru
Beiträge: 2250
Registriert: 24.02.2015, 19:40

Re: node-red: Spritpreise einlesen

Beitrag von ruhr70 » 21.04.2015, 05:46

Homoran hat geschrieben:Ich habe den flow auf zwei Spritsorten erweitert und wollte mich jetzt mal wieder an etwas javascript wagen und noch den Zweit- und drittbilligsten auslesen.
Gibt es dazu so etwas wie next "name", oder so?

Störend kam noch dazu, dass der Dieselteil mir Werte anzeigte, die nicht nachprüfbar waren, da wurde eine geschlossene Tankstelle angegeben, mit einem vermutlich veralteten Preis.
Nach Verringerung des Radius war die dann raus.

Gruß
Rainer
In der zweiten Variante von pix kannst Du die Objekte ganz einfach auslesen.
Bei mir sind die ersten beiden Treffer zwei Tankstellen mit einem Spritpreis von 0,00 EUR.
Also lese ich die dritte Tankstelle aus.

Den Preis der dritten Tankstelle auslesen.

Code: Alles auswählen

msg.payload = msg.payload.stations[2].price;
return msg;
stations[0] = 1. Tankstelle
...
stations[2] = 3. Tankstelle



Bei den Tankstellen wollte ich auch die Marke und die genaue Anschrift haben.
Das habe ich dann so im zweiten Wert ausgelesen:

Code: Alles auswählen

msg.payload = msg.payload.stations[2].brand + ', '
            + msg.payload.stations[2].street + ' '
            + msg.payload.stations[2].houseNumber + ', '
            + msg.payload.stations[2].postCode + ' '
            + msg.payload.stations[2].place;
return msg;
2015-04-21 JSON Tankstellen.jpg
Intel NUC (NUC6i5SYH) -> ESXi 6 > VM Ubuntu 16.04 ioBroker (redis) > VM Ubuntu 16.04 mySQL
Slave: Pi 3 ohne SD (Boot USB SLC)
CCU2, hue 2, DS 1512+, WeMos, Harmony Hub, Alexa
Adapter: Fritzbox / Skripte: dynamic hue, Bluetooth Scanner, WIFFI-wz

Benutzeravatar
Homoran
guru
Beiträge: 11859
Registriert: 08.08.2014, 16:50

Re: node-red: Spritpreise einlesen

Beitrag von Homoran » 21.04.2015, 17:55

Habe inzwischen selber das System erkannt ([0]...) und weiter rumgebastelt.
iobroker_Nodered_sprit_2.jpg
@ruhr70:
Diese Tabelle ist Spitze, wie hast du die generiert. Das war das, was ich gestern suchte.
ich wollte auch mehr Infos rausholen.
lt.Tanklerkönig gibt es dafür aber zwei abfragen, einmal "list" und einmal "detail"

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

Benutzeravatar
Homoran
guru
Beiträge: 11859
Registriert: 08.08.2014, 16:50

Re: node-red: Spritpreise einlesen

Beitrag von Homoran » 22.04.2015, 20:59

Ich habe nochmal weitergespielt und versucht bestimmte Tankstellen auszulesen.
irgendwie scheint es nicht zu klappen, wenn Tankstellen geschlossen sind.

Daraufhin habe ich mal einen anderen flow versucht:

Code: Alles auswählen

[{"id":"f43c2035.0bc3e","type":"inject","name":"Abfrage alle 15min starten","topic":"","payload":"","payloadType":"date","repeat":"900","crontab":"","once":true,"x":152,"y":558,"z":"9e1279a2.61ed88","wires":[["85444a5a.7abbb8","ff83a1a3.007c6","a7ee9dc6.58116","5388aedb.ac775","7469e67a.8b9618","4cae17ec.b351e8"]]},{"id":"85444a5a.7abbb8","type":"http request","name":"Tankerkoenig mit API abfragen","method":"GET","ret":"obj","url":"https://creativecommons.tankerkoenig.de/json/list.php?lat=50.893151&lng=6.9657667&rad=1&sort=dist&type=diesel&apikey=K E Y","x":521,"y":95,"z":"9e1279a2.61ed88","wires":[["ebc81b8e.1437e8"]]},{"id":"1e693115.e196cf","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1042,"y":39,"z":"9e1279a2.61ed88","wires":[]},{"id":"ebc81b8e.1437e8","type":"function","name":"Daten extrahieren","func":"msg1 = {};\nmsg1.payload = msg.payload.stations[0].name;\n\nmsg2 = {};\nmsg2.payload = msg.payload.stations[0].street;\n\nmsg3 = {};\nmsg3.payload = msg.payload.stations[0].houseNumber;\n\nmsg4 = {};\nmsg4.payload = msg.payload.stations[0].price;\n\nreturn [msg1,msg2,msg3,msg4];","outputs":"4","x":769,"y":95,"z":"9e1279a2.61ed88","wires":[["1e693115.e196cf"],["f5204af4.0adfb8"],["dff4d929.200b28"],["7d69bcf0.829644","84d48ee.f7b2b7"]]},{"id":"84d48ee.f7b2b7","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1040,"y":148,"z":"9e1279a2.61ed88","wires":[]},{"id":"dff4d929.200b28","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1036,"y":111,"z":"9e1279a2.61ed88","wires":[]},{"id":"f5204af4.0adfb8","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1039,"y":74,"z":"9e1279a2.61ed88","wires":[]},{"id":"ff83a1a3.007c6","type":"http request","name":"Tankerkoenig mit API abfragen","method":"GET","ret":"obj","url":"https://creativecommons.tankerkoenig.de/json/list.php?lat=50.8990027&lng=6.9540347&rad=1&sort=dist&type=diesel&apikey=K E Y","x":520,"y":258,"z":"9e1279a2.61ed88","wires":[["b9eb86a6.461478"]]},{"id":"9cb060b8.634fa","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1038,"y":204,"z":"9e1279a2.61ed88","wires":[]},{"id":"b9eb86a6.461478","type":"function","name":"Daten extrahieren","func":"msg1 = {};\nmsg1.payload = msg.payload.stations[0].name;\n\nmsg2 = {};\nmsg2.payload = msg.payload.stations[0].street;\n\nmsg3 = {};\nmsg3.payload = msg.payload.stations[0].houseNumber;\n\nmsg4 = {};\nmsg4.payload = msg.payload.stations[0].price;\n\nreturn [msg1,msg2,msg3,msg4];","outputs":"4","x":765,"y":258,"z":"9e1279a2.61ed88","wires":[["9cb060b8.634fa"],["dcf00ebb.230ff"],["5a2cafa1.a5d35"],["5015d0a5.afea3","a6e00459.591ff8"]]},{"id":"5015d0a5.afea3","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1034,"y":312,"z":"9e1279a2.61ed88","wires":[]},{"id":"5a2cafa1.a5d35","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1032,"y":276,"z":"9e1279a2.61ed88","wires":[]},{"id":"dcf00ebb.230ff","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1035,"y":239,"z":"9e1279a2.61ed88","wires":[]},{"id":"a7ee9dc6.58116","type":"http request","name":"Tankerkoenig mit API abfragen","method":"GET","ret":"obj","url":"https://creativecommons.tankerkoenig.de/json/list.php?lat=50.8580184&lng=6.9646159&rad=1&sort=dist&type=diesel&apikey=K E Y","x":514,"y":413,"z":"9e1279a2.61ed88","wires":[["795bad8d.86a454"]]},{"id":"790c1e85.86f3e","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1037,"y":358,"z":"9e1279a2.61ed88","wires":[]},{"id":"795bad8d.86a454","type":"function","name":"Daten extrahieren","func":"msg1 = {};\nmsg1.payload = msg.payload.stations[0].name;\n\nmsg2 = {};\nmsg2.payload = msg.payload.stations[0].street;\n\nmsg3 = {};\nmsg3.payload = msg.payload.stations[0].houseNumber;\n\nmsg4 = {};\nmsg4.payload = msg.payload.stations[0].price;\n\nreturn [msg1,msg2,msg3,msg4];","outputs":"4","x":764,"y":413,"z":"9e1279a2.61ed88","wires":[["790c1e85.86f3e"],["3203ed64.cdfc12"],["a7a536d2.585ac8"],["2867900c.d7987","16c04316.e93fbd"]]},{"id":"2867900c.d7987","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1033,"y":466,"z":"9e1279a2.61ed88","wires":[]},{"id":"a7a536d2.585ac8","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1031,"y":430,"z":"9e1279a2.61ed88","wires":[]},{"id":"3203ed64.cdfc12","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1034,"y":393,"z":"9e1279a2.61ed88","wires":[]},{"id":"7d69bcf0.829644","type":"ioBroker out","name":"Diesel Verteilerkreis","topic":"Diesel_Verteilerkreis","ack":"true","autoCreate":"true","x":1262,"y":145,"z":"9e1279a2.61ed88","wires":[]},{"id":"a6e00459.591ff8","type":"ioBroker out","name":"Diesel Star Brühler Straße","topic":"Diesel_star","ack":"true","autoCreate":"true","x":1266,"y":313,"z":"9e1279a2.61ed88","wires":[]},{"id":"16c04316.e93fbd","type":"ioBroker out","name":"Diesel Metro","topic":"Diesel_metro","ack":"true","autoCreate":"true","x":1259,"y":464,"z":"9e1279a2.61ed88","wires":[]},{"id":"7469e67a.8b9618","type":"http request","name":"Tankerkoenig mit API abfragen","method":"GET","ret":"obj","url":"https://creativecommons.tankerkoenig.de/json/list.php?lat=50.893151&lng=6.9657667&rad=1&sort=dist&type=e5&apikey=K E Y","x":515,"y":608,"z":"9e1279a2.61ed88","wires":[["7746034c.88b9fc"]]},{"id":"c1604de1.3e9fb","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1037,"y":552,"z":"9e1279a2.61ed88","wires":[]},{"id":"7746034c.88b9fc","type":"function","name":"Daten extrahieren","func":"msg1 = {};\nmsg1.payload = msg.payload.stations[0].name;\n\nmsg2 = {};\nmsg2.payload = msg.payload.stations[0].street;\n\nmsg3 = {};\nmsg3.payload = msg.payload.stations[0].houseNumber;\n\nmsg4 = {};\nmsg4.payload = msg.payload.stations[0].price;\n\nreturn [msg1,msg2,msg3,msg4];","outputs":"4","x":768,"y":608,"z":"9e1279a2.61ed88","wires":[["c1604de1.3e9fb"],["fb673b92.0498c8"],["6752f2ef.98ad0c"],["d3dfa1cb.2c206","9947461b.66b8b8"]]},{"id":"9947461b.66b8b8","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1035,"y":661,"z":"9e1279a2.61ed88","wires":[]},{"id":"6752f2ef.98ad0c","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1031,"y":624,"z":"9e1279a2.61ed88","wires":[]},{"id":"fb673b92.0498c8","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1034,"y":587,"z":"9e1279a2.61ed88","wires":[]},{"id":"4cae17ec.b351e8","type":"http request","name":"Tankerkoenig mit API abfragen","method":"GET","ret":"obj","url":"https://creativecommons.tankerkoenig.de/json/list.php?lat=50.8990027&lng=6.9540347&rad=1&sort=dist&type=e5&apikey=K E Y","x":519,"y":764,"z":"9e1279a2.61ed88","wires":[["c95cc0bd.36a34"]]},{"id":"cbeeb167.34115","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1033,"y":710,"z":"9e1279a2.61ed88","wires":[]},{"id":"c95cc0bd.36a34","type":"function","name":"Daten extrahieren","func":"msg1 = {};\nmsg1.payload = msg.payload.stations[0].name;\n\nmsg2 = {};\nmsg2.payload = msg.payload.stations[0].street;\n\nmsg3 = {};\nmsg3.payload = msg.payload.stations[0].houseNumber;\n\nmsg4 = {};\nmsg4.payload = msg.payload.stations[0].price;\n\nreturn [msg1,msg2,msg3,msg4];","outputs":"4","x":770,"y":764,"z":"9e1279a2.61ed88","wires":[["cbeeb167.34115"],["b79b2d1c.4864d"],["2f01c3a8.d0fe3c"],["e5a2c197.1a5d4","10e313f5.ef1cec"]]},{"id":"e5a2c197.1a5d4","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1029,"y":818,"z":"9e1279a2.61ed88","wires":[]},{"id":"2f01c3a8.d0fe3c","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1027,"y":782,"z":"9e1279a2.61ed88","wires":[]},{"id":"b79b2d1c.4864d","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1030,"y":745,"z":"9e1279a2.61ed88","wires":[]},{"id":"5388aedb.ac775","type":"http request","name":"Tankerkoenig mit API abfragen","method":"GET","ret":"obj","url":"https://creativecommons.tankerkoenig.de/json/list.php?lat=50.8580184&lng=6.9646159&rad=1&sort=dist&type=e5&apikey=K E Y","x":521,"y":924,"z":"9e1279a2.61ed88","wires":[["565b7f0.fa9a48"]]},{"id":"46f30145.b90d","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1032,"y":867,"z":"9e1279a2.61ed88","wires":[]},{"id":"565b7f0.fa9a48","type":"function","name":"Daten extrahieren","func":"msg1 = {};\nmsg1.payload = msg.payload.stations[0].name;\n\nmsg2 = {};\nmsg2.payload = msg.payload.stations[0].street;\n\nmsg3 = {};\nmsg3.payload = msg.payload.stations[0].houseNumber;\n\nmsg4 = {};\nmsg4.payload = msg.payload.stations[0].price;\n\nreturn [msg1,msg2,msg3,msg4];","outputs":"4","x":770,"y":924,"z":"9e1279a2.61ed88","wires":[["46f30145.b90d"],["2f81f08e.d07e1"],["847629c1.7b89d8"],["2eb7227.fd148de","8dd45ac2.722ba8"]]},{"id":"2eb7227.fd148de","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1028,"y":975,"z":"9e1279a2.61ed88","wires":[]},{"id":"847629c1.7b89d8","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1026,"y":939,"z":"9e1279a2.61ed88","wires":[]},{"id":"2f81f08e.d07e1","type":"debug","name":"","active":true,"console":"false","complete":"false","x":1029,"y":902,"z":"9e1279a2.61ed88","wires":[]},{"id":"d3dfa1cb.2c206","type":"ioBroker out","name":"E5 Verteilerkreis","topic":"e5_Verteilerkreis","ack":"true","autoCreate":"true","x":1257,"y":658,"z":"9e1279a2.61ed88","wires":[]},{"id":"10e313f5.ef1cec","type":"ioBroker out","name":"E5 Star Brühler Straße","topic":"e5_star","ack":"true","autoCreate":"true","x":1261,"y":819,"z":"9e1279a2.61ed88","wires":[]},{"id":"8dd45ac2.722ba8","type":"ioBroker out","name":"E5 Metro","topic":"e5_metro","ack":"true","autoCreate":"true","x":1262,"y":977,"z":"9e1279a2.61ed88","wires":[]}]
Dazu habe ich für jede Tankstelle eine Abfrage beim Tankerkönig mit exakten Koordinaten und einem radius von 1 (geht es auch kleiner? 0 hat er nicht genommen) und sort=dist(ance).
iobroker_nodered_Sprit_fix.jpg
Außerdem gibt er mir Name, Straße und Hausnummer mit aus, dadurch sehe ich ob es die Richtige Tanke ist, wobei das wichtiger ist, wenn man nach Preis sortiert.

Beim verwenden des Flows bitte euren apikey und die Koordinaten der gewünschten Tanke eingeben

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

Benutzeravatar
ruhr70
guru
Beiträge: 2250
Registriert: 24.02.2015, 19:40

Re: node-red: Spritpreise einlesen

Beitrag von ruhr70 » 23.04.2015, 00:43

Hallo Rainer,

schöner flow :-)

Wenn Du gezielt Tankstellen abfragen willst, dann kannst Du das über die ID der Tankstelle und der Detailabfrage machen.

Beispiel, Abfrage der Tankstelle mit der ID 646a461e-2341-4b5f-8f8b-09edc8f7d22c

https://creativecommons.tankerkoenig.de ... 5552056644
(funktioniert ohne den API-Key)

Dort findest Du dann auch die Öffnungszeiten der Tankstelle.
Folgende Datenfelder werden ausgegeben:
2015-04-23 Tankerkönig Detailabfrage.jpg
Viele Grüße nach Godorf ;-)
Michael
Intel NUC (NUC6i5SYH) -> ESXi 6 > VM Ubuntu 16.04 ioBroker (redis) > VM Ubuntu 16.04 mySQL
Slave: Pi 3 ohne SD (Boot USB SLC)
CCU2, hue 2, DS 1512+, WeMos, Harmony Hub, Alexa
Adapter: Fritzbox / Skripte: dynamic hue, Bluetooth Scanner, WIFFI-wz

Benutzeravatar
Homoran
guru
Beiträge: 11859
Registriert: 08.08.2014, 16:50

Re: node-red: Spritpreise einlesen

Beitrag von Homoran » 23.04.2015, 06:50

Code: Alles auswählen

 Viele Grüße nach Godorf ;-) 
Knapp daneben Bild

Womit und wie machst du die Tabellen?

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

Benutzeravatar
ruhr70
guru
Beiträge: 2250
Registriert: 24.02.2015, 19:40

Re: node-red: Spritpreise einlesen

Beitrag von ruhr70 » 23.04.2015, 17:36

Ich habe mir einen speziellen JSON Editor installiert.
In meinem Fall Cocoa JSON Editor für den Mac.

Und dann einfach "neue Datei aus Zwischenablage" auswählen.
Intel NUC (NUC6i5SYH) -> ESXi 6 > VM Ubuntu 16.04 ioBroker (redis) > VM Ubuntu 16.04 mySQL
Slave: Pi 3 ohne SD (Boot USB SLC)
CCU2, hue 2, DS 1512+, WeMos, Harmony Hub, Alexa
Adapter: Fritzbox / Skripte: dynamic hue, Bluetooth Scanner, WIFFI-wz

pix
guru
Beiträge: 2621
Registriert: 04.11.2014, 17:49
Kontaktdaten:

Re: node-red: Spritpreise einlesen

Beitrag von pix » 23.04.2015, 21:05

http://codebeautify.org/jsonviewer ist auch ganz praktisch.

Gruß
Pix
Mac mini (OS X 10.12.6, node v6.12.2, npm v4.6.1), Redis, InfluxDB, VIS via iOS; gesteuerte Systeme: Homematic CCU2, Homepilot, Roomba, Sonos, XEOMA auf Odroid XU4; Adapter: feiertage, tvspielfilm, rtv, solarwetter, tankerkoenig, homepilot, epson_stylus_px830

Benutzeravatar
ruhr70
guru
Beiträge: 2250
Registriert: 24.02.2015, 19:40

Re: node-red: Spritpreise einlesen

Beitrag von ruhr70 » 24.04.2015, 00:48

pix hat geschrieben:http://codebeautify.org/jsonviewer ist auch ganz praktisch.

Gruß
Pix
Danke! Super Tipp!
Intel NUC (NUC6i5SYH) -> ESXi 6 > VM Ubuntu 16.04 ioBroker (redis) > VM Ubuntu 16.04 mySQL
Slave: Pi 3 ohne SD (Boot USB SLC)
CCU2, hue 2, DS 1512+, WeMos, Harmony Hub, Alexa
Adapter: Fritzbox / Skripte: dynamic hue, Bluetooth Scanner, WIFFI-wz

Benutzeravatar
Bluefox
Site Admin
Beiträge: 7909
Registriert: 13.07.2014, 14:42
Kontaktdaten:

Re: node-red: Spritpreise einlesen

Beitrag von Bluefox » 24.04.2015, 16:06

Es gibt auch plugin für notepad++ - JSTool
JSON.png

Benutzeravatar
derAuge
professional
Beiträge: 494
Registriert: 14.02.2015, 09:02

Re: node-red: Spritpreise einlesen

Beitrag von derAuge » 25.04.2015, 18:50

so,
nachdem ich nun auch wieder ein TestSystem laufen habe wollte ich auch weiter mit NODE-RED testen
msg.payload = msg.payload.stations[1].price;
return msg;
wenn ich diese function nehme bekomme ich immer eine Fehlermeldung

Code: Alles auswählen

TypeError: Cannot read property '1' of undefined (line 1, col 35)

Code: Alles auswählen

	25 Apr 20:00:18 - [error] [function:Station 1] TypeError: Cannot read property '1' of undefined (line 1, col 35)
was mache ich falsch?
wie ist da der Stand bei euch?

Gruß
derAuge

Master: DN2820FYKH (4GB) Linux NUC 4.4.0-22-generic #40-Ubuntu x86_64 #v4.4.5 # 2.15.5
Slave: Linux RPi2-1 4.1.19-v7+ #858 v4.4.3 # 2.15.1
SQL-DB : Linux DS 3.10.77 #7321 x86_64 synology412+
Test: Linux Pi2-3 4.4.11-v7+ #888 #v4.4.5 # 2.15.5

Benutzeravatar
ruhr70
guru
Beiträge: 2250
Registriert: 24.02.2015, 19:40

Re: node-red: Spritpreise einlesen

Beitrag von ruhr70 » 25.04.2015, 19:05

Was kommt denn, wenn Du die URL, die Du im http response node eingetragen hast, direkt im Browser eingibst?
Kannst Du das Ergebnis hier posten.

stations[1] ist die zweite Tankstelle.

Vielleicht ergibt Dein eingestellter Radius ja weniger als eine Tankstelle.
Intel NUC (NUC6i5SYH) -> ESXi 6 > VM Ubuntu 16.04 ioBroker (redis) > VM Ubuntu 16.04 mySQL
Slave: Pi 3 ohne SD (Boot USB SLC)
CCU2, hue 2, DS 1512+, WeMos, Harmony Hub, Alexa
Adapter: Fritzbox / Skripte: dynamic hue, Bluetooth Scanner, WIFFI-wz

Benutzeravatar
derAuge
professional
Beiträge: 494
Registriert: 14.02.2015, 09:02

Re: node-red: Spritpreise einlesen

Beitrag von derAuge » 25.04.2015, 19:06

Code: Alles auswählen

{"license":"CC BY 4.0 -  http:\/\/creativecommons.tankerkoenig.de","data":"MTS-K","stations":[{"name":"JET BORKEN NORDRING 46-48","lat":51.84667,"lng":6.84642,"brand":"JET","dist":1.7,"price":1.189,"id":"XXXX","street":"NORDRING 46-48","houseNumber":null,"postCode":46325,"place":"BORKEN"},{"name":"AVIA Tankstelle","lat":51.852592,"lng":6.864203,"brand":"AVIA","dist":0.4,"price":1.199,"id":"11652441-f3fc-4fc9-a87a-664db366b5af","street":"Ahauser Stra\u00dfe","houseNumber":"21","postCode":46325,"place":"Borken"},{"name":"AVIA Tankstelle","lat":51.85873,"lng":6.8657813,"brand":"AVIA","dist":0.8,"price":1.199,"id":"XXXX","street":"Ahauser Stra\u00dfe","houseNumber":"84","postCode":46325,"place":"Borken"},{"name":"A. Kuenstler GmbH","lat":51.86033,"lng":6.87505,"brand":"A. Kuenstler GmbH","dist":1,"price":1.199,"id":"XXXX","street":"Landwehr","houseNumber":"27","postCode":46325,"place":"Borken"},{"name":"AVIA Service Station","lat":51.857345,"lng":6.875487,"brand":"Freie Tankstelle","dist":0.8,"price":1.239,"id":"XXXX","street":"Otto-Hahn-Str.","houseNumber":"35","postCode":46325,"place":"Borken"},{"name":"Autozentrum Ebber GmbH & Co.KG","lat":51.83871,"lng":6.85797,"brand":"Westfalen","dist":1.6,"price":1.239,"id":"XXXX","street":"Raesfelder Str.","houseNumber":"24","postCode":46325,"place":"Borken"},{"name":"Aral Tankstelle","lat":51.844696,"lng":6.843055,"brand":"ARAL","dist":2,"price":1.239,"id":"XXXX","street":"Nordring","houseNumber":"178","postCode":46325,"place":"Borken"}]}

Master: DN2820FYKH (4GB) Linux NUC 4.4.0-22-generic #40-Ubuntu x86_64 #v4.4.5 # 2.15.5
Slave: Linux RPi2-1 4.1.19-v7+ #858 v4.4.3 # 2.15.1
SQL-DB : Linux DS 3.10.77 #7321 x86_64 synology412+
Test: Linux Pi2-3 4.4.11-v7+ #888 #v4.4.5 # 2.15.5

Benutzeravatar
ruhr70
guru
Beiträge: 2250
Registriert: 24.02.2015, 19:40

Re: node-red: Spritpreise einlesen

Beitrag von ruhr70 » 25.04.2015, 19:24

Um Deine zweite Frage zu beantworten... es funktioniert wunderbar.

Deine URL ermittelt sieben Tankstellen.
Deine Funktion müsste den Preis der 2. Tankstelle ermitteln (derzeit AVIA), 1,199 EUR.

Ich würde jetzt ein Debug node direkt hinter dem http response node setzen. Dann müsste die Ausgabe rauskommen, die Du vorhin gepostet hattest.
Intel NUC (NUC6i5SYH) -> ESXi 6 > VM Ubuntu 16.04 ioBroker (redis) > VM Ubuntu 16.04 mySQL
Slave: Pi 3 ohne SD (Boot USB SLC)
CCU2, hue 2, DS 1512+, WeMos, Harmony Hub, Alexa
Adapter: Fritzbox / Skripte: dynamic hue, Bluetooth Scanner, WIFFI-wz

Benutzeravatar
derAuge
professional
Beiträge: 494
Registriert: 14.02.2015, 09:02

Re: node-red: Spritpreise einlesen

Beitrag von derAuge » 25.04.2015, 19:29

ruhr70 hat geschrieben:Um Deine zweite Frage zu beantworten... es funktioniert wunderbar.

Deine URL ermittelt sieben Tankstellen.
Deine Funktion müsste den Preis der 2. Tankstelle ermitteln (derzeit AVIA), 1,199 EUR.

Ich würde jetzt ein Debug node direkt hinter dem http response node setzen. Dann müsste die Ausgabe rauskommen, die Du vorhin gepostet hattest.

genau das habe ich ja gemacht
Tanker.PNG
ich schreich ja auch in eine Datei
Da kann ich ja sehen was abgeholt wurde
aber die Funktion (Station 1) bringt nur die Fehlermeldung

Code: Alles auswählen

msg.payload = msg.payload.stations[1].price;
return msg;

Master: DN2820FYKH (4GB) Linux NUC 4.4.0-22-generic #40-Ubuntu x86_64 #v4.4.5 # 2.15.5
Slave: Linux RPi2-1 4.1.19-v7+ #858 v4.4.3 # 2.15.1
SQL-DB : Linux DS 3.10.77 #7321 x86_64 synology412+
Test: Linux Pi2-3 4.4.11-v7+ #888 #v4.4.5 # 2.15.5

Benutzeravatar
ruhr70
guru
Beiträge: 2250
Registriert: 24.02.2015, 19:40

Re: node-red: Spritpreise einlesen

Beitrag von ruhr70 » 26.04.2015, 03:20

der Returntyp aus der http Abfrage ist falsch.
Du nutzt noch Text aus dem ersten Beispiel ganz oben.

Um JSON mit dem Script auszugeben muss der Returntyp auf Objekt stehen.

D.h. Deine erste Funktion wird dann nicht mehr korrekt funktionieren.


Gesendet von iPhone mit Tapatalk
Intel NUC (NUC6i5SYH) -> ESXi 6 > VM Ubuntu 16.04 ioBroker (redis) > VM Ubuntu 16.04 mySQL
Slave: Pi 3 ohne SD (Boot USB SLC)
CCU2, hue 2, DS 1512+, WeMos, Harmony Hub, Alexa
Adapter: Fritzbox / Skripte: dynamic hue, Bluetooth Scanner, WIFFI-wz

Antworten