Günstigste Tankstelle in der Umgebung
Moderator: Co-Administratoren
-
- Beiträge: 72
- Registriert: 15.11.2014, 15:34
-
- Beiträge: 72
- Registriert: 15.11.2014, 15:34
Re: Günstigste Tankstelle in der Umgebung
Frage, kann man bei den Preisen auch die Uhrzeit der letzten Aktualisierung anzeigen, innerhalb der Systemvariablen?
Re: Günstigste Tankstelle in der Umgebung
Danke... das wars. Meine System Exec war anders bezeichnet.ldittmar hat geschrieben:
Genau so.... Damit das Ding läuft brauch man aber CUxD und ein virtuelles Gerät. (bei mir CUxD.CUX2801001:2)
Jetzt läufts auch bei mir!
Re: Günstigste Tankstelle in der Umgebung
Leider wird die Zeit der Aktualisierung nicht mitgeliefert.Frank Loecken hat geschrieben:Frage, kann man bei den Preisen auch die Uhrzeit der letzten Aktualisierung anzeigen, innerhalb der Systemvariablen?
Download: WebMatic 2.2.3. Für den Kauf von HM Geräte zur schnellere Weiterentwicklung von Webmatic, werden auch gerne SPENDEN entgegen genommen. Danke! Und hier geht es zur WebMatic Homepage
Re: Günstigste Tankstelle in der Umgebung
Was muss ich jetzt noch anpassen um eine weitere Spritsorte einzufügen...?
Re: Günstigste Tankstelle in der Umgebung
Leider geht das nicht. Man kann nur jeweils nach eine Sorte suchen. Es gibt aber die Möglichkeit alle Sorten einer bestimmten Tankstelle zu finden. Man könnte also diesen Skript so erweitern, dass er sich die restlichen Daten aus den 2 günstigsten Tankstellen holt. Wäre das ok? Oder halt die Suche einmal mit Benzin und einmal mit Diesel ausführenoreider hat geschrieben:Was muss ich jetzt noch anpassen um eine weitere Spritsorte einzufügen...?
Download: WebMatic 2.2.3. Für den Kauf von HM Geräte zur schnellere Weiterentwicklung von Webmatic, werden auch gerne SPENDEN entgegen genommen. Danke! Und hier geht es zur WebMatic Homepage
Re: Günstigste Tankstelle in der Umgebung
Dann lasse ich die Suche mit Diesel und Benzin durchführen.
Vielen Dank für das Script...
Vielen Dank für das Script...
ALTERNATIVES SKRIPT FÜR EINZELNE TANKSTELLEN
Guten Morgen!
Vielen Dank an ldittmar für das tolle Skript und den Hinweis, das bei tankerkoenig eine API vorhanden ist.
Da ich das Auslesen via Lat/Long & Radius persönlich etwas ungenau finde bzw. "schwammig" (es könnte sich z.B. mal etwas in der Art der Sortierung oder Darstellung durch die API ändern) , habe ich das Skript als Basis genommen und eine Variante erstellt mit der man gezielt von einer bestimmten Tankstelle alle Preise abfragen kann. So ist man sicher, dass die abgerufenen Daten definitiv von genau dieser einen Tankstelle kommen (das ist in meinen Augen die "robustere" Abfrage der Daten). Ich verwende dabei die detail.php Seite anstatt der im Originalskript verwendeten list.php.
Des weiteren habe ich das Skript für mich so "verschlankt", dass es nur die Preise in Variablen speichert, Adresse/Name etc. sind mir egal, da ich die Tankstellen ja einerseits kenne und andererseits mir die Variablen in PocketControl o.ä. Interfaces anzeigen lassen in denen sie eine eindeutige Bezeichnung haben.
Anleitung für das Script:
Generell: Es muss CUxD installiert und Exec als Gerät angelegt sein (zu finden unter 28 System > Funktion Exec, für Details zur Installation etc. bitte entsprechend hier im Forum oder CUxD Dokumentation informieren).
1. API bei tankerkoenig.de beantragen (https://creativecommons.tankerkoenig.de)
2. Die ID für die gewünschte Tankstelle rausfinden. Dazu diese Seite aufrufen: https://creativecommons.tankerkoenig.de/#demo
Dort dann LISTE MIT AKTUELLER POSITION auswählen. In der Liste kann man dann die ID für jede Tankstelle finden. Wenn man den Radius etc. anpassen möchte, so kann man auch die rote URL kopieren und die Werte vorher ändern (ebenso Lat/Long, kann man z.B. hier rausfinden: http://www.latlong.net) für die Umkreissuche. Auf jeden Fall muss man irgendwie an die gewünschten IDs kommen, alles andere ist hier nicht relevant. ACHTUNG: Die Preise in dieser Abfrage sind teilweise bewusst falsch, da die Demoabfrage mit einem API Code arbeitet, der nur für Demozwecke ist. Ihr müsst also definitv für das Skript einen eigenen Code beantragen.
3. CCU Variablen anlegen: Je nachdem wie viele Tankstellen und Spritsorten man abfragt müssen entsprechend viele Variablen angelegt werden. Die Benennung ist jedem selber überlassen. Ich habe z.B. Tanken_E10_Jet / Tanken_Diesel_Jet etc. Variablen als Typ ZAHL anlegen!
4. Skript in CCU Programm einfügen und folgende Werte anpassen (sind im Skript auch mit XXX und GROSSBUCHSTABEN angegeben):
- API KEY
- Tankstellen ID
- Die unter 3. angelegten CCU Variablen eintragen (Sind im Skript als Platzhalter mit EIGENE VARIABLE gekennzeichnet)
Das Skript ist so vorbereitet, dass es alle drei Sorten immer abruft. Wenn jetzt nur E10 interessant sein sollte, so kann man einfach die anderen Codeblöcke aus dem Skript löschen (immer mit ! --- SORTENNAME am Anfang und ! --------- am Ende gekennzeichnet), oder einfach auskommentieren, indem vor die jeweiligen 5 Zeilen ein ! gesetzt wird.
Wenn man von einer weitere Tankstelle Daten abrufen möchte, so kann man das Skript einfach erneut dem Programm hinzufügen. Ggf. mit VERZÖGERT UM XXX SEKUNDEN, damit sich da nichts in die Quere kommt.
Vielen Dank an ldittmar für das tolle Skript und den Hinweis, das bei tankerkoenig eine API vorhanden ist.
Da ich das Auslesen via Lat/Long & Radius persönlich etwas ungenau finde bzw. "schwammig" (es könnte sich z.B. mal etwas in der Art der Sortierung oder Darstellung durch die API ändern) , habe ich das Skript als Basis genommen und eine Variante erstellt mit der man gezielt von einer bestimmten Tankstelle alle Preise abfragen kann. So ist man sicher, dass die abgerufenen Daten definitiv von genau dieser einen Tankstelle kommen (das ist in meinen Augen die "robustere" Abfrage der Daten). Ich verwende dabei die detail.php Seite anstatt der im Originalskript verwendeten list.php.
Des weiteren habe ich das Skript für mich so "verschlankt", dass es nur die Preise in Variablen speichert, Adresse/Name etc. sind mir egal, da ich die Tankstellen ja einerseits kenne und andererseits mir die Variablen in PocketControl o.ä. Interfaces anzeigen lassen in denen sie eine eindeutige Bezeichnung haben.
Anleitung für das Script:
Generell: Es muss CUxD installiert und Exec als Gerät angelegt sein (zu finden unter 28 System > Funktion Exec, für Details zur Installation etc. bitte entsprechend hier im Forum oder CUxD Dokumentation informieren).
1. API bei tankerkoenig.de beantragen (https://creativecommons.tankerkoenig.de)
2. Die ID für die gewünschte Tankstelle rausfinden. Dazu diese Seite aufrufen: https://creativecommons.tankerkoenig.de/#demo
Dort dann LISTE MIT AKTUELLER POSITION auswählen. In der Liste kann man dann die ID für jede Tankstelle finden. Wenn man den Radius etc. anpassen möchte, so kann man auch die rote URL kopieren und die Werte vorher ändern (ebenso Lat/Long, kann man z.B. hier rausfinden: http://www.latlong.net) für die Umkreissuche. Auf jeden Fall muss man irgendwie an die gewünschten IDs kommen, alles andere ist hier nicht relevant. ACHTUNG: Die Preise in dieser Abfrage sind teilweise bewusst falsch, da die Demoabfrage mit einem API Code arbeitet, der nur für Demozwecke ist. Ihr müsst also definitv für das Skript einen eigenen Code beantragen.
3. CCU Variablen anlegen: Je nachdem wie viele Tankstellen und Spritsorten man abfragt müssen entsprechend viele Variablen angelegt werden. Die Benennung ist jedem selber überlassen. Ich habe z.B. Tanken_E10_Jet / Tanken_Diesel_Jet etc. Variablen als Typ ZAHL anlegen!
4. Skript in CCU Programm einfügen und folgende Werte anpassen (sind im Skript auch mit XXX und GROSSBUCHSTABEN angegeben):
- API KEY
- Tankstellen ID
- Die unter 3. angelegten CCU Variablen eintragen (Sind im Skript als Platzhalter mit EIGENE VARIABLE gekennzeichnet)
Das Skript ist so vorbereitet, dass es alle drei Sorten immer abruft. Wenn jetzt nur E10 interessant sein sollte, so kann man einfach die anderen Codeblöcke aus dem Skript löschen (immer mit ! --- SORTENNAME am Anfang und ! --------- am Ende gekennzeichnet), oder einfach auskommentieren, indem vor die jeweiligen 5 Zeilen ein ! gesetzt wird.
Wenn man von einer weitere Tankstelle Daten abrufen möchte, so kann man das Skript einfach erneut dem Programm hinzufügen. Ggf. mit VERZÖGERT UM XXX SEKUNDEN, damit sich da nichts in die Quere kommt.
Code: Alles auswählen
!-----------------------------------------------------------------------------
! Basisdaten definieren
!-----------------------------------------------------------------------------
var apikey = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"; !API KEY EINTRAGEN
var tankid = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"; !TANKSTELLEN ID EINTRAGEN
!-----------------------------------------------------------------------------
! Werte von tankerkoenig holen
!-----------------------------------------------------------------------------
string tankenUrl = "https://creativecommons.tankerkoenig.de/json/detail.php";
string params = "-d id=" + tankid + " -d apikey=" + apikey;
string cmd = "LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl --trace trace.txt -k -X GET -H \"Content-Type:application/json\" -G " + params + " " + tankenUrl;
var stdout;
var posStart;
var posEnd;
var preis;
var substring;
var posValueStart;
var posValueEnd;
var posValue;
dom.GetObject("CUxD.CUX2801001:2.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801001:2.CMD_QUERY_RET").State(1);
stdout = dom.GetObject("CUxD.CUX2801001:2.CMD_RETS").State();
!-----------------------------------------------------------------------------
! Preise aus Daten von tankerkoenig auslesen und in CCU Variablen schreiben
!-----------------------------------------------------------------------------
posStart = "{";
posEnd = "}";
substring = stdout.Substr(stdout.Find(posStart), stdout.Find(posEnd));
! --- Preis E10
posValueStart = "\"e10\":";
posValueEnd = ",";
posValue = substring.Find(posValueStart) + posValueStart.Length();
preis = substring.Substr(posValue, 6).StrValueByIndex(posValueEnd, 0) ;
dom.GetObject("EIGENE VARIABLE").Variable(preis.ToFloat()); !EIGENE VARIABLE EINTRAGEN
!-----------
! --- Preis E5
posValueStart = "\"e5\":";
posValueEnd = ",";
posValue = substring.Find(posValueStart) + posValueStart.Length();
preis = substring.Substr(posValue, 6).StrValueByIndex(posValueEnd, 0) ;
dom.GetObject("EIGENE VARIABLE").Variable(preis.ToFloat()); !EIGENE VARIABLE EINTRAGEN
!-----------
! --- Preis Diesel
posValueStart = "\"diesel\":";
posValueEnd = ",";
posValue = substring.Find(posValueStart) + posValueStart.Length();
preis = substring.Substr(posValue, 6).StrValueByIndex(posValueEnd, 0) ;
dom.GetObject("EIGENE VARIABLE").Variable(preis.ToFloat()); !EIGENE VARIABLE EINTRAGEN
!-----------
Zuletzt geändert von MarcMatic am 13.05.2015, 14:21, insgesamt 1-mal geändert.
Re: Günstigste Tankstelle in der Umgebung
Das ist ein guter Script. Danke für die Idee
Habe ihn eingebaut und es funktioniert.
Nun habe ich bei dem Anlegen der Systemvariabeln gleich 3 Päärchen angelegt. Danach stellte ich fest, dass der Sript nur für 2 Tankstellen ausgelegt ist.
Dann packte mich der Ehrgeitz und ich habe mich genauer mit dem Script beschäftigt.
nachdem ich herausgefunden hatte was bei der Abfrage zurück kommt (stdout) habe ich folgendes Überlegt:
~~~ ausschnitt ~~~~
Also wollte ich die Start/Ende-Positionen der Tankstellen herausfinden um danach die Adressen / Preise zu ermitteln
Da komme ich leider nicht wirklich weiter.
Hat jemand eine einfachere Idee um die Positionen heraus zu finden?
Gruß
derAuge
Habe ihn eingebaut und es funktioniert.
Nun habe ich bei dem Anlegen der Systemvariabeln gleich 3 Päärchen angelegt. Danach stellte ich fest, dass der Sript nur für 2 Tankstellen ausgelegt ist.
Dann packte mich der Ehrgeitz und ich habe mich genauer mit dem Script beschäftigt.
nachdem ich herausgefunden hatte was bei der Abfrage zurück kommt (stdout) habe ich folgendes Überlegt:
~~~ ausschnitt ~~~~
Code: Alles auswählen
WriteLine(stdout);
!------------------------------------------------------------------------------------------
!-- Die Tankstellen stehen zwischen [{"name": ......},{"name": .......},{"name": .....}]}
!------------------------------------------------------------------------------------------
posStart = "[{";
posEnd = "]}";
tankstellen = stdout.Substr(stdout.Find(posStart), stdout.Find(posEnd));
WriteLine(tankstellen);
!-- Nun müssen wir die Positionen von {"name": suchen
string wordStart = "{\"name\":";
string wordEnde = "},";
integer tankstelle01_posStart = tankstellen.Find(wordStart);
integer tankstelle01_posEnde = tankstellen.Find(wordEnde);
WriteLine(tankstelle01_posStart);
WriteLine(tankstelle01_posEnde);
string tankstelle02 = tankstellen.Substr((tankstelle01_posEnde +1), 10000);
WriteLine(tankstelle02);
integer tankstelle02_posStart = tankstelle02.Find(wordStart);
integer tankstelle02_posEnde = tankstelle02.Find(wordEnde);
WriteLine(tankstelle02_posStart);
WriteLine(tankstelle02_posEnde);
string tankstelle03 = tankstellen.Substr((tankstelle02_posEnde +1), 10000);
WriteLine(tankstelle03);
integer tankstelle03_posStart = tankstelle03.Find(wordStart);
integer tankstelle03_posEnde = tankstelle03.Find(wordEnde);
WriteLine(tankstelle03_posStart);
WriteLine(tankstelle03_posEnde);
Da komme ich leider nicht wirklich weiter.
Hat jemand eine einfachere Idee um die Positionen heraus zu finden?
Gruß
derAuge
CCU2 # 3xHM-CC-RT-DN # 1x HM-CC-TC mit HM-CC-VD # HM-WDS30-T-O # 2x HM-LC-Sw2-FM # HM-Sen-MDIR-O-2 # HM-Sen-MDIR # HQ WebUI Version 2.5.1 # CUxD-V0.67 # CUxD-Highcharts 1.4.3 # HCS 0.0.3.2 # CCU.IO 1.0.47 # DashUI 0.9beta121
Re: Günstigste Tankstelle in der Umgebung
Schau dir mal mein alternatives Script an (siehe Post vor deinem). Das ist in meinen deutlichen einfacher und eindeutiger, weil man die Tankstellen gezielter abfragen kann via ID. Das Skript dann einfach so oft in ein Programm als einzelne DANN Schritte einfügen wie man es eben benötigt (also ein Skript pro Tankstelle).