Habe einen Shelly Pro 3EM Stromzähler. Der gibt unter anderem das Reading Total_Energy (Komplette Stromverbrauch) aus
Möchte nun zu einer bestimmten Uhrzeit dieses Reading in ein Userreading schreiben
Mit diesem Code habe ich das UserReading angelegt. StromZaehler ist das Device
attr StromZaehler userReadings Tagesverbrauch { ReadingsVal("Total_Energy","value",0) }
Wie bringe ich das UserReading dazu nur um 23:59Uhr erzeugt zu werden
Hoffe auf Hilfe
Zitat von: bajogger am 30 August 2023, 11:48:48Wie bringe ich das UserReading dazu nur um 23:59Uhr erzeugt zu werden
Statt einem userReadings ein at mit setreading...
EDIT: und wenn ich mir das userReadings so ansehe. Bist du sicher, dass das funktioniert? Weil attr StromZaehler und dann aber ReadingsVal("Total_Energy", ... Wie heißt denn nun das Device? Oder hast du ein userReadings beim Device "StromZaehler" und "holst" die Daten vom Device "Total_Energy"? Und: userReadings OHNE TRIGGER: pfui! ;)
Gruß, Joachim
Codeschnipsel ist für fertigen Code => verschieben! (Ja, kannst du selbst!)
Weitere Stichworte: statistics und delta-d....
Zitat von: Beta-User am 30 August 2023, 12:34:06Weitere Stichworte: statistics und delta-d....
Statistics hatten wir ja schon.
Ich hatte in deinem vorheigen Beitrag auch die Frage gestellt -> "je nachdem wo du hinwillst"....
Vermutlich kommt immer wieder eine Kleinigkeit dazu. Schau dir tatsächlich mal statistics an (nutze ich). Oder auch andere Module (ich nutze davon keins und hab daher keinen Tipp) die sich mit Energiezählern (Zählern) beschäftigen.
Da ist vermutlich etwas dabei, was deinen Bedarf deckt.
Wenn es schnell sein muss wie MadMax-FHEM schrieb ein at um 23:59 (ungetestet) mit dem Ausführungsteil
"setreading StromZaehler Tagesverbrauch {ReadingsVal("StromZaehler","Total_Energy",0)}"
Ist dann aber der absolute Wert und kein Tagesverbrauch, da braucht du dann Deltawerte.
Zitat von: Beta-User am 30 August 2023, 12:34:06Codeschnipsel ist für fertigen Code => verschieben! (Ja, kannst du selbst!)
Falls du das Verschieben nicht findest: unten links
ZitatEDIT: und wenn ich mir das userReadings so ansehe. Bist du sicher, dass das funktioniert? Weil attr StromZaehler und dann aber ReadingsVal("Total_Energy", ... Wie heißt denn nun das Device? Oder hast du ein userReadings beim Device "StromZaehler" und "holst" die Daten vom Device "Total_Energy"? Und: userReadings OHNE TRIGGER: pfui! ;)
Richtig funktioniert nicht
attr StromZaehler userReadings Tagesverbrauch { ReadingsVal("StromZaehler","Total_Energy",0)}
Funktioniert aber. Nützt allerdings nur zu Lernzwecken
setReading funktioniert noch nicht
*16:57:00 "setreading StromZaehler Tagesverbrauch {ReadingsVal("StromZaehler","Total_Energy",0)}"
bringt
{ReadingsVal("StromZaehler:Total_Energy",0)}
als Ergebnis und keinen Wert
Vermutlich lächerlicher Fehler für euch Profis.
PS: 16:57 Uhr ist natürlich zu Testzwecken
lass die Anführungszeichen um den FHEM Befehl weg
Und beschäftige Dich einfach mal mit der richtigen Syntax für "FHEM Befehle" im Vergleich zu "perl-Funktionen".
Das würde uns allen das Leben einfacher machen.
*17:36:00 setreading StromZaehler Tagesverbrauch {ReadingsVal("StromZaehler","Total_Energy",0)}
bringt das Gleiche.
Aber will niemand das Leben schwer machen. Finde das schon raus
{ReadingsVal("StromZaehler","Total_Energy",0)}
in der Befehlszeile bringt was?
setreading StromZaehler Tagesverbrauch {ReadingsVal("StromZaehler","Total_Energy",0)}
in der Befehlszeile bringt was?
...das dürfte fehlerfrei durchlaufen, aber das Ergebnis ist nicht das, was der TE haben will...
Such mal in der commandref (https://commandref.fhem.de/#set) nach:
ZitatFrom featurelevel 5.7 on the set and setreading command replaces:
....
Das Stichwort heißt "set magic" (so man auf sowas steht).
Mal wieder das Problem mit einer komplett widersinnig geforderten Klammersetzung.
Vermutlich so:
setreading StromZaehler Tagesverbrauch {(ReadingsVal("StromZaehler","Total_Energy",0))}
ZitatCodeAuswählen
{ReadingsVal("StromZaehler","Total_Energy",0)}
in der Befehlszeile bringt was?
59.8079 kWh
ZitatCodeAuswählen
setreading StromZaehler Tagesverbrauch {ReadingsVal("StromZaehler","Total_Energy",0)}
in der Befehlszeile bringt was?
{ReadingsVal("StromZaehler","Total_Energy",0)}
Erstes kommt als Ergebnis direkt an der Befehlszeile
Zweites erneuert das Reading im Device
ZitatMal wieder das Problem mit einer komplett widersinnig geforderten Klammersetzung.
Ohne die gäbs noch weniger Popcorn !
setreading StromZaehler Tagesverbrauch {(ReadingsVal("StromZaehler","Total_Energy",0))}
:)
Danke. Schaue ich mir jetzt in Ruhe an um was zur Klammersetzung zu lernen.
Danke an Alle
ZitatSchaue ich mir jetzt in Ruhe an um was zur Klammersetzung zu lernen.
Lass es, beschäftige dich mit Perl, das hier ist ein "Sonderfall".
Zitat von: bajogger am 30 August 2023, 18:44:42Schaue ich mir jetzt in Ruhe an um was zur Klammersetzung zu lernen.
Lass es.
Dieses Konstrukt hat weder etwas mit "richtigem FHEM" noch mit "richtigem perl" zu tun.
Diese haarsträubende, sinnlose und komplett entbehrliche Syntax zur Klammersetzung hat sich irgendwann eine einzelne Person hier im Forum ausgedacht und umgesetzt. Vermutlich in guter Absicht, was aber komplett schiefgegangen ist.
Gewöhne Dir den Mist erst gar nicht an.
Mach es einfach und mach es richtig, dann brauchst Du solche Absurditäten nicht.
wo lese ich wie ich es richtig mache?
Tutorials zu perl gibt es zuhauf im Internet.
Und für FHEM ist in der Regel die commandref eine gute Anlaufstelle, dort sind (neben den Modulen) auch alle FHEM-Befehle (!) beschrieben.
Zitat von: bajogger am 30 August 2023, 19:13:13wo lese ich wie ich es richtig mache?
(doppelt genäht hält vielleicht besser...)
Was "richtig" ist, ist teilweise sicher Ansichtssache.
MAn. ist es "richtig", sich irgendwann mit den Grundlagen zu befassen, und das ist eben in diesem Fall die Programiersprache "Perl". Von daher ist es m.E. am Ende am einfachsten, wenn man alle derartigen Aufgaben, in denen man irgendwelche Infos mit Perl abruft (mittels "set magic" eben indirekt) dann eben auch mit Perl löst. Literaturempfehlungen sollte es im Wiki geben...
Weiter ist es "richtig", erst mal die Frage zu stellen, was man eigentlich erreichen möchte. Ein bestimmtes Reading zu setzen ist m.E. uU. zu kurz gegriffen, und wenn es z.B. nur ums Loggen geht, kann man die Log-Devices evtl. auch einfach mittels "trigger" auslösen, ohne überhaupt ein Reading zu schreiben... Falls man das überhaupt benötigt, denn wenn es am Ende nur um die graphische Darstellung mit SVG geht, reicht auch "delta-d" als Stichwort.
Aber wie immer: Ohne klaren input kein nachvollziehbarer output...