Awattar

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

tobi.wanka
Beiträge: 9
Registriert: 21. Sep 2019 22:02

Awattar

Beitrag von tobi.wanka »

Hallo allerseits,

der Stromanbieter Awattar reicht den Börsenstrompreis an Privatkunden weiter. Der Strompreis ändert sich also jede Stunde.
Ich würde jetzt gerne mit meinem OpenhabII mit diesen Preise einige Geräte steuern, vor allem meine Wallbox, und eine Grafik/Tabelle aus den Daten machen, damit ich weiss, wann ich mein Auto günstig laden kann.
Und genau hier bräuchte ich eure Hilfe.

Die Daten kommen als API:
https://api.awattar.de/v1/marketdata
{
"object": "list",
"data": [
{
"start_timestamp": 1569088800000,
"end_timestamp": 1569092400000,
"marketprice": 46.32,
"unit": "Eur/MWh"
},
{
"start_timestamp": 1569092400000,
"end_timestamp": 1569096000000,
"marketprice": 34.93,
"unit": "Eur/MWh"
},


Also hab ich das HTTP-Binding installiert.
http.cfg:

# configuration of the first cache item
awattar.url=https://api.awattar.de/v1/marketdata
awattar.updateInterval=3000000

und eine Item Datei angelegt:
awattar.item:
// awattar
Group Awattar "Strompreise " <Awattar>

String Preis1 "Preis1 [%s €/MWH]" {http="<[awattar:3000000:JSONPATH($.data[0].marketprice)]"}
String Preis2 "Preis2 [%s €/MWH]" {http="<[awattar:30000000:JSONPATH($.data[1].marketprice)]"}
String Preis3 "Preis3 [%s €/MWH]" {http="<[awattar:3000000:JSONPATH($.data[2].marketprice)]"}

DateTime Zeit1 <time> {http="<[awattar:30000:JSONPATH($.data[0].start_timestamp)]"}
String Zeit2 "Zeit2 [%s]" {http="<[awattar:30000:JSONPATH($.data[1].start_timestamp)]"}
DateTime Zeit3 "Zeit3" {http="<[awattar:30000:JSONPATH($.data[2].start_timestamp)]"}

Und hier hänge ich.
Die Preise kann ich mir anzeigen lassen, aber sind als STRING sicherlich nicht optimal?
Das Datum bekomme ich zwar als String, aber damit kann ich nichts weiter anfangen?

Ich hab auch eine XML-Datei gefunden, weiss aber nichts damit anzufangen.
https://www.loxwiki.eu/display/LOX/Anbi ... hourly+API

Wie müsste mein Zeit Item sinnvollerweise aussehen?
Und wie kann ich die Daten im meinen HABPANEL einbauen, vielleicht sogar als Grafik?

Vielen Dank euch allen.
Grüße
Tobi

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Awattar

Beitrag von udo1toni »

Warum nimmst Du überhaupt String als Item? Du kannst doch genauso auch Number als Item verwenden.

Was den Zeitstempel betrifft, so handelt es sich um die Anzahl Millisekunden seit dem 1.1.1970, also UNIX Zeitstempel.
Ich wäre eigentlich davon ausgegangen, dass openHAB mit DateTime das direkt verarbeitet, hat bei mir aber auch nicht funktioniert, deswegen der umständliche Weg:
Items:

Code: Alles auswählen

// awattar
Group Awattar "Strompreise " <Awattar>
Group AwattarZeitIn
Group AwattarZeitOut

Number Awattar_Preis1 "Preis1 [%.2f €/MWh]" (Awattar) {http="<[awattar:60000:JSONPATH($.data[0].marketprice)]"}
Number Awattar_Preis2 "Preis2 [%.2f €/MWh]" (Awattar) {http="<[awattar:60000:JSONPATH($.data[1].marketprice)]"}
Number Awattar_Preis3 "Preis3 [%.2f €/MWh]" (Awattar) {http="<[awattar:60000:JSONPATH($.data[2].marketprice)]"}

Number AwattarIn_Zeit1 "Zeit1" <time> (AwattarZeitIn) {http="<[awattar:30000:JSONPATH($.data[0].start_timestamp)]"}
Number AwattarIn_Zeit2 "Zeit2" <time> (AwattarZeitIn) {http="<[awattar:30000:JSONPATH($.data[1].start_timestamp)]"}
Number AwattarIn_Zeit3 "Zeit3" <time> (AwattarZeitIn) {http="<[awattar:30000:JSONPATH($.data[2].start_timestamp)]"}

DateTime Awattar_Zeit1 "Zeit1 [%1$tA, %1$td.%1$tm.%1$tY %1$tH:%1$tM]" <time> (AwattarZeitOut)
DateTime Awattar_Zeit2 "Zeit2 [%1$tA, %1$td.%1$tm.%1$tY %1$tH:%1$tM]" <time> (AwattarZeitOut)
DateTime Awattar_Zeit3 "Zeit3 [%1$tA, %1$td.%1$tm.%1$tY %1$tH:%1$tM]" <time> (AwattarZeitOut)
Und eine Rule:

Code: Alles auswählen

rule "Zeit rechnen"
when 
    Member of AwattarZeitIn changed 
then
    if(triggeringItem.state instanceof Number) {
        AwattarZeitOut.members.filter[m |
            m.name.contains(triggeringItem.name.split("_").get(1))
        ].head.postUpdate((new DateTime((triggeringItem.state as Number).longValue)).toString)
    }
end
Wenn Du die Rule zuerst einfügst, sollte sie beim Anlegen der Items sofort triggern. Ansonsten musst Du die ankommenden Zeit-Items einmal auskommentieren und wieder einkommentieren, damit die eigentlichen Items korrekt gesetzt werden (oder halt bis zur nächsten Stunde warten)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

tobi.wanka
Beiträge: 9
Registriert: 21. Sep 2019 22:02

Re: Awattar

Beitrag von tobi.wanka »

Hi,

super vielen Dank. Hat perfekt geklappt

Mal sehen ob ich aus den Items eine Grafik bekomme. Mit "rrd4j" hab ich's schon probiert, ohne Erfolg.
Ich möchte auch noch ein Item mit dem aktuellen Tarif ausrechnen.

Grüße
Tobias

KlausGünther
Beiträge: 143
Registriert: 16. Jul 2018 08:57
Wohnort: Werl
Kontaktdaten:

Re: Awattar

Beitrag von KlausGünther »

Wäre da Grafana in Verbindung mit der InfluxDB nicht eine gute Lösung ?

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Awattar

Beitrag von udo1toni »

Mit rrd4j klappt das ebenso gut, aber man muss unbedingt everyMinute als Strategy setzen, sonst kann der Graph nicht korrekt gezeichnet werden.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

tobi.wanka
Beiträge: 9
Registriert: 21. Sep 2019 22:02

Re: Awattar

Beitrag von tobi.wanka »

Ab 01.10. wechsle ich zu Awattar und mein Stromzähler wird erst kurz danach gewechselt. Das Geschäftsmodell halte ich aber für sehr sinnvoll für unsere Energiewende. Der Wechselprozess hat bisher sehr gut geklappt. Aber ich habe meinen smarten Stromzähler noch nicht.

Vielleicht bekomme ich die grafische Darstellung doch noch hin:

Meine awattar.persist sieh so aus:

Code: Alles auswählen

Strategies {
    everyMinute : "0 * * * * ?"
    everyHour : "0 0 * * * ?"
    everyDay : "0 0 0 * * ?"
    default = everyChange
}

Items
    {

Awattar_Preis1 : strategy = everyMinute

    }
Es kommt aber nichts in den Grafiken an:

Bild

Aber ich denke dass ist sowieso der falsch Ansatz:
Ich möchte in einer Grafik nacheinander die Items Awattar_Preis1 bis Awattar_Preis24 anzeigen.
Ab jetzt hab ich keine Ideen mehr.
Vielen Dank fürs helfen
Grüße
Tobi
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Awattar

Beitrag von udo1toni »

tobi.wanka hat geschrieben: 27. Sep 2019 21:38 Meine awattar.persist sieh so aus:
Da ist der Fehler. Wenn Du Dir die Datei anschaust, wirst Du feststellen, dass innerhalb der Datei kein Bezug zur verwendeten Persistenz besteht. Somit muss dieser Zusammenhang über den Dateinamen bestehen. Daraus ergibt sich, dass der Dateiname nicht beliebig ist.

Wenn Du rrd4j verwenden willst, musst Du eine Datei rrd4j.persist anlegen, in der neben den anzuwendenden Strategien auch die Items aufgelistet sind.
Auf diese Weise kann das selbe Item über unterschiedliche Persistence Services unterschiedlich persistiert werden, z.B. minütlich durch rrd4j, aber nur bei Wertänderung in jdbc (welches dann z.B. in einer MySQL Datenbank landet).

Da der Preis sich nicht ständig ändert, ist es in diesem Fall tatsächlich ausreichend, die Strategie everyMinute zu verwenden. Bei Messwerten z.B. von Thermometern im/am Haus, die vielleicht häufiger ein Update schicken, sollte man zusätzlich noch everyChange oder everyUpdate als Strategie wählen.
Aber ich denke dass ist sowieso der falsch Ansatz:
Ich möchte in einer Grafik nacheinander die Items Awattar_Preis1 bis Awattar_Preis24 anzeigen.
Ja, das wird so nicht gehen. Preis24 sollte allerdings im Idealfall exakt Preis1 entsprechen, mit einem Versatz von 23 Stunden. Du könntest also einen Graphen anzeigen lassen, der nur Preis24 darstellt. Ansonsten müsstest Du auf externe Software zurückgreifen, openHAB kann keine Tabellen (möglicherweise gar grafisch aufbereitet) darstellen.

Grafana bietet hier mehr, ob das allerdings ausreicht, kann ich nicht auf Anhieb sagen, ich habe solche Prognoseanzeigen noch nicht realisiert. Die grafische Ausgabe von Grafana lässt sich über das Webview Widget in die UI einbetten. Es gibt zu diesem Themenkomplex im englischen Forum eine hervorragende Anleitung. https://community.openhab.org/t/influxd ... hing/13761
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

jb79
Beiträge: 7
Registriert: 29. Sep 2019 15:29

Re: Awattar

Beitrag von jb79 »

Hallo!

@tobi.wanka: Würde mich da gerne anhängen: Habe Awattar, allerdings noch keinen Smartmeter, mich würde aber eine Anleitung interessieren. Was muß alles eingestellt werden, um die stündlichen Preise zu bekommen und dann abhängig vom Preis Aktionen auszuführen, z.B. einen bestimmten Verbraucher einzuschalten.
lg Jürgen

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Awattar

Beitrag von udo1toni »

jb79 hat geschrieben: 29. Sep 2019 16:00 Was muß alles eingestellt werden, um die stündlichen Preise zu bekommen und dann abhängig vom Preis Aktionen auszuführen, z.B. einen bestimmten Verbraucher einzuschalten.
Siehe Posting Nr. 2. und das vor Deiner Anfrage. Wenn Du erst mal die Prognosedaten in openHAB hast, kannst Du darauf reagieren. Vermutlich musst Du die Geräte abhängig vom aktuellen Preis einschalten, bei längerer Betriebszeit evtl. noch abhängig vom Preis der nächsten Stunde(n). Z.B. so:

Code: Alles auswählen

// Globale Variablen werden zu Beginn der Datei definiert. Ebenso Konstanten.
val Number nAwattarSchwelle = 33 //Schwellwert in EUR/MWh

rule "Gerät starten"
when
    Item PreisAktuell changed
then
    if(!(PreisAktuell.state instanceof Number)) {
        logWarn("awattar","Aktueller Preisungültig! ({})",PreisAktuell.state)
        return;
    }
    if((PreisAktuell.state as Number) < nAwattarSchwelle) {
        if(Preis01.state instanceof Number) {
            if((Preis01.state as Number) < nAwattarSchwelle) {
                // nächste Stunde ist es auch billig
                Geraet.sendCommand(ON)
            } else {
                // nächste Stunde wird's wieder teurer
            }
        } else {
            // keine Vorhersage für die nächste Stunde!
        }
    }
end
Das wäre ein grobes Gerüst. Es gibt Geräte, die kann man gefahrlos zwischendurch abschalten (z.B. Ladegeräte, zumindest, wenn es dafür einen Steuerbefehl gibt) und andere, da ist das nicht anzuraten (z.B. Waschmaschine), deshalb die verschiedenen Optionen. Es mag auch darauf ankommen, wie dringend ein Gerät laufen muss, ob man dann in Kauf nimmt, dass man nur für einen Teil der Laufzeit einen günstigen Tarif hat.
Ich gehe mal davon aus, dass man an dieser Stelle recht viel Gehirnschmalz aktivieren könnte...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

jb79
Beiträge: 7
Registriert: 29. Sep 2019 15:29

Re: Awattar

Beitrag von jb79 »

Hallo,

so ganz hab ich noch nicht verstanden, in welchen Dateien ich rumschreiben muß. Folgendes konnte ich rauslesen:
Hab mal in /etc/openhab2/services/http.cfg folgendes reingeschrieben:

# configuration of the first cache item
awattar.url=https://api.awattar.de/v1/marketdata{Au ... tion=Basic ***Base64kodierten API KEY***}
awattar.updateInterval=3600000


Dann unter /etc/openhab2/items/awattar.item den Teil aus dem 2. Post.

Unter /etc/openhab2/rules/awattar.rule den Teil darunter aus dem 2. Post.

Soweit so gut. Sollten dann irgendwann Items auftauchen, bisher sehe ich nämlich nix, werde aber mal ne Stunde warten. Oder fehlt hier noch irgendwas Entscheidendes, damit ich die Werte als Items reinbekomme?

Zum Update Intervall: Das sollte meiner Meinung nach 1h, also 3,6Mio ms sein, hab das in der http.cfg auch so reingeschrieben. Sollte man das nicht in der awattar.item auch auf diesen Wert setzen, da steht mal 30000 und mal 60000, was gleichbedeutend mit 30 und 60s wäre. Einerseits kommt in dem Zeitraum wohl sicher kein neuer Wert, andererseits ist die Anzahl der Abfragen bei Awattar auf 100/Tag beschränkt, oder haben diese Werte eine andere Bedeutung und es wird nur der Wert aus der http.cfg wirksam?

Wo müßte der Teil, den du im letzen Post beschrieben hast rein, in "Scripts"?
lg Jürgen

Antworten