Benzinpreis Adapter

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

Moderator: Co-Administratoren

joe.oster
Beiträge: 288
Registriert: 17.06.2013, 12:15
Wohnort: NRW
Danksagung erhalten: 2 Mal

Re: Benzinpreis Adapter

Beitrag von joe.oster » 03.03.2015, 20:13

dann werde ich auch mal das Skript testen :shock:

Joe

MarioP
Beiträge: 81
Registriert: 12.12.2014, 22:29

Re: Benzinpreis Adapter

Beitrag von MarioP » 03.03.2015, 20:38

1. CUxD installieren
2. CUxD öffenen (Bild 1)
3. Virtuelles Gerät anlegen (Bild 2)
4. Posteingang auf CCU prüfen,
5. Gerät hinzufügen,
6. Gerät erst einstellen!!! Einen Chanel! Gerätekennung notieren (Bild 3)
7. In dem Script in den Zeilen 6 bis 8 die Gerätekennung anpassen

Code: Alles auswählen

        !hier ist die Abfrage mit CUxD
        dom.GetObject("CUxD.CUX2801005:1.CMD_SETS").State("wget -q -O - '"#url#"'");
        dom.GetObject("CUxD.CUX2801005:1.CMD_QUERY_RET").State(1);
        string sprit_xml = dom.GetObject("CUxD.CUX2801005:1.CMD_RETS").State();
8. Zeilen aus dem Script löschen

Code: Alles auswählen

!---------------------------------------------------------------------------------------------------------------------------

        object o = dom.GetObject('Preis_Super_Benzin');
        var x = o.State(sprit_1_wert);
        dom.GetObject("CUxD.CUX2801004:1.LOGIT").State(o.Name()#";"#o.Value());

        object o = dom.GetObject('Preis_Super_E10');
        var x = o.State(sprit_2_wert);
        dom.GetObject("CUxD.CUX2801004:1.LOGIT").State(o.Name()#";"#o.Value());

        object o = dom.GetObject('Preis_Diesel');
        var x = o.State(sprit_3_wert);
        dom.GetObject("CUxD.CUX2801004:1.LOGIT").State(o.Name()#";"#o.Value());


        ! LOGIT=CUX2801004:1 Preis_Super_Benzin --> in CUxD eintragen
        ! LOGIT=CUX2801004:1 Preis_Super_E10 --> in CUxD eintragen
        ! LOGIT=CUX2801004:1 Preis_Diesel --> in CUxD eintragen
9. Variablen für Zahl auf CCU anlegen (Bild 4)
10. Script in Programm einbetten

Probiert mal.
Wenn du noch Probleme hast, ginge Kommunikation auch schneller per Whatsapp.
Nummer dann aber per Mail, nicht hier :)

Mario.
Mario

MarioP
Beiträge: 81
Registriert: 12.12.2014, 22:29

Re: Benzinpreis Adapter

Beitrag von MarioP » 03.03.2015, 20:41

Die Bilder:
Dateianhänge
Screenshot_2015-03-03-20-34-35.png
4
Screenshot_2015-03-03-20-24-51.png
3
Screenshot_2015-03-03-20-13-23.png
2
Screenshot_2015-03-03-20-11-16.png
1
Mario

markuswil
Beiträge: 217
Registriert: 24.02.2014, 13:24
Wohnort: Frechen bei Köln

Re: Benzinpreis Adapter

Beitrag von markuswil » 03.03.2015, 21:15

Vielen Dank, funktioniert.

LG Markus

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

Re: Benzinpreis Adapter

Beitrag von Sprite01 » 05.03.2015, 17:55

8. Zeilen aus dem Script löschen
Wenn die Zeilen unterhalb des Striches alle gelöscht sind, wo/wie werden dann die (Zahlen)Variablen befüllt ?
Gruß
Dirk

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

markuswil
Beiträge: 217
Registriert: 24.02.2014, 13:24
Wohnort: Frechen bei Köln

Re: Benzinpreis Adapter

Beitrag von markuswil » 05.03.2015, 18:38

Ich möchte mich hier nochmal ganz herzlich für dieses tolle Script bedanken. Es funktioniert perfekt. Ich habe es mit Pushover kombiniert und logen die Dieselpreise in Highchart.

Super.

Vielen Dank.

LG
Markus

markuswil
Beiträge: 217
Registriert: 24.02.2014, 13:24
Wohnort: Frechen bei Köln

Re: Benzinpreis Adapter

Beitrag von markuswil » 05.03.2015, 18:40

Wenn du die Zeilen löschst must Du die Werte zusätzlich in die Sysvar schreiben:

dom.GetObject("Preis_Diesel").State(sprit_3_wert);
dom.GetObject("Preis_Super_Benzin").State(sprit_1_wert);
dom.GetObject("Preis_Super_E10").State(sprit_2_wert);


LG
Markus

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

Re: Benzinpreis Adapter

Beitrag von Sprite01 » 05.03.2015, 19:21

Bei mir funktioniert es nicht.
Ich habe mir jetzt das zweite mal damit die CCU2 abgeschossen.
Die 4 Variablen habe ich angelegt.
Das System.Exec Gerät CUxD.CUX2801002 ist in der CCU2 vorhanden.
(CUxD.CUX2801001 nutze ich bereits für andere Exec-Aufgaben)

Wenn ich dann aber ein Programm mit dem Script erstelle und auf Testen gehe steht "keine Fehler",
aber die CCU2 hat sich aufgehangen. Im "Dann"-Zweig habe ich auf einmal ein rotes Kreuz statt dem Script und das war es.
Nach dem Neustart sind die Variablen und das Programm weg.

Könnte mal jemand mit Wissen nach Fehlern in meinem Script schauen ?
Dateianhänge
benzinpreis-aktuell.txt
(2.42 KiB) 134-mal heruntergeladen
Gruß
Dirk

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

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

Re: Benzinpreis Adapter

Beitrag von alchy » 05.03.2015, 20:30

Das Script (in deinem Anhang) als solches ist in Ordnung und funktioniert.
ich vermute ein Wirrwarr im CUXD Exec Gerät.

Du solltest erstmal unter Script testen oder dem Executer ausprobieren.
Die Variablenschreiberei kann auch noch Probleme machen, also ist sie hier raus:

Code: Alles auswählen

!Stand 24.12.2014
            var url = "http://www.benzinpreis-aktuell.de/widget/4549w";
            !hier ist die Abfrage mit CUxD
            dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
            dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
            string sprit_xml = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();

            var pos = sprit_xml.Find('class="pa"');
            var len = sprit_xml.Length();
            string sprit_xml_n = sprit_xml.Substr(pos + 11, (len - pos - 11));
            string sprit_xml = sprit_xml_n;
            var pos = sprit_xml_n.Find('/div');
            string sprit_1 = sprit_xml_n.Substr(0, pos);
            var len = sprit_1.Length();
            string sprit_1_wert = sprit_1.Substr(0,5);
            string sprit_1_name = sprit_1.Substr(13, (len - 15));

            var pos = sprit_xml.Find('class="pa"');
            var len = sprit_xml.Length();
            string sprit_xml_n = sprit_xml.Substr(pos + 11, (len - pos - 11));
            string sprit_xml = sprit_xml_n;
            var pos = sprit_xml_n.Find('/div');
            string sprit_2 = sprit_xml_n.Substr(0, pos);
            var len = sprit_2.Length();
            string sprit_2_wert = sprit_2.Substr(0,5);
            string sprit_2_name = sprit_2.Substr(13, (len - 15));

            var pos = sprit_xml.Find('class="pa"');
            var len = sprit_xml.Length();
            string sprit_xml_n = sprit_xml.Substr(pos + 11, (len - pos - 11));
            string sprit_xml = sprit_xml_n;
            var pos = sprit_xml_n.Find('/div');
            string sprit_3 = sprit_xml_n.Substr(0, pos);
            var len = sprit_3.Length();
            string sprit_3_wert = sprit_3.Substr(0,5);
            string sprit_3_name = sprit_3.Substr(13, (len - 15));

            WriteLine(sprit_1_name);
            WriteLine(sprit_1_wert);

            WriteLine(sprit_2_name);
            WriteLine(sprit_2_wert);

            WriteLine(sprit_3_name);
            WriteLine(sprit_3_wert);

Das ist soweit gekürzt, das es funktionieren muss. Als Ausgabe erhälts du dann

Code: Alles auswählen

Super Benzin
1.349
Super E10
1.329
Diesel
1.149
Sollte das nicht funktionieren kannst Du die CUXD Nummer ändern. Wenn Du einen anderen Kanal des Gerätes benützen willst wird die Nummer hinter dem : anders.
Aus CUxD.CUX2801001:1 wird dann CUxD.CUX2801001:2
Hast Du wirklich 2 exec Geräte angelegt?

Alchy

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.

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

Re: Benzinpreis Adapter

Beitrag von Sprite01 » 05.03.2015, 20:38

Danke, alchy.

Im Executer steht dann:

Code: Alles auswählen

{
  "sessionId": "",
  "sprit_1": "1.349 \/span \nSuper Benzin",
  "sprit_2_name": "Super E10",
  "STDOUT": "Super Benzin\r\n1.349\r\nSuper E10\r\n1.329\r\nDiesel\r\n1.149\r\n",
  "url": "http:\/\/www.benzinpreis-aktuell.de\/widget\/4549w",
  "sprit_2": "1.329 \/span \nSuper E10",
  "sprit_3": "1.149 \/span \nDiesel",
  "sprit_2_wert": "1.329",
  "len": "21",
  "sprit_xml": "1.149 \/span \nDiesel\n \/div \n\n div id=\"disclaim\" \nAlle Angaben ohne Gewähr. Es gelten ausschließlich die Preise an den Zapfsäulen der Tankstelle.\n \/div \n\n div id=\"copy\" \n img src=\"icon.png\" alt=\"Benzinpreis-Aktuell.de\" class=\"icony\" \/ \n&copy; 2015 br\/ www.benzinpreis-aktuell.de\n \/div \n\n\n \/div \n \/a \n \/body \n \/html",
  "pos": "21",
  "sprit_1_name": "Super Benzin",
  "sprit_1_wert": "1.349",
  "sprit_3_name": "Diesel",
  "sprit_3_wert": "1.149",
  "httpUserAgent": "",
  "sprit_xml_n": "1.149 \/span \nDiesel\n \/div \n\n div id=\"disclaim\" \nAlle Angaben ohne Gewähr. Es gelten ausschließlich die Preise an den Zapfsäulen der Tankstelle.\n \/div \n\n div id=\"copy\" \n img src=\"icon.png\" alt=\"Benzinpreis-Aktuell.de\" class=\"icony\" \/ \n&copy; 2015 br\/ www.benzinpreis-aktuell.de\n \/div \n\n\n \/div \n \/a \n \/body \n \/html"
}
Ich habe 2 exec-Geräte angelegt zur Zeit. Werde es dann aber noch mal mit dem ersten CUxD.CUX2801001:2 testen (die :1 wird verwendet).
Wäre sowieso bald einer meiner nächsten Fragen gewesen, mehrere system.exec-Geräte oder mehrere Kanäle mit einem Gerät ?

Ich dachte erst es hängt mit der Variable Benzinpreis_Aktualisierung zusammen, wie die befüllt wird habe ich auch noch nicht raus.
Gruß
Dirk

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

Antworten

Zurück zu „CCU.IO“