Günstigste Tankstelle in der Umgebung

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Bernd80
Beiträge: 110
Registriert: 13.01.2016, 18:40

Re: Günstigste Tankstelle in der Umgebung

Beitrag von Bernd80 » 15.02.2016, 20:10

Hallo zusammen,

ich war auf der Suche nach ein Script was mir die Aktuellen Preise von Diesel von 2 Tankstellen in meinen Ort darstellt.
Habe dieses gefunden:

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
!-----------
Habe mein API Key eingetragen und die ID der Tankstelle. Ausserdem habe ich eine Variable mit dem Namen "Dieselpreis" angelegt als Zahl.Diesen Namen auch bei Diesel im Script eingetragen. Leider steht in der Variable immer 0.0 Euro.
Hat einer eine Idee woran es liegen könnte?

alchy
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

Beitrag von alchy » 16.02.2016, 23:02

Dein Script fragt nur eine Tankstelle ab, dafür aber nicht nur die Dieselpreise, sondern E5,E10,Diesel
soweit ich das absehen kann ohne die API zu benutzen. Ob es funktioniert habe ich nicht getestet.

Mit anderen Worten, das was du willst stimmt nicht mit dem überein, was du machst lt. deinem Post.
Was widerum zu der Frage führt: WAS willst du?

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.

Bernd80
Beiträge: 110
Registriert: 13.01.2016, 18:40

Re: Günstigste Tankstelle in der Umgebung

Beitrag von Bernd80 » 17.02.2016, 06:18

Ich will von den beiden Tankstellen in meinen Ort nur den aktuellen Diesel preis. Da das Script nur eine Tankstelle abfragt hätte ich es dann zwei mal eingebaut.

alchy
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

Beitrag von alchy » 17.02.2016, 09:07

Und das Script auf Seite 1 dieses Threads geht nicht dafür?

Egal, hier mal eine Variante, die das machen sollte was du willst.
Den Dieselpreis von 2 Tankstellen deiner Wahl auslesen.

Einfach oben wie gehabt apikey eintragen sowie die tankstellenids mit , getrennt eintragen.
Kannst natürlich auch 3 abfragen. :mrgreen:
Im Script Executer bzw. unter Script testen sollte dann die Information der
beiden Dieselpreise augegeben werden.

Code: Alles auswählen

! Tankerkönig Variante by Alchy 
var apikey = "xxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; !Ihr API-Key
var tankids = "51d4b6a9-a095-1aa0-e100-80009459e03a,1c4f126b-1f3c-4b38-9692-05c400ea8e61"  ; ! Alle gewünschten Tankstellen kommasepariert
! das wars schon - nun nix mehr aendern
! URL der tankerkoenig.de API
string tankerKoenigURL = "https://creativecommons.tankerkoenig.de/json/detail.php";
string 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);
string srueck = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();

!Name der Tanke
var posValueStart = "\"name\":\"";
var posValueEnd = "\",\"";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var name = srueck.Substr(posValue, 50).StrValueByIndex(posValueEnd, 0);

! Dieselpreis der Tanke
! var diesel = srueck.StrValueByIndex(":",17).StrValueByIndex(",",0); ! oder die nächsten 4 Zeilen 
var posValueStart = "\"diesel\":";
var posValueEnd = ",";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var diesel = srueck.Substr(posValue, 6).StrValueByIndex(posValueEnd, 0) ;

slist = slist #"an der tanke: "#name  #" kostet DIESEL: "#diesel # "€ \n";
}
WriteLine (slist);
Wenn du nun statt der Zeile

Code: Alles auswählen

WriteLine (slist);
die Zeile

Code: Alles auswählen

dom.GetObject("EIGENE STRINGVARIABLE").State(slist);
im Script einsetzt, wird die Ausgabe in eine vorher angelegte Zeichenkettensystemvariable Namens: EIGENE STRINGVARIABLE auf der CCU gespeichert.
Anderes Speichern ist auch möglich.
Und auch hier wieder der Hinweis: für dieses Script nicht den Scheduler der CCU strapazieren.

Alchy
PS: Was im Übrigen auch eines deiner Fehler im obigen Script sein dürfte.
Da wird .Variable() statt .State() benutzt um in der Variablen zu speichern.
Hab ich aber gerade erst gesehen und war schon fertig mit dem Schreiben.

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.

Bernd80
Beiträge: 110
Registriert: 13.01.2016, 18:40

Re: Günstigste Tankstelle in der Umgebung

Beitrag von Bernd80 » 19.02.2016, 09:22

Hey Alchy,

vielen Dank genau das hab ich gesucht. Funktioniert perfekt :D

Danke für deine Mühe.....

Lavatos
Beiträge: 60
Registriert: 26.12.2014, 21:52

Re: Günstigste Tankstelle in der Umgebung

Beitrag von Lavatos » 12.03.2016, 15:12

Hallo zusammen,

ich habe das Script bzw. die Ergänzung von Seite 2 erfolgreich zum Laufen gebracht. Allerdings werden die Variablen jeweils nur mit 2 Nachkommastellen befüllt. Wie kann ich das Script erweitern, dass auch die 3. (die 9) in die Variable geschrieben wird?

Vielen Dank und viele Grüße

Robert.F
Beiträge: 320
Registriert: 22.03.2011, 09:04
Wohnort: Österreich
Danksagung erhalten: 1 Mal

Re: Günstigste Tankstelle in der Umgebung

Beitrag von Robert.F » 27.03.2016, 21:53

Hallo,funktioniert das nur in Deutschland oder kann man man es auf Österreich erweitern?

Mit freundlichen Grüßen
Robert

r0ckstar82
Beiträge: 8
Registriert: 18.04.2016, 15:27

Re: Günstigste Tankstelle in der Umgebung

Beitrag von r0ckstar82 » 10.05.2016, 17:51

Hallo,

kann es sein das das Script nicht mehr funktioniert?
Bekomme seid ein paar Tagen keine Daten mehr angezeigt.
API Key etc alles überprüft.

Gruß

Benutzeravatar
Homoran
Beiträge: 8613
Registriert: 02.07.2013, 15:29
Wohnort: Köln
Danksagung erhalten: 4 Mal

Re: Günstigste Tankstelle in der Umgebung

Beitrag von Homoran » 10.05.2016, 18:07

ist das hier das gleiche?
http://homematic-forum.de/forum/viewtop ... 93#p282903

Gruß
Rainer
Alle meine Hinweise sind auf eigene Gefahr umzusetzen. Immer einen Fachmann zu Rate ziehen!

alchy
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

Beitrag von alchy » 10.05.2016, 21:04

Robert.F hat geschrieben:Hallo,funktioniert das nur in Deutschland oder kann man man es auf Österreich erweitern?

Mit freundlichen Grüßen
Robert
Tankerkönig und benzinpreis-aktuell bieten meines Wissens keine keine Daten von Österreich an
Aber es gibt sicher auch einen Service für die Östereicher.


Robert.F hat geschrieben: kann es sein das das Script nicht mehr funktioniert?
Bekomme seid ein paar Tagen keine Daten mehr angezeigt.
API Key etc alles überprüft.
Naja, irgendwie herrscht hier in Sachen Benzinpreise ein kleines durcheinander
und daran trage ich auch eine Mitschuld.
Die hier und anderweitig veröffentlicheten Scripte werden augenscheinlich nicht mehr gepflegt.
Also habe ich für Benzinpreis-aktuell und Tankerkönig angepasste Scripte gepostet.
Rainer hat ja einen Link dazu gepostet.
Da ich die Threads nicht eröffnet habe, kann ich auch schlecht das Script auf der ersten Seite immer
wieder aktuell halten.

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.

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“