Seite 13 von 20

Re: Benzinpreis Adapter

Verfasst: 06.05.2016, 18:48
von derhomematicneuling
Hallo Alchy,

vielen Dank für Deine Hilfe.
Leider kann ich Dein Script nicht speichern.
Es wird einfach ignoriert und mein altes Script bleibt stehen.
Auch die Neuanlage eines Programms funktioniert nicht.
Stimmen hier irgendwelche Formatierungen nicht?

Kannst Du mit bitte die Änderung zur alten Version mitteilen?

Bei mir soll nur eine Tanke mit einer Sorte abgefragt werden.
Keine Vergleiche - bringt auf dem Dorf nichts :)


Hier mein altes Script:

Code: Alles auswählen

!-----------------------------------------------------------------------------
! Basisdaten definieren
!-----------------------------------------------------------------------------

var apikey = "xxx"; !API KEY EINTRAGEN
var tankid = "xxx";
!var tankid = "xxx"; 
!-----------------------------------------------------------------------------
! 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:5.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801001:5.CMD_QUERY_RET").State(1);
stdout  = dom.GetObject("CUxD.CUX2801001:5.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 Diesel
posValueStart = "\"diesel\":";
posValueEnd = ",";
posValue = substring.Find(posValueStart) + posValueStart.Length();
preis = substring.Substr(posValue, 6).StrValueByIndex(posValueEnd, 0) ;
dom.GetObject("Preis_Diesel").Variable(preis.ToFloat(3));                     !EIGENE VARIABLE EINTRAGEN
!-----------

Re: Benzinpreis Adapter

Verfasst: 06.05.2016, 20:42
von alchy
Es zu können heisst doch nicht, es zu müssen. Dann trägst du eben nur von einer Tanke den Code ein.
Wenn du das Script nicht speichern kannst, versuch einen anderen Browser oder gibt es Fehler beim Scriptcheck?

Alchy

Re: Benzinpreis Adapter

Verfasst: 06.05.2016, 21:30
von derhomematicneuling
Nein, kein Fehler beim Scriptcheck.
Weder unter Safari noch unter Chrome lässt sich Dein Script speichern.

So etwas hatte ich noch nicht.
Du tippst etwas als Script ein und es wird ignoriert....

Re: Benzinpreis Adapter

Verfasst: 06.05.2016, 21:55
von Sprite01
derhomematicneuling hat geschrieben: Leider kann ich Dein Script nicht speichern.
Es wird einfach ignoriert und mein altes Script bleibt stehen.
Stark, hier genau das Gleiche. Habe ich ja so noch nie erlebt.
Trotz 2 x OK (im Scriptfenster nach Fertigstellung und auch beim Programm speichern steht bei erneutem Aufruf des Programms
dann das alte Script wieder drin.

Re: Benzinpreis Adapter

Verfasst: 06.05.2016, 22:34
von alchy
2x dasselbe, das wird kein Zufall sein. :shock:
Das habe ihnen davon.
Dann wird es am Script liegen. Zu meiner Schande muss ich gestehen, das ich das Script nicht in ein Programm getestet habe.
Ich schaue es mir an.

Alchy

Re: Benzinpreis Adapter

Verfasst: 08.05.2016, 00:18
von alchy
So gerade mal nach Hause gekommen, und mich daran erinnert, das es ja noch Probleme gibt.
Tja, das € Zeichen macht Probleme. Das ist mal ein Fehler, den ich so nicht vermutet hätte. :shock:
Er ist auch nicht mal Script bezogen, aber wundern muss man sich ja nicht großartig.

Also einfach die € Zeichen aus der Zeile slist = .... löschen, und es funktioniert auch, das Script
innerhalb eines Programmes in der Klickibunti zu speichern. EQ3 mag den Euro nicht. :wink:

Code: Alles auswählen

! Tankerkönig angepasst (c) by Alchy 

var apikey = "+++++++++++++++"; !Ihr API-Key
var tankids = "XXXXX-XXXX-XXXX-XXXX,YYYYY-YYYY-YYY-YYYY,ZZZZZ-ZZZZ-ZZZZ-ZZZZZ,"  ; ! 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";
string 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, 10).StrValueByIndex(posValueEnd, 0);
if (off == "true") { var offen = " offen "; } else { var offen = " geschlossen "; }
! Preis e5
var posValueStart = ",\"e5\":";
var posValueEnd = ",";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var e5= srueck.Substr(posValue, 10).StrValueByIndex(posValueEnd, 0);
!Preis e10
var posValueStart = ",\"e10\":";
var posValueEnd = ",";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var e10 = srueck.Substr(posValue, 10).StrValueByIndex(posValueEnd, 0);
! Preis Diesel
var posValueStart = ",\"diesel\":";
var posValueEnd = ",";
var posValue = srueck.Find(posValueStart) + posValueStart.Length();
var diesel = srueck.Substr(posValue, 10).StrValueByIndex(posValueEnd, 0);
slist = slist #name #" hat "#offen #" E5 kostet "#e5 #"EUR - E10 kostet "#e10 #"EUR - DIESEL kostet "#diesel # "EUR\n"; ! Beispielverwendung, alle Daten in eine Variable schreiben
}
WriteLine(slist); ! Ausgabe auf dem Bildschirm
! dom.GetObject("Speichervariable_String").State(slist); ! Speichern in Systemvariable 

Dabei ist mir dann gleich mal aufgefallen, das der € auch z.B. ignoriert wird,
wenn ich eine Systemvariable vom Typ Zahl definiere und als Maßeinheit € verwenden will.
Nicht so abwägig, wie ich meine. Man könnte es zufällig mal so einstellen wollen. :twisted:
Bei den Geräten (z.B. bei der Anzeige der verbrauchten Energie bei den Meßdosen) wird auch feißig EUR statt € verwendet. Ein Schelm der Böses dabei denkt.
Was einem dann immer gleich mal auffällt, wenn man erstmal am Suchen ist. :mrgreen:

Alchy
Sorry, daran habe ich nicht gedacht, ich wollte ja nur nur helfen. :cry:

Re: Benzinpreis Adapter

Verfasst: 08.05.2016, 10:55
von derhomematicneuling
Hallo Alchy,

vielen Dank, nun funktioniert die Abfrage wieder.

Benzinpreis Adapter

Verfasst: 09.05.2016, 16:31
von Stoni
Hi,

wollte Dein Script auch nutzen, aber der Wert bleibt bei 0,00 Euro.
Ich habe meine API und die TankID angepasst, statt "Systemvariablen_String" am Ende habe ich den Namen der Variablen "Tanken" eingetragen.
Wo könnte jetzt der Fehler sein?

Das Script funktioniert im Test, ich versteh nur nicht, wie ich den Wert von E5 in die Variable bekomme. Ich habe wohl etwas ausgelassen, bzw noch nicht vollständig angepasst...

Code: Alles auswählen

Copy des Scriptes entfernt
Gruß Stoni

Re: Benzinpreis Adapter

Verfasst: 09.05.2016, 17:01
von derhomematicneuling
Du musst den Wert mit der letzten Zeile in die Variable schreiben!
Da steht noch ein Ausrufungszeichen, das musst du löschen!

Re: Benzinpreis Adapter

Verfasst: 09.05.2016, 17:42
von Stoni
Irgendwie seh ich den Wald vor lauter Bäumen nicht mehr.

Da ich nur den Wert von E5 in der Variablen haben möchte, muss ich doch die letzte Zeile mit dom.GetObject anpassen oder nicht? Statt State.(slist) müsste doch sowas wie State.("#e5) stehen oder nicht? Woher soll das Script sonst wissen, welcher Wert in die Variable geschrieben werden soll...


Gruß Stoni