Benzinpreis Adapter

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

Moderator: Co-Administratoren

nimmnenkeks
Beiträge: 453
Registriert: 30.11.2016, 20:24
Hat sich bedankt: 43 Mal
Danksagung erhalten: 19 Mal

Re: Benzinpreis Adapter

Beitrag von nimmnenkeks » 05.01.2017, 17:25

Hallo Rainer,

im Prinzip hast Du ja Recht.
Klar, wäre es wesentlich einfacher, die Einträge würden vernünftig in der json gepflegt.

Dachte nur, es wäre möglich innerhalb der zuständigen Tanke-ID und dem zugehörigen Inhalt den entsprechenden Teil abzufangen.
Es soll ja kein fertiges Universalscript sein.

Man kann ja vielleicht (nur mein Gedankengang) anhand der json und deren Inhalt feststellen, ob die Einträge passend sind, oder nicht und dann anhand von der Scriptsyntax entscheiden, bei welcher ID man den String vor oder hinter dem "|" der "local"-Angabe in die Ausgabe zu bringen.

Ich kann das leider nicht beurteilen, daher meine Frage ob und wie das machbar ist.

BG

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

Re: Benzinpreis Adapter

Beitrag von Homoran » 05.01.2017, 17:53

Screenshot_20170105-175048.jpg
14577 Tankstellen :!:

Wer soll da eine Datenbank erstellen bei welcher der Teil vor dem Pipe und bei welchen der Teil dahinter genommen werden soll?


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

nimmnenkeks
Beiträge: 453
Registriert: 30.11.2016, 20:24
Hat sich bedankt: 43 Mal
Danksagung erhalten: 19 Mal

Re: Benzinpreis Adapter

Beitrag von nimmnenkeks » 05.01.2017, 19:04

Hmmm,
bin verwirrt... warum jetzt 14k+ Tanken?
Nicht dass es hier zu Mis(t)Verständnis kommt :D

Bekommt bei dem Abruf über die API und die XML den Daten aller Tanken
und fragt das Script dann über die Tanke-ID's die Daten für e5/e10/bald abgeschafft/ ab?

Dachte nur, dass man zur abgefragten ID statt "name" auch "brand" ausgeben kann


BG

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

Re: Benzinpreis Adapter

Beitrag von Homoran » 05.01.2017, 19:10

nimmnenkeks hat geschrieben:Bekommt bei dem Abruf über die API und die XML den Daten aller Tanken
Nein, aber das Skript ist ja nicht für dich allein.
nimmnenkeks hat geschrieben:Dachte nur, dass man zur abgefragten ID statt "name" auch "brand" ausgeben kann
Ok, da hab ich mich dann wahrscheinlich vertan, ich dachte vor dem Pipe sei brand, danach name

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

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

Re: Benzinpreis Adapter

Beitrag von alchy » 05.01.2017, 19:33

Homoran hat da aber trotzdem vollkommen Recht.
Um das Script allgemein für jeden so lauffähig wie möglich zu halten, werden darin die Namen aus den Feldern ausgelesen. Werden diese Felder nicht aussagekräftig belegt, oder sie passen dir nicht, müsste man da eher schon zaubern. Für alle Tanken das Feld brand zu benutzen oder für alle name, das ist kein Problem, nur KI mäßig das Auslesen zu bewerten, dazu fehlt mir einfach schon der Antrieb weil ich gar keinen Sinn drin sehe.
Man könnte zwar selber eine Logik für die paar Tankstellennahmen in das Script schreiben, also Bei Tanke 1 lies Feld name aus, bei Tanke 2 lies Feld brand und bei Tanke 3 nimm wieder Feld name für den Namen.

Aber das macht eigentlich gar keinen Sinn. Da kann jeder für seine paar Tanken lieber selber eine ihm passende Namensliste anlegen und diese Namen im Script verwenden.
Hab mal schnell das verlinkte Script umgeschrieben. Leider ohne passende Hardware also blind. Sollte aber gehen.
Es gibt da eine neue Zeile, wo man den Namen zur Tanke selber festlegen kann, direkt unterhalb der IDs.
Das ist schneller und einfacher integriert als irgendeine KI. :mrgreen:

Code: Alles auswählen

! Tankerkönig angepasst (c) by Alchy v0.5
! Namensvergabe selber möglich 
var apikey = "+++++++++++++++++++++++"; !Ihr API-Key
var tankids = "676eb983-e637-40a9-a794-7a360b748e3f,2264a000-d8a4-4793-993c-fbb0b762fb50,51d4b626-a095-1aa0-e100-80009459e03a" ; ! Alle gewünschten Tankstellen komma separiert. Auch nur eine geht natürlich !
var tankname = "Tankpoint-Buer,Markant (Tankautomat),Tankstellenname 3"; ! Eigene Namen der Tanken, in selber Reihenfolge wie die obigen IDs
! URL der tankerkoenig.de API
string tankerKoenigURL = "https://creativecommons.tankerkoenig.de/json/detail.php";
string slist = "";
! 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
    dom.GetObject("CUxD.CUX2801001:3.CMD_SETS").State(cmd);
    dom.GetObject("CUxD.CUX2801001:3.CMD_QUERY_RET").State(1);
    var srueck = dom.GetObject("CUxD.CUX2801001:3.CMD_RETS").State();
! 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 e5 = "-zu-";
var e10 = "-zu-";
var diesel ="-zu-";

if (open){

! Preis e5
    var posValueStart = ",\"e5\":";
    var posValueEnd = ",";
    var posValue = srueck.Find(posValueStart) + posValueStart.Length();
    var e5= srueck.Substr(posValue, 10).StrValueByIndex(posValueEnd, 0);
    integer error  = e5.Find("erro"); if (error> -1) { e5 = "Fehler";}
!Preis e10
    var posValueStart = ",\"e10\":";
    var posValueEnd = ",";
    var posValue = srueck.Find(posValueStart) + posValueStart.Length();
    var e10 = srueck.Substr(posValue, 10).StrValueByIndex(posValueEnd, 0);
    integer error  = e10.Find("erro"); if (error> -1) { e10 = "Fehler";}
! 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("erro"); if (error> -1) { diesel = "Fehler";}
}
 
    slist = slist#name #" - " #diesel#" / " #e10 # " / " #e5 #"\n"; ! Beispielverwendung, alle Daten in eine Variable schreiben

}

    WriteLine(slist); ! Ausgabe auf dem Bildschirm
   ! dom.GetObject("Tanken").State(slist); ! Speichern in Systemvariable die NICHT auf der Startseite der Klickibunti angezeigt werden darf





Und das mit den Zaubern ist da so eine Sache.

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.

nimmnenkeks
Beiträge: 453
Registriert: 30.11.2016, 20:24
Hat sich bedankt: 43 Mal
Danksagung erhalten: 19 Mal

Re: Benzinpreis Adapter

Beitrag von nimmnenkeks » 05.01.2017, 20:15

Servus alchy,

für mal eben blind, macht das Script genau das, was ich vor hatte :D .
Danke!

Somit auch für jeden so umsetzbar!

Jeder geht diese Dinge ja anders an und hat unterschiedliche Ansätze, die auf dem Wissensstand basieren und diesen nutzen.
Heraus kommt dann eine so umgesetzte Lösung, die nicht zur Neuerfindung des Rades führen muss.

Ich pers. dachte bei meiner Frage da an die Möglichkeit eine Auswahl von "name" und "brand" durch Konfigurationszeilen (wie auch bei den abzugreifenden ID's selbst)

GET name "id1, id2" ! ID's durch Komma trennen
GET brand "id2, id4" ! ID's durch Komma trennen

und in der Weiterverabeitung zu nutzen.
Macht aber durch Deine Lösung absolut keinen Sinn, KISS 8)

Bin ja noch blutiger Anfänger in HM und mehr mit t&e unterwegs, wollte da keine neue KI für Tankstellenbezeichner!

Das mit dem Zaubern ist ja immer so eine Sache, obwohl ich da bei Dir nicht sicher bin, ob Du das nicht auf nem ZX81 hinbekommst. :mrgreen:


BG

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

Re: Benzinpreis Adapter

Beitrag von alchy » 05.01.2017, 20:37

nimmnenkeks hat geschrieben: für mal eben blind, macht das Script genau das, was ich vor hatte :D .
Schön, so soll es sein. 8)
nimmnenkeks hat geschrieben: GET name "id1, id2" ! ID's durch Komma trennen
GET brand "id2, id4" ! ID's durch Komma trennen
id2 ist doppelt :mrgreen: - Wenn du vorher selber festlegen musst, ob du brand oder name willst, dann kannst du es gleich so in eine Liste hauen. Hat ja nichts mit KI zu tun.
nimmnenkeks hat geschrieben: ob Du das nicht auf nem ZX81 hinbekommst. :mrgreen:
Der ZX hatte ne Tastatur - damit besser als ein Handy heute - ok. nicht ganz so leistungsfähig, aber eine tastatur. :mrgreen:

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.

nimmnenkeks
Beiträge: 453
Registriert: 30.11.2016, 20:24
Hat sich bedankt: 43 Mal
Danksagung erhalten: 19 Mal

Re: Benzinpreis Adapter

Beitrag von nimmnenkeks » 05.01.2017, 20:48

...wenn es einem nicht die Buxe ausziehen würde, das OS (und meine Augen) nicht etwas älter wäre(n)....
ich hab noch nen Qtek9000

Danke noch einmal an Euch für Input und Lösung!
BTT

BG
Keks

Sunny77
Beiträge: 112
Registriert: 13.08.2014, 17:26
System: CCU
Hat sich bedankt: 2 Mal
Danksagung erhalten: 1 Mal

Re: Benzinpreis Adapter

Beitrag von Sunny77 » 19.01.2017, 01:09

Hallöle,

erstmal Danke auch an Alchy für die Geduld hier in dem Forum, die ist nicht selbstverständlich.
Die letzten Tage habe ich wirklich viel mit lesen und probieren verbracht. Solangsam wird ein Schuh draus, den Zweiten suche ich aber noch ....

Derzeit will aber hier die Geschichte nicht ganz so Anlaufen.
Das Script läuft soweit im Test, jedoch schreibt es keinen Wert in die Variable. Könnt ihr mal drüber schauen wo der Fehler sein könnte?

Code: Alles auswählen

Copy des Scriptes entfernt
Folgende Variablen sind angelegt:

- Tanken (Zeichenkette)
- diesel (Zahl 0-99.999)

Vielen Dank im Voraus

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

Re: Benzinpreis Adapter

Beitrag von alchy » 19.01.2017, 09:10

Sunny77 hat geschrieben: erstmal Danke auch an Alchy für die Geduld hier in dem Forum, die ist nicht selbstverständlich.
Dann entferne nicht die Kopfzeile eines meiner Scripte, damit ich weiß mit welcher Version du arbeitest. :evil:

Du behauptest zwar es läuft, es wird nur nichts in der Variable gespeichert, aber doch zur Sicherheit:
1. Du hast darin u.a. den Namen des CUxD.exec Gerätes angepasst, du hast ein cuxd.exec mit CUX2801002.?
2. möglicher Fehler: dir ist bewußt, das nur in einer VAriable gespeichert wird, wenn du das Ausrufezeichen vor der Zeile entfernst?
! dom.GetObject("Tanken").State(slist); ! Speichern in Systemvariable
3. wenn 1 & 2 klar sind, dann hast du noch ein weiteres Objekt mit dem Namen Tanken
4.>> Fehlerprotokoll << vom Zeitpunkt der Ausführung posten.

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 „CCU.IO“