Ich bekomme das mit den Variablen nicht hin

Hallo zusammen,
ich bekomme Abends um 23:55 immer eine Mail und eine Telegram Nachricht mit dem Strom -Tagesverbrauch von Homematic zugeschickt. Diese Werte trage ich dann in eine Excel Tabelle ein. Ja ich weiß das geht auch ohne Excel mit einer DB, aber das sprengt mom meinen Schädel
Ich möchte von HA um 23:55 auch die Auswertung vom Wärmepumpenzähler zugesendet bekommen. Mom lass ich mir andere Nachrichten per notification via mobile_app zusenden. Wie bekomme ich ein Scipt dazu nur um 23:55 diese Rechnung auszuführen und mir danach die Nachricht mit dem Diferenzwert zuzusenden. ?

Ich habe hier schon alles durchgelesen bezüglich Varibalem, aber ich komm nicht weiter.

Ich hab eine variables.yaml angelegt, in der ich hier aus dem Forum einfach die einträge übernommen habe

dann hab ich mir eine scripts.yaml angelegt mit

In der configuration.yaml hab ich dann auf die beiden *.yaml verwiesen bzw. die eine war schon drin

frontend:
  themes: !include_dir_merge_named themes
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
variable: !include variables.yaml

Für mein Verständis hab ich eine Variable ’ au_ladestrom_gesetzt: ’ mit dem Wert 0 angelegt. Dann soll bei Aufruf des Scriptes diese Variable mit dem Wert von ’ sensor.sensor.tasmota_main_wpzaehlerstand ’ gefüllt werden.
Doch wenn ich die Konfiguration prüfen lasse bekome ich diese Fehlermeldung : Unexpected error calling config validator: ‘NoneType’ object is not iterable.

Mein Hintergedanke : Ich lass meine Wärmepumpenstand um 23:55 auslesen und in die Variable schreiben. Am folgenden Tag soll der Wärmepumpenstand wieder ausgelesen werde, und von dem Vortag abgezogen werden. Den Diffezenzwert möchte ich per Mail/Telegramm oder notification zugesand bekommen. Der Wert der Variable soll dann wieder um 23:55 ermittelt und in die Variable geschrieben werden usw. Eigenlich ganz einfach, aber ich bekomm das einfach nicht hin. In Homematic hab ich das so gemacht.

!Tageszaehler
var vTz = dom.GetObject("Strom Referenz Verbrauch heute");
var vTg = dom.GetObject("Strom Verbrauch heute");
vTz.State(vTg.State() + vTz.State());
vTg.State(0.00);

!Wochenzaehler
if (system.Date("%u") == 7) {
var vWz = dom.GetObject("Strom Referenz Verbrauch laufende Woche");
var vWg = dom.GetObject("Strom Verbrauch laufende Woche");
vWz.State(vWg.State() + vWz.State());
vWg.State(0.00);
}

!Monatszaehler
time morgen = (system.Date("%F %X").ToTime().ToInteger() + 120).ToTime();
if (morgen.Day() == 1) {
var vMz = dom.GetObject("Strom Referenz Verbrauch laufender Monat");
var vMg = dom.GetObject("Strom Verbrauch laufender Monat");
vMz.State(vMg.State() + vMz.State());
vMg.State(0.00);
}

!Jahreszaehler:
if ((system.Date("%m") == 12) && (system.Date("%d") == 31)) {
var vJz = dom.GetObject("Strom Referenz Verbrauch laufendes Kalenderjahr");
var vJg = dom.GetObject("Strom Verbrauch laufendes Kalenderjahr");
vJz.State(vJg.State() + vJz.State());
vJg.State(0.00);
}

!----
string message ="Kalender Reset ausgefuehrt ";
string chatid = "YYYYYYYY"; ! chat_id des Empfängers;
string botAPI = "YYYYYYYY"; ! API des eingerichteten Bots;
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -k https://api.telegram.org/bot"#botAPI#"/sendMessage -d text='"#message#"' -d chat_id="#chatid);

und

object oP = dom.GetObject("BidCos-RF.QEQ0336852:1.IEC_POWER");
object oE = dom.GetObject("BidCos-RF.QEQ0336852:1.IEC_ENERGY_COUNTER");
! Einspeisung in kWh
var SES = dom.GetObject("BidCos-RF.QEQ0336852:2.IEC_ENERGY_COUNTER").Value();
var SESo = SES-5;
dom.GetObject ("Strom Einspeisung").State(SESo);
!
var zA = dom.GetObject("Strom Zaehlerstand");
var aA = dom.GetObject("Strom Leistungsaufnahme aktuell");
var vLz = dom.GetObject("Strom Referenz Verbrauch seit letzter Ablesung");
var vLg = dom.GetObject("Strom Verbrauch seit letzter Ablesung");
var vTz = dom.GetObject("Strom Referenz Verbrauch heute");
var vTg = dom.GetObject("Strom Verbrauch heute");
var vWz = dom.GetObject("Strom Referenz Verbrauch laufende Woche");
var vWg = dom.GetObject("Strom Verbrauch laufende Woche");
var vMz = dom.GetObject("Strom Referenz Verbrauch laufender Monat");
var vMg = dom.GetObject("Strom Verbrauch laufender Monat");
var vJz = dom.GetObject("Strom Referenz Verbrauch laufendes Kalenderjahr");
var vJg = dom.GetObject("Strom Verbrauch laufendes Kalenderjahr");
zA.State(oE.State().Round(1));
aA.State(oP.State());
vLg.State((zA.State() - vLz.State()).Round(0));
vTg.State((zA.State() - vTz.State()).Round(0));
vWg.State((zA.State() - vWz.State()).Round(0));
vMg.State((zA.State() - vMz.State()).Round(0));
vJg.State((zA.State() - vJz.State()).Round(0));

Das mit den Variablen hab ich immer noch nicht hinbekommen, kann mir aber schon mal Mail’s und Telegramm+ Nachrichten mit dem Zählerstand zuschicken.

Ich bin nicht ganz durchgestiegen bei Dir aber ich kann Dir ein funktionierendes Variable Beispiel geben.

Eins vorweg: Du setzt keine Systemvariable auf die aus allem zugregriffen werden kann, sondern rufst ein Script auf, dem Du die Variable übergibst und nur dieses Script kann diese verwerten.

Aus einer Automatisation oder Script ruftst Du ein Script auf, in meinem Fall script.om_scr_sonos_spricht_single

data:
  variables:
    speaker: media_player.sonos_olaf
    MitIntroAnsage: "yes"
    SikpSnapshotRestore: "no"
    message: "Was soll ich sagen"
    delay: 2
    gender: female
    prio: 1
    volume: >-
      {{float(state_attr('sensor.om_sonus_sprachausgabe_soundlevelmap_1', 'normal'))}}
target:
  entity_id: script.om_scr_sonos_spricht_single
action: script.turn_on

In dem Zielscript verwerte ich dann die Variablen, z.B.

      - data:
          volume_level: "{{ volume }}"
        target:
          entity_id: "{{ speaker }}"
        action: media_player.volume_set

Wo ich schon ein paar mich verirrte, war der Variablen Scope auch innerhalb eines Scriptes. Hier die Doku. Manchmal muß man einfach testen.

Ich hoffe, ich habe nicht an Deinem Thema vorbeigeredet - gutes Gelingen!

Hallo Bacardi,
erst mal Danke für deine Antwort !! Leider viel zu viel Input den ich leider nicht verstehe :confounded:

Ich möchte einfach den Wert von z.B. : ’ sensor.watermeter_raw ’ in eine Variable geschrieben haben z.B. mit dem Namen : Wasserstand Vortag.
Mit aktuellen Werten hab ich keine Problem. Das mit dem Rechnen hab ich auch schon verstanden. Ich hab zwar schon ne Menge durchgelesen, aber da steht so vieles drin, was ich einfach nicht verstehe, das ich aufgegeben habe. Ich hab schon was mit Saver versucht, aber da komm ich auch nicht weiter, da der ja mit dem gleichen Namen wie die Entität abspeichert. Ich muss eine Variable anlegen, sonst geht es nicht.

Dies könntest Du z.B. über einen Helper als Variable (input_number) erreichen. Diesen befüllst Du dann um Mitternacht über eine Automatisation mit dem Action Teil

action: input_number.set_value
target:
  entity_id: input_number.vortag
data:
  value: {{ states('sensor.watermeter_raw') | float(0) }}
1 „Gefällt mir“

Top das habe ich nun verstanden ! :slight_smile:

Ich hab dann einen Sensor Template angelegt, aber dort bekomme ich immer einen Fehler, der Code zeigt aber alles Richtig an.

Ich DEPP

So sollte es richtig sein :thinking:

Stimmt meine Vermutung ?

Das mache ich dann mit einer Automatisierung !?
Neue Automatisierung-> Uhrzeit ( eintragen ) → Dann → Aktion hinzufügen … aber die kann ich meinen angelegten Helfer ’ sensor.var_wasseruhr_zahlerstand ’ nicht aufrufen ?

:crayon:by HarryP: Zusammenführung Mehrfachpost (bitte “bearbeiten” Funktion nutzen)

Meine Tipps:

  • Gehe in Deinem Tempo bis Deine Schritte sicher sind!
  • Beschäftige Dich noch mehr mit HA Grundlagen: Begriffe wie Helfer, Sensor, Automatisationen etc. müssen sitzen. Simon hat schöne Einstiegsvideos. Schau sie Dir an und übe. So tat ich es einst auch. Der Anfang ist müßig.
  • Nimm so gut wie keine Abkürzungen, nur was Du auch verstehst - Abkürzungen holen Dich sowieso ein wenn irgendwas nicht mehr geht.

In Deinen Screenshots versuchst Du Teil eines Automatisationscodes in einen Template Sensor einzufügen. Beides hat nichts miteinander zu tun und kann nicht funktionieren.

ja

Sofern Du den Helfer richtig angelegt hast, geht das auch.
Einen Input Helfer legst Du an über: Einstellungen → Geräte/Dienste → Helfer → Helfer erstellen → Zahlenwert-Eingabe.

Du schaffst das schon!