Günstigste Tankstelle in der Umgebung
Moderator: Co-Administratoren
Re: Günstigste Tankstelle in der Umgebung
Hi Alchy,
Bei mir gehts! Ich habe noch eine kleine Korrektur gemacht, weil die API verändert wurde. Ich muss nur noch die Umlaute anpassen. Sonst scheint es zu funktionieren...
Grüße,
ldittmar
P.S.: WebMatic nimmt wirklich viel Zeit in Anspruch...
Bei mir gehts! Ich habe noch eine kleine Korrektur gemacht, weil die API verändert wurde. Ich muss nur noch die Umlaute anpassen. Sonst scheint es zu funktionieren...
Grüße,
ldittmar
P.S.: WebMatic nimmt wirklich viel Zeit in Anspruch...
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
-
- Beiträge: 29
- Registriert: 24.08.2016, 16:01
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 5 Mal
- Danksagung erhalten: 1 Mal
Re: Günstigste Tankstelle in der Umgebung
Hallo Community,
ich lese in diesem Forum nun schon seit einiger Zeit mit und habe dadurch schon manches Projekt umsetzen können.
Auch dieses Skript läuft problemlos.
Nur bin ich mit der Funktionalität noch nicht ganz zufrieden.
Ich habe 3 Tankstellen, die ich per ID nach dem Preis für E10 abfrage.
Nun hätte ich aber gerne, dass mir nur die günstigste in einer Variable ausgegeben wird (z.B. Variable "guenstig" --> "Tankstelle B 1,20 EUR"). Die anderen interessieren mich nicht.
Könnte sich jemand von euch Profis diesem Thema annehmen?
Derzeit ist es so, dass dieses Skript 3mal (jeweils für eine Tanke) läuft und jeweils eine Variable befüllt (muss aber nicht bei der Arbeitsweise bleiben, wenn anderes günstiger ist):
Vielen Dank schonmal!!
Grüße
Hofi
ich lese in diesem Forum nun schon seit einiger Zeit mit und habe dadurch schon manches Projekt umsetzen können.
Auch dieses Skript läuft problemlos.
Nur bin ich mit der Funktionalität noch nicht ganz zufrieden.
Ich habe 3 Tankstellen, die ich per ID nach dem Preis für E10 abfrage.
Nun hätte ich aber gerne, dass mir nur die günstigste in einer Variable ausgegeben wird (z.B. Variable "guenstig" --> "Tankstelle B 1,20 EUR"). Die anderen interessieren mich nicht.
Könnte sich jemand von euch Profis diesem Thema annehmen?
Derzeit ist es so, dass dieses Skript 3mal (jeweils für eine Tanke) läuft und jeweils eine Variable befüllt (muss aber nicht bei der Arbeitsweise bleiben, wenn anderes günstiger ist):
Code: Alles auswählen
! Code auf Wunsch des Erstellers gelöscht
Vielen Dank schonmal!!
Grüße
Hofi
Zuletzt geändert von Hofi90 am 30.08.2016, 08:23, insgesamt 1-mal geändert.
-
- Beiträge: 10754
- Registriert: 24.02.2011, 01:34
- System: CCU
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 673 Mal
Re: Günstigste Tankstelle in der Umgebung
Hofi90 hat geschrieben: Derzeit ist es so, dass dieses Skript 3mal (jeweils für eine Tanke) läuft und jeweils eine Variable befüllt (muss aber nicht bei der Arbeitsweise bleiben, wenn anderes günstiger ist):
Code: Alles auswählen
! Tankerkönig angepasst by Alchy
...
Ich nehme an, das das Script modifiziert wurde?
Da ja oben im Kopf drin steht, das man mehrere Tankstellen in einem Rutsch abfragen kann in dem man die Tankstellen IDs kommasepariert einträgt, stellt sich die Frage, wieso du das nicht machst?
Aber dann wären wir bei den Änderungen im unteren Teil des Scriptes.
Leicht zurück modifiziert gibt das Script den Namen und den E10 Preis aller Tankstellen untereinander aus.
Code: Alles auswählen
! Tankerkönig angepasst by Alchy
var apikey = "++++++++++++++++++"; !Ihr API-Key
var tankids = "fbfe3e46-9aab-4265-b16d-b7bf2b8aa775,879b061b-994d-40ab-9381-db98d44f4ec4,3c10e341-cc32-410a-93fd-34494f60309d," ; ! Alle gewünschten Tankstellen komma separiert. Auch nur eine geht natürlich !
! URL der tankerkoenig.de API
string tankerKoenigURL = "https://creativecommons.tankerkoenig.de/json/detail.php";
integer slist = "";
! Nun über alle ausgesuchten Tankstellen iterieren.
string tankid;
foreach(tankid, tankids.Split(",")) {
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 " # "-d id=" # tankid # " -d apikey=" # apikey # " " #tankerKoenigURL;
! curl Abfrage starten
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var srueck = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
! Name
var posValueStart = "name\":\"";
var posValueEnd = "\",\"";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var name = srueck.Substr(posValue, 100).StrValueByIndex(posValueEnd, 0);
! offen
var posValueStart = ",\"isOpen\":";
var posValueEnd = ",";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var off = srueck.Substr(posValue, 100).StrValueByIndex(posValueEnd, 0);
if (off == "true") { var offen = " offen "; } else { var offen = " geschlossen "; }
!Preis e10
var posValueStart = ",\"e10\":";
var posValueEnd = ",";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var e10 = srueck.Substr(posValue, 4).StrValueByIndex(posValueEnd, 0);
slist = slist #name #" : " #e10 #" Euro \n"; ! Beispielverwendung, alle Daten in eine Variable schreiben
}
WriteLine(slist); ! Ausgabe auf dem Bildschirm
! dom.GetObject("TankenKaspar").State(slist); ! Speichern in Systemvariable
Ja ich weiß, das ist zwar auch NICHT 100% das was du gefordert hast, aber erstmal sind wir auf einen funktionierenden Stand. Um nur den niedrigsten preis zu erhalten musst du die Preise in eine Zahl umwandeln und dann vergleichen. Nur macht das Sinn?
Vielleicht ist ja die Zweitgünstigste Tanke näher dran und es lohnt sich nicht einen Umweg in Kauf zu nehmen, warum nicht die Ausgabe so in eine StringVariable schreiben?
Alchy
Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.
© Sandra Pulsfort (*1974)
Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.
Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.
-
- Beiträge: 29
- Registriert: 24.08.2016, 16:01
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 5 Mal
- Danksagung erhalten: 1 Mal
Re: Günstigste Tankstelle in der Umgebung
Hallo,
danke für deine schnelle Antwort und sorry für meine späte Antwort.
Für mich ist also der billigste Preis von den 3 Tankstellen und der zugehörige Name der Tankstelle relevant.
Schonmal danke fürs reindenken!
Grüße
Hofi
danke für deine schnelle Antwort und sorry für meine späte Antwort.
Ja, das habe ich bereits etwas modifiziert.Als erstes muss ich sagen, das das Script so nicht von mir veröffentlicht wurde ! oder doch?
Ich nehme an, das das Script modifiziert wurde?
Naja, weil ich dann die Preise von allen Tankstellen in einer Variablen habe. Da ich ja nur den billigsten Preis haben will, dachte ich, es ist einfacher, wenn man die Preise gleich in separaten Variablen speichert.Da ja oben im Kopf drin steht, das man mehrere Tankstellen in einem Rutsch abfragen kann in dem man die Tankstellen IDs kommasepariert einträgt, stellt sich die Frage, wieso du das nicht machst?
Für mich definitiv: Ich fahre auf dem Weg zur Arbeit (und natürlich auch auf dem Heimweg) an 3 Tankstellen innerhalb von 15 Kilometern vorbei. Tanken möchte ich natürlich bei der billigsten, für mich ist es also irrelevant, ob die günstigste noch 5 Kilometer oder 8 Kilometer entfernt ist (sollte der Sprit schon so knapp sein, dass die relevant wäre, würde ich sowieso einfach bei der nächsten Tanke tanken )Nur macht das Sinn?
Für mich ist also der billigste Preis von den 3 Tankstellen und der zugehörige Name der Tankstelle relevant.
Schonmal danke fürs reindenken!
Grüße
Hofi
-
- Beiträge: 10754
- Registriert: 24.02.2011, 01:34
- System: CCU
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 673 Mal
Re: Günstigste Tankstelle in der Umgebung
Dann lösch bitte das Script aus deinem Post, denn so sollte es nicht wirklich funktionieren.Hofi90 hat geschrieben: Ja, das habe ich bereits etwas modifiziert.
Und wenn der Preis von 3 Tankstellen in der Variablen steht, kannst du nicht selber den billigsten daraus auswählen?Hofi90 hat geschrieben:Für mich definitiv: Ich fahre auf dem Weg zur Arbeit (und natürlich auch auf dem Heimweg) an 3 Tankstellen innerhalb von 15 Kilometern vorbei. Tanken möchte ich natürlich bei der billigsten, für mich ist es also irrelevant, ob die günstigste noch 5 Kilometer oder 8 Kilometer entfernt ist (sollte der Sprit schon so knapp sein, dass die relevant wäre, würde ich sowieso einfach bei der nächsten Tanke tanken )Alchy hat geschrieben:Nur macht das Sinn?
Ich versteh es immer noch nicht. Liegt bestimmt an mir.
Dann musst du das machen,was ich oben schrieb. Preis in Zahl umwandeln und vergleichen.Hofi90 hat geschrieben: Für mich ist also der billigste Preis von den 3 Tankstellen und der zugehörige Name der Tankstelle relevant.
So ungefähr sollte es mit dem Abstrich funktionieren, das wenn 2 Tanken den billigsten Preis haben, die erste Tanke aus der Liste gewinnt.
Code: Alles auswählen
! Tankerkönig angepasst by Alchy v0.4
! entweder alle oder nur die billigste von x Tankstellen ausgeben
var apikey = "+++++++++++++++++++"; !Ihr API-Key
var tankids = "fbfe3e46-9aab-4265-b16d-b7bf2b8aa775,a314d76c-c570-4a87-8efe-fa3d4488a847,6b2bd0b8-22db-424e-8547-c2abcfe06a6c" ; ! Alle gewünschten Tankstellen komma separiert. Auch nur eine geht natürlich !
var te10 = 5.0;
! URL der tankerkoenig.de API
string tankerKoenigURL = "https://creativecommons.tankerkoenig.de/json/detail.php";
integer slist = "";
! Nun über alle ausgesuchten Tankstellen iterieren.
string tankid;
foreach(tankid, tankids.Split(",")) {
string cmd = "/usr/local/addons/cuxd/curl --trace trace.txt -k -X GET -H \"Content-Type:application/json\" -G " # "-d id=" # tankid # " -d apikey=" # apikey # " " #tankerKoenigURL;
! curl Abfrage starten
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var srueck = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
! Name
var posValueStart = "name\":\"";
var posValueEnd = "\",\"";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var name = srueck.Substr(posValue, 100).StrValueByIndex(posValueEnd, 0);
! offen
var posValueStart = ",\"isOpen\":";
var posValueEnd = ",";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var off = srueck.Substr(posValue, 100).StrValueByIndex(posValueEnd, 0);
if (off == "true") { var offen = " offen "; } else { var offen = " geschlossen "; }
!Preis e10
var posValueStart = ",\"e10\":";
var posValueEnd = ",";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var e10 = srueck.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0).ToFloat();
if (e10 < te10) { string billig = name #" : " #e10.ToString(3) #" Euro ";
var te10 = e10; }
slist = slist #name #" : " #e10.ToString(3) #" Euro - ";
}
WriteLine("Billigste Tankstelle: \n "#billig);! Ausgabe billigster Preise auf dem Bildschirm
WriteLine("Alle Preise: \n"#slist); ! Ausgabe aller Preise auf dem Bildschirm
! dom.GetObject("TankenKaspar").State(slist); ! Speichern in Systemvariable entweder slist für alle oder billig für billigste
Da solche Script mehrere Sekunden laufen, vorsichtig mit dem Intervall des Aufrufs umgehen.
Alchy
Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.
© Sandra Pulsfort (*1974)
Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.
Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.
-
- Beiträge: 29
- Registriert: 24.08.2016, 16:01
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 5 Mal
- Danksagung erhalten: 1 Mal
Re: Günstigste Tankstelle in der Umgebung
ist erledigt!Dann lösch bitte das Script aus deinem Post, denn so sollte es nicht wirklich funktionieren.
Habs probiert, funktioniert: DAS ist genaus das, was ich wollteSo ungefähr sollte es mit dem Abstrich funktionieren, das wenn 2 Tanken den billigsten Preis haben, die erste Tanke aus der Liste gewinnt. [...]
Jedenfalls theoretisch. Probier es einfach aus, ich kann es nicht.
Vielen Vielen Vielen Dank für die schnelle Hilfe! Wirklich Klasse hier!
Werde mir heute Abend das Skript nochmal genauer anschauen, wie du das gelöst hast, damit ich beim nächsten Mal nicht mehr fragen muss!
Danke nochmal!
Grüße
Hofi
-
- Beiträge: 10754
- Registriert: 24.02.2011, 01:34
- System: CCU
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 673 Mal
Re: Günstigste Tankstelle in der Umgebung
Geht bestimmt auch anders, aber der einfachste Weg erschien mir der schon von mir Beschriebene:Hofi90 hat geschrieben: Werde mir heute Abend das Skript nochmal genauer anschauen, wie du das gelöst hast
Meist sind ja die ersten auch die besten Gedanken.Alchy hat geschrieben:....musst du die Preise in eine Zahl umwandeln und dann vergleichen....
Viel Spass noch
Alchy
Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.
© Sandra Pulsfort (*1974)
Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.
Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.
-
- Beiträge: 5
- Registriert: 30.10.2021, 21:33
- System: CCU
Re: Günstigste Tankstelle in der Umgebung
Hallo zusammen,
das Thema ist zwar schon älter aber ich möchte mich auch mal in die Reihe der "Problemkinder" einordnen. Ich habe heute versucht die Anleitung von Alchy nachzumachen und stand vor dem Problem, dass das Script nicht funktioniert hatte. Inzwischen sind 6 Jahre vergangen aber das Script auf Seite 6 hatte funktioniert.
Ich habe CuxD angelegt und auch eine Systemvariable und ich habe auch versucht mich in die Doku von Cux einzulesen aber scheinbar bin ich zu blöd dafür :-/ In der Anleitung wird der Schritt mit Cux ausgelassen und auf Beiträge im Forum verwiesen aber ich komme damit einfach nicht weiter.
Ich bekomme immer 0,00 € angezeigt wenn ich in der Systemvariablen schaue. Wie gesagt Script an sich funzt:
Bei Script testen, erhalte ich:
Billigste Tankstelle:
Autohaus Kemper GmbH : 1.629 Euro
Alle Preise:
Aral Tankstelle : 1.659 Euro - Autohaus Kemper GmbH : 1.629 Euro - Globus Handelshof GmbH & Co. KG Betriebsst\u00e4tte Gensingen - TS II : 1.659 Euro - TotalEnergies Bingen : 1.659 Euro -
Kann mir jemand helfen bzw. sagen was ich falsch mache?
LG Greeny
das Thema ist zwar schon älter aber ich möchte mich auch mal in die Reihe der "Problemkinder" einordnen. Ich habe heute versucht die Anleitung von Alchy nachzumachen und stand vor dem Problem, dass das Script nicht funktioniert hatte. Inzwischen sind 6 Jahre vergangen aber das Script auf Seite 6 hatte funktioniert.
Code: Alles auswählen
var apikey = "MEINE API"; !Ihr API-Key
var tankids = "eaabfae1-5c23-4195-b8aa-5d5572ceb112,51c16fbf-3c91-46c4-9712-2b28fc1d568a,38e61a6e-83c2-4c9b-94fe-794db37db591,69f766eb-c497-491d-8a92-b99b799c94dc" ; ! Alle gewünschten Tankstellen komma separiert. Auch nur eine geht natürlich !
var te10 = 5.0;
! URL der tankerkoenig.de API
string tankerKoenigURL = "https://creativecommons.tankerkoenig.de/json/detail.php";
integer slist = "";
! Nun über alle ausgesuchten Tankstellen iterieren.
string tankid;
foreach(tankid, tankids.Split(",")) {
string cmd = "/usr/local/addons/cuxd/curl --trace trace.txt -k -X GET -H \"Content-Type:application/json\" -G " # "-d id=" # tankid # " -d apikey=" # apikey # " " #tankerKoenigURL;
! curl Abfrage starten
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var srueck = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
! Name
var posValueStart = "name\":\"";
var posValueEnd = "\",\"";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var name = srueck.Substr(posValue, 100).StrValueByIndex(posValueEnd, 0);
! offen
var posValueStart = ",\"isOpen\":";
var posValueEnd = ",";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var off = srueck.Substr(posValue, 100).StrValueByIndex(posValueEnd, 0);
if (off == "true") { var offen = " offen "; } else { var offen = " geschlossen "; }
!Preis e10
var posValueStart = ",\"e10\":";
var posValueEnd = ",";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var e10 = srueck.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0).ToFloat();
if (e10 < te10) { string billig = name #" : " #e10.ToString(3) #" Euro ";
var te10 = e10; }
slist = slist #name #" : " #e10.ToString(3) #" Euro - ";
}
WriteLine("Billigste Tankstelle: \n "#billig);! Ausgabe billigster Preise auf dem Bildschirm
WriteLine("Alle Preise: \n"#slist); ! Ausgabe aller Preise auf dem Bildschirm
! dom.GetObject("Benzinpreise").State(slist); ! Speichern in Systemvariable entweder slist für alle oder billig für billigste
Ich bekomme immer 0,00 € angezeigt wenn ich in der Systemvariablen schaue. Wie gesagt Script an sich funzt:
Bei Script testen, erhalte ich:
Billigste Tankstelle:
Autohaus Kemper GmbH : 1.629 Euro
Alle Preise:
Aral Tankstelle : 1.659 Euro - Autohaus Kemper GmbH : 1.629 Euro - Globus Handelshof GmbH & Co. KG Betriebsst\u00e4tte Gensingen - TS II : 1.659 Euro - TotalEnergies Bingen : 1.659 Euro -
Kann mir jemand helfen bzw. sagen was ich falsch mache?
LG Greeny
Zuletzt geändert von alchy am 30.10.2021, 22:33, insgesamt 1-mal geändert.
Grund: Code in Codetags posten
Grund: Code in Codetags posten
-
- Beiträge: 544
- Registriert: 17.04.2021, 17:12
- System: CCU
- Hat sich bedankt: 27 Mal
- Danksagung erhalten: 123 Mal
Re: Günstigste Tankstelle in der Umgebung
Entferne mal aus dieser Zeile das Ausrufezeichen an der ersten Stelle.:
Dadurch ist die Zeile auskommentiert worden.
Die Systemvariable Benzinpreise muss natürlich angelegt sein.
Code: Alles auswählen
! dom.GetObject("Benzinpreise").State(slist); ! Speichern in Systemvariable entweder slist für alle oder billig für billigste
Die Systemvariable Benzinpreise muss natürlich angelegt sein.
Gruß
Harry
Harry
-
- Beiträge: 10754
- Registriert: 24.02.2011, 01:34
- System: CCU
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 673 Mal
Re: Günstigste Tankstelle in der Umgebung
Die Sytemvariable namens Benzinpreise muss in der CCU angelegt sein.
Das Ausrufezeichen in Zeile
muss entfernt werden.
Erstaunlich das ein ein so altes Script von mir grundsätzlich aber noch funktioniert.
Alchy
Das Ausrufezeichen in Zeile
Code: Alles auswählen
! dom.GetObject("Benzinpreise").State(slist); ! Speichern in Systemvariable entweder slist für alle oder billig für billigste
Erstaunlich das ein ein so altes Script von mir grundsätzlich aber noch funktioniert.
Alchy
Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.
© Sandra Pulsfort (*1974)
Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.
Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.