Benzinpreis Adapter

WebUIs (DashUI, yahui, ...), Adapter (Hue, IRTrans, Sonos, ...), Logging, Scripting

Moderator: Co-Administratoren

derhomematicneuling
Beiträge: 146
Registriert: 18.10.2013, 20:40

Re: Benzinpreis Adapter

Beitrag von derhomematicneuling » 06.05.2016, 18:48

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
!-----------
Zuletzt geändert von alchy am 06.05.2016, 20:31, insgesamt 1-mal geändert.
Grund: Code bitte in Codetags posten

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Benzinpreis Adapter

Beitrag von alchy » 06.05.2016, 20:42

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

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.

derhomematicneuling
Beiträge: 146
Registriert: 18.10.2013, 20:40

Re: Benzinpreis Adapter

Beitrag von derhomematicneuling » 06.05.2016, 21:30

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....

Benutzeravatar
Sprite01
Beiträge: 488
Registriert: 16.10.2011, 10:11
Wohnort: Dessau
Kontaktdaten:

Re: Benzinpreis Adapter

Beitrag von Sprite01 » 06.05.2016, 21:55

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.
Gruß
Dirk

HomeMatic CCU2 mit CUxD, XML-API und Email-Addon, Visualisierung mittels ioBroker auf Android 22"-Wandtablet
http://www.DessauWetter.de

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Benzinpreis Adapter

Beitrag von alchy » 06.05.2016, 22:34

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

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.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Benzinpreis Adapter

Beitrag von alchy » 08.05.2016, 00:18

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:

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.

derhomematicneuling
Beiträge: 146
Registriert: 18.10.2013, 20:40

Re: Benzinpreis Adapter

Beitrag von derhomematicneuling » 08.05.2016, 10:55

Hallo Alchy,

vielen Dank, nun funktioniert die Abfrage wieder.

Stoni
Beiträge: 560
Registriert: 05.12.2013, 13:38
Danksagung erhalten: 1 Mal

Benzinpreis Adapter

Beitrag von Stoni » 09.05.2016, 16:31

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
Zuletzt geändert von alchy am 28.01.2017, 21:49, insgesamt 2-mal geändert.
Grund: sinnloses Fullquote entfernt

derhomematicneuling
Beiträge: 146
Registriert: 18.10.2013, 20:40

Re: Benzinpreis Adapter

Beitrag von derhomematicneuling » 09.05.2016, 17:01

Du musst den Wert mit der letzten Zeile in die Variable schreiben!
Da steht noch ein Ausrufungszeichen, das musst du löschen!

Stoni
Beiträge: 560
Registriert: 05.12.2013, 13:38
Danksagung erhalten: 1 Mal

Re: Benzinpreis Adapter

Beitrag von Stoni » 09.05.2016, 17:42

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

Antworten

Zurück zu „CCU.IO“