WebUIs (DashUI, yahui, ...), Adapter (Hue, IRTrans, Sonos, ...), Logging, Scripting
Moderator: Co-Administratoren
-
alchy
- Beiträge: 10758
- Registriert: 24.02.2011, 01:34
- System: CCU
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 674 Mal
Beitrag
von alchy » 18.06.2017, 22:10
Sollte noch funktionieren.
Code: Alles auswählen
! Tankerkönig angepasst (c) by Alchy v. gestrippte Version !
! Namensvergabe selber möglich, Fehlerdebugg hinzugefügt
var apikey = "+++++++++++++"; !Ihr API-Key
var tankids = "51d4b44e-a095-1aa0-e100-80009459e03a,1d20272c-13a5-4f52-95d9-a1c213403561" ; ! Alle gewünschten Tankstellen komma separiert. Auch nur eine geht natürlich !
var tankname = "Tankstelle_JET_diesel,Tankstelle_HEMER_diesel"; ! Namen der Variablen, wo Dieselpreis gespeichert soll
! URL der tankerkoenig.de API
string tankerKoenigURL = "https://creativecommons.tankerkoenig.de/json/detail.php";
string slist = "";
string srueck = "FEHLER";
! Nun über alle ausgesuchten Tankstellen iterieren.
string tankid;
integer count = 0;
foreach(tankid, tankids.Split(",")) {
count = count + 1;
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
if (dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_SETS")){
dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var srueck = dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_RETS").State();
}else{WriteLine("FEHLER Datenpunkt");}
! Name
var name = tankname.StrValueByIndex(",",count-1);
! offen
var posValueStart = ",\"isOpen\":";
var posValueEnd = ",";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var open = srueck.Substr(posValue, 10).StrValueByIndex(posValueEnd, 0);
if (open == "true" ) { open = true; }else{ open = false;}
var diesel ="-zu-";
if (open){
! Preis Diesel
var posValueStart = ",\"diesel\":";
var posValueEnd = ",";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var diesel = srueck.Substr(posValue, 10).StrValueByIndex(posValueEnd, 0);
integer error = diesel.Find("error"); if (error> -1) { diesel = "Fehler";}
}
if (dom.GetObject(ID_SYSTEM_VARIABLES).Get(name)){dom.GetObject(ID_SYSTEM_VARIABLES).Get(name).State(diesel);}else{ WriteLine(diesel#" konnte nicht gespeichert werden, da Variable fehlt");}
}
Wie lautet die Ausgabe unter Script testen, oder noch besser die JSON Ausgabe des Script Executers?
Alchy
-
k-face
- Beiträge: 7
- Registriert: 15.06.2017, 15:11
Beitrag
von k-face » 19.06.2017, 10:19
hier mal die Meldung
Code: Alles auswählen
Error 1 at row 38 col 14 near ^Â = diesel.Find("error"); if (error> -1) { diesel = "Fehler";}
}
if (dom.GetObje
Error 1 at row 38 col 14 near ^Â = diesel.Find("error"); if (error> -1) { diesel = "Fehler";}
}
if (dom.GetObje
Error 1 at row 38 col 14 near ^Â = diesel.Find("error"); if (error> -1) { diesel = "Fehler";}
}
if (dom.GetObje
Parse following code failed:
! Tankerkönig angepasst (c) by Alchy v. gestrippte Version !
! Namensvergabe selber möglich, Fehlerdebugg hinzugefügt
var apikey = "*********************"; !Ihr API-Key
var tankids = "51d4b44e-a095-1aa0-e100-80009459e03a,1d20272c-13a5-4f52-95d9-a1c213403561" ; ! Alle gewünschten Tankstellen komma separiert. Auch nur eine geht natürlich !
var tankname = "Tankstelle_JET_diesel,Tankstelle_HEMER_diesel"; ! Namen der Variablen, wo Dieselpreis gespeichert soll
! URL der tankerkoenig.de API
string tankerKoenigURL = "https://creativecommons.tankerkoenig.de/json/detail.php";
string slist = "";
string srueck = "FEHLER";
! Nun über alle ausgesuchten Tankstellen iterieren.
string tankid;
integer count = 0;
foreach(tankid, tankids.Split(",")) {
count = count + 1;
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
if (dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_SETS")){
dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var srueck = dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_RETS").State();
}else{WriteLine("FEHLER Datenpunkt");}
! Name
var name = tankname.StrValueByIndex(",",count-1);
! offen
var posValueStart = ",\"isOpen\":";
var posValueEnd = ",";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var open = srueck.Substr(posValue, 10).StrValueByIndex(posValueEnd, 0);
if (open == "true" ) { open = true; }else{ open = false;}
var diesel ="-zu-";
if (open){
! Preis Diesel
var posValueStart = ",\"diesel\":";
var posValueEnd = ",";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var diesel = srueck.Substr(posValue, 10).StrValueByIndex(posValueEnd, 0);
integer error = diesel.Find("error"); if (error> -1) { diesel = "Fehler";}
}
if (dom.GetObject(ID_SYSTEM_VARIABLES).Get(name)){dom.GetObject(ID_SYSTEM_VARIABLES).Get(name).State(diesel);}
}
-
alchy
- Beiträge: 10758
- Registriert: 24.02.2011, 01:34
- System: CCU
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 674 Mal
Beitrag
von alchy » 19.06.2017, 20:39
Bitte keine Umwege über einen Editor - Script direkt aus dem Forum in das Fenster kopieren und dort nur den API Key ändern.
Und/oder anderen Browser verwenden.
Alchy
-
k-face
- Beiträge: 7
- Registriert: 15.06.2017, 15:11
Beitrag
von k-face » 20.06.2017, 11:21
Ahh perfekt, das geht jetzt soweit. danke sehr
-
k-face
- Beiträge: 7
- Registriert: 15.06.2017, 15:11
Beitrag
von k-face » 20.06.2017, 19:57
wie würde denn das Skript aussehen, wenn ich nur die e5 preise mir anzeigen lassen will?
-
alchy
- Beiträge: 10758
- Registriert: 24.02.2011, 01:34
- System: CCU
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 674 Mal
Beitrag
von alchy » 20.06.2017, 20:15
Ein Seite zurück das originale Script nehmen und auch mal ein wenig lesen.
Oder irgendwo im Thread.
Alchy
-
mike9677
- Beiträge: 422
- Registriert: 17.04.2011, 11:08
Beitrag
von mike9677 » 28.06.2017, 08:38
alchy hat geschrieben:Sollte noch funktionieren.
Kann es sein, dass hier ein Fehler ist ?
Gruß
mike
-
alchy
- Beiträge: 10758
- Registriert: 24.02.2011, 01:34
- System: CCU
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 674 Mal
Beitrag
von alchy » 28.06.2017, 18:38
Ja, das ist so falsch. Da gehört der gleiche Kanal hin.
Sorry, mein Fehler. Ich habe das nicht getestet, da ich keine ID habe.
Hab es korrigiert. Aber der obige Fehler kommt nicht daher.
Alchy
-
mike9677
- Beiträge: 422
- Registriert: 17.04.2011, 11:08
Beitrag
von mike9677 » 29.06.2017, 07:25
alchy hat geschrieben:Aber der obige Fehler kommt nicht daher.
Richtig. War ein Variablen-Problem. Läuft jetzt!
Danke
mike
-
waller
- Beiträge: 17
- Registriert: 11.02.2017, 11:06
- Wohnort: Freital
- Danksagung erhalten: 2 Mal
Beitrag
von waller » 27.07.2018, 18:51
Hallo Alchy
Es hat sich scheinbar lange keiner mit dem Thema befasst. Oder alle sich zufrieden. Mal sehen ob noch jemand etwas dazu sagt. Kann man In de Systemvariablen vom Typ Zeichenkette jede angezeigte Tankstelle auf einer neunen Zeile anzeigen. Also sprich einen Zeilenumbruch hinter dem Preis erzwingen ? Dabei würden die Preise dann ordentlich untereinander stehen.
Das Skript "Tankerkönig angepasst (c) by Alchy v0.6" vom 19.01.2017 find ich dafür wie geschaffen.
waller
RaspberryMatic mit 90 Geräten