aWATTar Strompreis shelly ansteuern

mc_givertechnik

New member
Hallo!

Gleich vorweg, ich bin ein HA Neuling. Mit Homemmatic hat mein Versuch, mein Heim zu automatisieren begonnen, erst der Wechsel von der Access Point Verson zu CCU3, besser gesagt Raspimatic.
Dann mein kläglicher Versuch mit IO Broker, an dem ich kläglich gescheitert bin.

Nun habe ich HomeAssistant entdeckt und mich damit angefreundet. Irgendwie erscheint mir HA für mioch geeignet....zumindest bis jetzt.

Ich bin Kunde bei aWATTar und nutze den Stromtarif Hourly, welcher mir den Stundenweisen Börsenstrompreis ermöglicht. Meine Wallbox von Fronius kann diese Daten bereits nutzen und lädt mein Auto zu den günstigsten Tarifen.
Nun möchte ich mit HA meine Wärmepumpen über das PV Signal dazu animieren, bei Billigsttarifen sowohl den Warmwassersepicher als auch den Pufferspeicher der Heizung, mit Billigstrom hochzuheizen. In weiterer Folge sollte auch der Stromspeicher, ein BYD HVM 13,8 Kw/h Akku, mit billigem Strom geladen werden, doch das ist eine andere Geschichte.

Im HA habe ich bereits die EPEX Spot Preise übernommen, diese habe ich schon zur Verfügung.
Nun gilt es, einen Shelly zum Schalten zu bringen, wenn eine Preisgrenze unterschritten wird und auszuschalten, wenn eine Preisgrenze überschritten wird.

Dazu verwende ich den Sensor "EPEX Spot DATA Net Price", dieser wechselt stündlich.

Mein ersten Versuche waren wie folgt:

Für das Ausschalten:
Ausllöser: Wenn Data von EPEX Spot Data Net Price ist über 6 für
Als Entität nehme ich "EPEX Spot Data Net Price"
Attribut: Data
Oberhalb Modus
Fester Wert 6
Wert-Template "leer"
Für: -:-:-
Trigger: bei jeder 7 Minuten einer Stunde und bei jeder 59ten Minute
Bedingung: Keine
Aktion: Brauchwasser PV-Kontakt
Gerät: Mein Shelly-xy
Aktion: Brauchwasser PV-Kontakt ausschalten

Das klappt leider nicht....


Mein zweiter VErsuch:

Auslöser: When {{ state attr('sensor.rec', 'data')Price ct per kwh }} of EPEX Spot Data Net Price changes
Bedingung: Wenn {{ state attr('sensor.rec', 'data')Price ct per kwh }} von EPEX Spot Data Net Price ist unter 5
Entität:"EPEX Spot Data Net Price"
Attribut: {{ state attr('sensor.rec', 'data')Price ct per kwh: }}
Aktion: Brauchwasser WP PV-Kontakt einschalten
Oberhalb Modus
Fester Wert 6
Wert-Template "leer"
Für: -:-:-
Aktion: Brauchwasser PV-Kontakt ausschalten

Klappt auch nicht....

Bitte noch einmal, ich kenne mich mit HA noch nicht wirklich aus, dürfte ich euch daher um eure Unterstützung bitten?

Grüße vom Neuling,

Peter
 
Es ist Nett gemeint, das Du deine Automatisierung im Klartext postest, hilft uns aber überhaupt nicht weiter.
Besser wäre es, den yaml code zu posten und dabei das hier beachten.
Auch dein "das klappt nicht" hilft wenig. WAS klappt nicht ? Hast Du mal einen Trace gemacht?
Trace geht einfach. An der Automatisierung sind rechts 3 Punkte. Da mal drauf klicken und "Abläufe" wählen. Oben in der Menüzeile steht dann "Trace Timeline". Das anklicken. Dann sieht man genau, was hat die Automatisierung gemacht, ist sie mit einem Fehler stehen geblieben ?
 
Hallo RudiP!

Danke für den Hinweis, ich werde mich bemühen, in Zukunft detaillierter und nach Vorgabe zu posten.
Als Laie möge man mit mir bitte nachsichtig sein.

Hier einmal ein paar Snapshots, ich hoffe die Richtigen.

Eines ist mir inzwischen klar geworden, die Attribute können nicht korrekt gelesen werden. Unter "sensor.epex_spot_data_net_price" ist die erste Ebene zum eigentlichen Wert der "Ordner" Data und erst darunter verbirgt sich der Wert "Price ct per kwh:", welcher gelesen werden müsste. Ich habe dann einige Beiträge gefunden, die ähnliche Probleme beschreiben und es versucht, daher mein Versuch mit
'{{ state_attr('sensor.epex_spot_data_net_price', 'data')Price ct per kwh:}}'
Vermutlich wird ein Kenner der Materie jetzt die Hände über dem Kopf zusammenschlagen oder sich totlachen, aber ich habe von den Zeichen und deren Bedeutung nicht viel Ahnung, habe es einfach einmal probiert. Im Anhang die Auflistung der Attribute von EPEX-Spot-Data_Net-Price. Weiters auch ein Bild der Automatisierung.

Was mich nur wundert, dass die beiden Shellys dennoch geschalten werden, obwohl die Abfrage des Wertes nicht funktioniert. Ich habe eher damit gerechnet, dass, sobald etwas nicht ausgeführt werden kann, abgebrochen wird.
Eine Komponente fehlt mir, wann und wie oft wird abgefragt, ob sich der Wert ändert oder löst die Änderung des Wertes selbst schon das Programm aus?

Ich hoffe, ich konnte jetzt alles halbwegs nachvollziehbar darstellen.

Danke an euch und eure Tipps,

Gruß,

Peter
 

Anhänge

  • Attribute-EPEX-SPot-Data-Net-Price.PNG
    Attribute-EPEX-SPot-Data-Net-Price.PNG
    125,3 KB · Aufrufe: 9
  • Automation-conf.PNG
    Automation-conf.PNG
    174,6 KB · Aufrufe: 7
  • Trace-Timeline.PNG
    Trace-Timeline.PNG
    99,5 KB · Aufrufe: 7
Zuletzt bearbeitet:
YAML:
id: '1703183349679'
alias: Strompreis nieder on
description: ''
trigger:
  - platform: state
    entity_id:
      - sensor.epex_spot_data_net_price
    attribute: >-
      {{ state_attr('sensor.epex_spot_data_net_price', 'data')Price ct per
      kwh:}}
condition:
  - condition: numeric_state
    entity_id: sensor.epex_spot_data_net_price
    attribute: >-
      {{ state attr('sensor.epex_spot_data_net_price', 'data')Price ct per
      kwh:}}
    below: 5
action:
  - type: turn_on
    device_id: faa4f2d385c6e4b34db7805996b226f6
    entity_id: 333be71bbcbc3c7fb316aa856f0264ae
    domain: switch
  - type: turn_on
    device_id: 0d1aab7c7f799b4e9e63660e3f3ef447
    entity_id: 7887669b390fcbc34fccaebbdca3595c
    domain: switch
mode: single
 
Also ich bin kein Fachmann in der Programmierung von YAML, aber diese Zeilen kommen mir Spanisch vor.
Code:
    entity_id:
      - sensor.epex_spot_data_net_price
    attribute: >-
      {{ state_attr('sensor.epex_spot_data_net_price', 'data')Price ct per
      kwh:}}
Es ist klar, das Du auf den Sensor epex_spot_data_net_price zugreifen willst. Da dann auf das Attribut mit dem Namen epex_spot_data_net_price.
Nach meinem dafürhalten ist da aber die Reihenfolge falsch.
Hast Du es mal so rum versucht ?
Code:
attribute: >-
      {{ state_attr('data', 'sensor.epex_spot_data_net_price')Price ct per
      kwh:}}
Du willst ja auf das Attribut DATA zugreifen und den darin enthaltenen Wert epex_spot_data_net_price lesen.
Aber wie gesagt. Da bin ich nicht der richtige Ansprechpartner und testen kann ich es auch nicht, da ich hier keinerlei Möglichkeit habe, das nachzustellen.
 
Ich habe mir gerade mal diese EPEX Integration auch installiert.
Ohne es wirklich getestet zu haben:

Code:
alias: niedriger Strompreis
description: ""
trigger:
  - platform: numeric_state
    entity_id:
      - sensor.epex_spot_data_net_price
    attribute: data
    below: 16
condition: []
action:
  - type: toggle
    device_id: 0328b6bf242fd06a1abfaa81095ec40a
    entity_id: 5e4c3cf6520f6bbdea21435acd74e055
    domain: light
mode: single
halte ich diesen Ansatz für besser, weil ich nicht in yaml rumexperimentieren muß, was ich den nun abfragen muß, sondern die möglichen sensoren werden mir im Editor angezeigt.
Bei mir wird da aktuell ein Preis von 16,54 Cent je kWh angezeigt. Starte ich die Routine, wird aber nicht die Bedingung "unter 16" abgefragt, deswegen bisher noch nicht sicher getestet.
Klar, kann ich da jetzt noch die Bedingung rein basteln, aber ein bisschen kannst Du ja sicher auch selbst machen, oder ?
 
Hallo RudiP!

Das war mein erster Ansatz. Ich habe nun die Attribute und Entitys angepasst, jetzt sieht das so aus, siehe Anhang.

Mit dieser Konfig wird nicht mehr geschalten, doch wird nach wie vor in der Trace Timeline "unknown entity" ausgegeben. Irgendwas an dem Pfad zum Wert ist falsch....keine Ahnung was...ich probiere....

Was hat es eigentlich mit den "Underlines" anstelle der Leerzeichen auf sich. Setzt man diese, wie sie in den Attributen des Sensors ersichtlich sind, werden sie teilweise nach dem Speichern in der Automatisierung wieder unsichtbar.....kann es daran scheitern?

Danke für die Hilfe!!

Grüße,

Peter
 

Anhänge

  • Automation-conf_num.PNG
    Automation-conf_num.PNG
    129,3 KB · Aufrufe: 3
Zuletzt bearbeitet:
Ich denke, das dein
Code:
    attribute: >-
      {{ state_attr('sensor.epex_spot_data_net_price', 'data')Price ct per
      kwh:}}
falsch ist.
Gehe doch mal in die Einstellungen -> Geräte & Dienste -> Entitäten und lass dir dann mal "EPEX Spot Data Net Price" anzeigen. Da bekommst Du ja den AKTUELLEN Strompreis angezeigt, ohne das Du auf die Attribute zugreifst.
Die Attribute kannst Du dir unten ja auch noch ansehen. Da stehen dann die Preise für diesen Tag bisher und für die Zukunft erwartet drin. Aber das wollen wir aktuell ja noch gar nicht.

Im Editor sieht mein Trigger so aus.
1703582988986.png
 
Hallo RudiP!

Genau so, wie du es gepostet hast, habe ich das ganze Projekt begonnen. Mit dem Ergebnis, dass der Shelly beim manuellen Auslösen zwar schaltet, aber nicht automatisiert mit Bezug auf den tatsächlichen Stundenpreis aus EPEX.
Eigentlich bin ich jetzt wieder genau am Anfang, nicht missverstehen :sneaky:

Das Grundporblem bleibt, der Wertdes aktuellen Stundenpreises wird nicht gelesen...jetzt ist mit noch weniger klar, warum nicht....

Grüße,

Peter
 

Anhänge

  • Automation-Config 261223.PNG
    Automation-Config 261223.PNG
    142,2 KB · Aufrufe: 4
Das Problem ist das Testen. Ich kann nicht jedes mal warten, das sich der Preis ändert und das er sich auf einen Wert ändert, bei dem die Automatisierung etwas tun soll. Deswegen muß die Abfrage, ob ein bestimmter Preis unterschritten wurde, nicht in den Trigger, sondern in den Aktion teil.

Code:
alias: niedriger Strompreis
description: ""
trigger:
  - type: value
    platform: device
    device_id: 27f60617ae32f43f617461317c98fe26
    entity_id: f12f98cb63616386e72358229b7c501e
    domain: sensor
    below: 1
    above: 1
condition: []
action:
  - if:
      - condition: numeric_state
        entity_id: sensor.epex_spot_data_net_price
        below: 21
    then:
      - type: turn_off
        device_id: 0328b6bf242fd06a1abfaa81095ec40a
        entity_id: 5e4c3cf6520f6bbdea21435acd74e055
        domain: light
    else:
      - type: turn_on
        device_id: 0328b6bf242fd06a1abfaa81095ec40a
        entity_id: 5e4c3cf6520f6bbdea21435acd74e055
        domain: light
mode: single
Der Trigger oben wird nicht geprüft, wenn man die Automatisierung per Hand startet. Deswegen eher egal, was da steht. Die sollte später halt nur auslösen, wenn sich ein Preis geändert hat.
Im Aktion teil frage ich mit "Wenn-Dann" den aktuellen Preis ab. Ist er unter 21 cent je kWh , dann schaltet er meine Büro Lampe aus, andernfalls schaltet sie ein.
Das klappt bei mir so weit.
 
Gib in den Entwicklerwerkzeugen bei Template mal folgendes ein:

YAML:
{{ states.sensor.epex_spot_data_net_price.attributes.data[0].price_ct_per_kwh }}

So solltest du an den Preis rankommen.

Wenn das klappt, nimmst du als Trigger für deine Automation die Option "Template" mit diesem Inhalt:

Code:
{{ states.sensor.epex_spot_data_net_price.attributes.data[0].price_ct_per_kwh|float(0) > 6 }}

Das "> 6" kannst du an deine Bedürfnisse anpassen
 
Zuletzt bearbeitet:
Da kommt nur "sensor' is undefined"

Hab mal was rumgespielt. Mit "{{ states('sensor.epex_spot_data_net_price') }}" bekommt man den Wert angezeigt.
 
Zuletzt bearbeitet:
Grüß euch!

Für eure Vorschläge bin ich wirklich dankbar, doch komme ich jetzt ein wenig durcheinander. Nicht nur, dass ich meinen Homeassistant auf Deutsch betreibe und nicht auf Englisch. Und dann noch die beiden unterschiedlichen Ansätze, einmal über den Auslöser, dass sich der Strompreis unter epex_spot_net_price ändert und so die Automatisierung auslöst, oder als direkte Abfrage über den aktuellen Strompreis im Vergleich zum gewünschten Wert.

Was gehört jetzt wohin?

Grüße,

Peter
 
Mein Ansatz nimmt den Strompreis als Auslöser. Fällt er unter Wert X, mache Aktion Y. Und umgekehrt.

Wenn du in den Entwicklerwerkzeugen unter Template (heißt auch bei "deutschem Home Assistant" so) eingibst, was ich im vorherigen Post vorgeschlagen habe, sollte da dein gesuchter Preis bei rauskommen. Wenn dem so ist, Arbeiten wir damit weiter.
Stück für Stück 😉
 
IvoryBalboa90, dein Ansatz ist falsch. Du darfst nicht auf DATA zugreifen. Er hat oben doch ein Bild gepostet, was da drin steht. Du kannst sicher mit Data[x] auf irgendeinen Eintrag zugreifen, aber aktuell ist der dann nicht, sondern war zur Stunde [x] gültig.
Nimmst Du meine Zeile dann wir auch der aktuelle Wert angezeigt, ganz ohne Data[x]

Ich habe momentan diesen Code hier.
Code:
alias: niedriger Strompreis
description: ""
trigger:
  - platform: template
    value_template: "{{ states('sensor.epex_spot_data_net_price')|float(0) > 23 }}"
condition: []
action:
  - service: notify.mobile_app_sm_s918b
    data:
      message: TTS
      title: Neuer Strompreis
      data:
        tts_text: neuer Strompreis
        media_stream: alarm_stream_max
mode: single
Durch den value_template bekomme ich ein FALSE, so lange der Strompreis > 23 Cent ist.
Fällt er darunter, bekomme ich TRUE und die Automatisierung "sollte" ausgelöst werden. Das teste ich halt gerade.

Und um Dir zu zeigen, das sein Template nicht funktionieren kann:
Template Editor:
{{ states('sensor.epex_spot_data_net_price') }}
{{ states('sensor.epex_spot_data_net_price')|float(0) > 24 }}
{{ states.sensor.epex_spot_data_net_price.attributes.data[0].price_ct_per_kwh }}


Ergebnistyp: string
23.9961715
False
19.2649695

Dein Template liefert also 19.2649695 zurück. Und was sehen wir bei den Attributen unter Data ?

- start_time: '2023-12-26T23:00:00+00:00'end_time: '2023-12-27T00:00:00+00:00'price_ct_per_kwh: 19.2649695
Das kann so nicht funktionieren, außer Du gibst die aktuelle Stunde mit, was aber unnötig ist und String unbrauchbar ist, um damit größer kleiner zu vergleichen.
1703686160977.png
So sieht das mit meinem Template aus.
1. der richtige Wert
2. der richtige Typ. NUMBER
 
So, gerade kam die Bestätigung, meine Routine funktioniert.
Hier erst mal der Code.

Code:
alias: AAA
description: ""
trigger:
  - platform: numeric_state
    entity_id:
      - sensor.epex_spot_data_net_price
    value_template: "{{ states('sensor.epex_spot_data_net_price')|float(0) }}"
    below: 20.8
condition: []
action:
  - if:
      - condition: numeric_state
        entity_id: sensor.epex_spot_data_net_price
        value_template: "{{ states('sensor.epex_spot_data_net_price')|float(0) }}"
        above: 21
    then:
      - service: notify.mobile_app_sm_s918b
        data:
          message: TTW
          title: Preis über 21
          data:
            tts_text: Preis über 21
            media_stream: alarm_stream_max
    else:
      - service: notify.mobile_app_sm_s918b
        data:
          message: TTS
          title: Preis ist unter 20.8
          data:
            tts_text: Preis ist unter 20.8
            media_stream: alarm_stream_max
mode: single
Der Preis stand bei 20.9 cent je kWh.
Der Auslöser hat reagiert, als der Preis auf 17.23 gefallen ist.
Dann geht es in die WENN DANN Bedingung und es wurde die Aktion unter "Sonst:" ausgeführt, sprich, mein Handy teilte mir mit, der der Preis unter 20.8 gefallen ist.
Damit solltest Du nun in der Lage sein, dein Vorhaben umzusetzen.
 
Ergebnistyp: string
23.9961715
False
19.2649695
Das sind zwei numbers und ein string.
Wenn du mehrere Templates eingibst und da ein string bei ist, steht als Ergebnis immer string da. Nur zu deiner Info.

IvoryBalboa90, dein Ansatz ist falsch. Du darfst nicht auf DATA zugreifen. Er hat oben doch ein Bild gepostet, was da drin steht.
Auf dem Bild ist aber nicht ersichtlich, dass der gesuchte Wert der state vom Sensor ist. Zu sehen ist da nur das Attribut 'Data', das ein Array aus Preis, Start-und Endzeit für jede Stunde ist.

YAML:
      - service: notify.mobile_app_sm_s918b
        data:
          message: TTS
          title: Preis ist unter 20.8
          data:
            tts_text: Preis ist unter 20.8
            media_stream: alarm_stream_max
mode: single
Das ist das einzige, was du aus den Actions brauchst. Das If-Then kannst du komplett weg lassen, das If wird nie True sein.

YAML:
  - platform: numeric_state
    entity_id:
      - sensor.epex_spot_data_net_price
    value_template: "{{ states('sensor.epex_spot_data_net_price')|float(0) }}"
    below: 20.8
Das ist unnötig kompliziert und vor allem doppelt gemoppelt. Value_template wird benutzt, um den gewünschten Wert vor Verarbeitung zu bearbeiten, zum Beispiel aus ner -1 ne +1 machen.

Nehmt einfach als Trigger numerischer Zustand mit eurer Entität, bei Attribut tragt ihr gar nix ein und dann funktioniert das auch ohne Templates etc.
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
4.666
Beiträge
47.659
Mitglieder
4.312
Neuestes Mitglied
Harway2007
Zurück
Oben