FHEM Forum

FHEM => Automatisierung => Thema gestartet von: dennis_n am 19 Februar 2023, 15:09:02

Titel: Kein setreading im at möglich
Beitrag von: dennis_n am 19 Februar 2023, 15:09:02
Hallo,

ich schreibe mir Nachts mit einem at Befehl die Stromwerte in ein dummy. Dazu verwende ich im dummy mehrere Readings.
Aber irgendwie funktioniert das nicht.
Der Befehl lautet:
*{at_ultimo(23,59,55)} setreading Stromzaehler Bezug180 [MQTT2_DVES_74ED88:MT681_Bezug]; setreading Stromzaehler Einspeisung280 [MQTT2_DVES_74ED88:MT681_Einspeisung]

Im Logfile steht dann aber "unknown command setreading"

Was mache ich falsch?

Danke
Gruss
Dennis
Titel: Antw:Kein setreading im at möglich
Beitrag von: betateilchen am 19 Februar 2023, 15:18:41
Poste mal bitte ein vollständiges raw list des at device.
Vermutlich fehlt da ein doppelter Strichpunkt.
Titel: Antw:Kein setreading im at möglich
Beitrag von: dennis_n am 19 Februar 2023, 15:40:52
Internals:
   COMMAND    setreading Stromzaehler Bezug180 [MQTT2_DVES_74ED88:MT681_Bezug]; setreading Stromzaehler Einspeisung280 [MQTT2_DVES_74ED88:MT681_Einspeisung]
   DEF        *{at_ultimo(23,59,55)} setreading Stromzaehler Bezug180 [MQTT2_DVES_74ED88:MT681_Bezug]; setreading Stromzaehler Einspeisung280 [MQTT2_DVES_74ED88:MT681_Einspeisung]
   FUUID      63d54104-f33f-8212-5e60-ad94c73762d12c94
   NAME       at_ultimo
   NR         222
   PERIODIC   yes
   RELATIVE   no
   REP        -1
   STATE      Next: 2023-02-28 23:59:55
   TIMESPEC   {at_ultimo(23,59,55)}
   TRIGGERTIME 1677625195
   TRIGGERTIME_FMT 2023-02-28 23:59:55
   TYPE       at
   eventCount 5
   READINGS:
     2023-02-18 19:40:11   state           Next: 2023-02-28 23:59:55
Attributes:
   room       Solar
   verbose    5
Titel: Antw:Kein setreading im at möglich
Beitrag von: betateilchen am 19 Februar 2023, 15:57:22
Zitat von: betateilchen am 19 Februar 2023, 15:18:41
Poste mal bitte ein vollständiges raw list des at device.

list -r at_ultimo

Bei mir funktioniert das at grundsätzlich,

defmod test_at at *{at_ultimo(23,59,55)} setreading Stromzaehler Bezug180 [MQTT2_DVES_74ED88:MT681_Bezug];; setreading Stromzaehler Einspeisung280 [MQTT2_DVES_74ED88:MT681_Einspeisung]


wenn ich das mit "set test_at execNow" ausführe.
Titel: Antw:Kein setreading im at möglich
Beitrag von: Wolle02 am 19 Februar 2023, 15:58:21
Ich kann mich irren, aber berechnet die Funktion at_ultimo nicht den Zeitpunkt am letzten Tag des Monats?
Müsste man für den Zeitpunkt 23:59:55 eines jeden Tages nicht ein normales at verwenden?
Titel: Antw:Kein setreading im at möglich
Beitrag von: betateilchen am 19 Februar 2023, 16:00:04
Zitat von: Wolle02 am 19 Februar 2023, 15:58:21
Ich kann mich irren, aber berechnet die Funktion at_ultimo nicht den Zeitpunkt am letzten Tag des Monats?
Müsste man für den Zeitpunkt 23:59:55 eines jeden Tages nicht ein normales at verwenden?

Darum geht es doch hier überhaupt nicht.
Das Problem liegt im Ausführungsteil, nicht in der Berechnung des Ausführungszeitpunktes.
Titel: Antw:Kein setreading im at möglich
Beitrag von: Wolle02 am 19 Februar 2023, 16:04:42
Ah ja. Ich bin gleich beim at_ultimo hängen geblieben. Das mit dem "unknown command setreading" hab ich übersehen.
Titel: Antw:Kein setreading im at möglich
Beitrag von: betateilchen am 19 Februar 2023, 16:20:19
Zitat von: betateilchen am 19 November 2022, 12:10:37
Leute, könnt Ihr nicht erstmal versuchen zu verstehen, was der Fragesteller eigentlich haben/machen möchte, [...]

Einfach unglaublich, wie hier in viele Threads immer wieder an der eigentlich Frage vorbei diskutiert wird. [...]

Nein, dafür gibt es jetzt kein Popcorn. Das ist mir einfach zu schade für sowas.

Zitat von: Wolle02 am 19 Februar 2023, 16:04:42
bin gleich beim at_ultimo hängen geblieben. Das mit dem "unknown command setreading" hab ich übersehen.

q.e.d.


--
Titel: Antw:Kein setreading im at möglich
Beitrag von: frober am 19 Februar 2023, 17:01:31
Zitat von: betateilchen am 19 Februar 2023, 15:57:22
list -r at_ultimo

Bei mir funktioniert das at grundsätzlich,

defmod test_at at *{at_ultimo(23,59,55)} setreading Stromzaehler Bezug180 [MQTT2_DVES_74ED88:MT681_Bezug];; setreading Stromzaehler Einspeisung280 [MQTT2_DVES_74ED88:MT681_Einspeisung]


wenn ich das mit "set test_at execNow" ausführe.
Du hast, das von dir erwähnten doppelte Semikolon, der @dennis_ n hat nur ein einfaches.

Jedoch verstehe ich das gerade auch nicht, wir sind doch nicht in Perl, sondern nach dem at_ultimo wieder in Fhem. Da sollte doch ein einfaches reichen. ::)

Edit: nachgelesen Besonderheit von at, damit beide gleichzeitig ausgeführt werden.
Titel: Antw:Kein setreading im at möglich
Beitrag von: betateilchen am 19 Februar 2023, 17:09:45
Zitat von: frober am 19 Februar 2023, 17:01:31
Du hast das von dir erwähnten doppelte Semikolon

Ja, damit wollte ich lediglich meine eingangs geäußerte Vermutung untermauern :)

Zitat von: frober am 19 Februar 2023, 17:01:31
Edit: nachgelesen Besonderheit von at, damit beide gleichzeitig ausgeführt werden.

Darauf wollte ich am Ende hinaus.
Titel: Antw:Kein setreading im at möglich
Beitrag von: dennis_n am 19 Februar 2023, 17:12:19
Komisch, jetzt kommt auch keine Fehlermeldung mehr im log, aber dennoch werden die Werte aus dem Device nicht übernommen:
Im Screenshot zu sehen die Originalwerte, die aktuell im Device stehen.

Im anderen Screenshot seht ihr die Werte die drinstehen mit timestamp.
Ihr seht also dass da irgendwas geschrieben wird, aber ich weiss nicht woher die Zahlen kommen.

Titel: Antw:Kein setreading im at möglich
Beitrag von: frober am 19 Februar 2023, 17:29:18
Bilder bringen nichts, 2x raw list ist besser geeignet.
Titel: Antw:Kein setreading im at möglich
Beitrag von: dennis_n am 19 Februar 2023, 17:32:29
List vom dummy:

define Stromzaehler dummy
attr Stromzaehler event-on-change-reading .*
attr Stromzaehler readingList Erzeugte_kWh
attr Stromzaehler room Solar
attr Stromzaehler setList Erzeugte_kWh:textField
attr Stromzaehler userReadings Bezug180 {sprintf("%.f",ReadingsNum("Stromzaehler","Bezug_1.8.0",0)) },\
Einspeisung280 {sprintf("%.f",ReadingsNum("Stromzaehler","Einspeisung_2.8.0",0)) }
attr Stromzaehler verbose 5

setstate Stromzaehler 550
setstate Stromzaehler 2023-02-19 17:03:25 Bezug180 1678
setstate Stromzaehler 2023-02-19 17:03:25 Einspeisung280 4965
setstate Stromzaehler 2023-02-04 00:21:52 Erzeugte_kWh 195
setstate Stromzaehler 2023-01-28 15:43:23 state 550


list vom MQTT Device welches mir die Stromwerte ausliest:

define MQTT2_DVES_74ED88 MQTT2_DEVICE DVES_74ED88
attr MQTT2_DVES_74ED88 autocreate 0
attr MQTT2_DVES_74ED88 comment NOTE: For on-for-timer SetExtensions are used. You may add on-for-timer option running on the device. The following is limited to 1h max duration, but will not affect future simple "on" commands:<br>on-for-timer {my $duration = $EVTPART1*10;; 'cmnd/cmnd/tasmota_74ED88/Backlog POWER1 1;; delay '.$duration.';; POWER1 0'}<br>See the "Praxisbeispiele" in the wiki for "pulseTime1" alternative option and it's restrictions.
attr MQTT2_DVES_74ED88 event-on-change-reading MT681_Power_curr,MT681_Total_in,MT681_Total_out
attr MQTT2_DVES_74ED88 icon hue_filled_outlet
attr MQTT2_DVES_74ED88 jsonMap POWER1:0 POWER2:0 POWER3:0 POWER4:0 Dimmer:0 Channel_0:0 Channel_1:0 Channel_2:0 Channel_3:0 Channel_4:0 Channel_5:0 HSBColor:0 Color:0
attr MQTT2_DVES_74ED88 model tasmota_basic_state_power1
attr MQTT2_DVES_74ED88 readingList tele/tasmota_74ED88/LWT:.* LWT\
  tele/tasmota_74ED88/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  tele/tasmota_74ED88/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  tele/tasmota_74ED88/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ?  json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }\
  tele/tasmota_74ED88/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  stat/tasmota_74ED88/POWER1:.* state\
  stat/tasmota_74ED88/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }
attr MQTT2_DVES_74ED88 room Solar
attr MQTT2_DVES_74ED88 stateFormat {sprintf("Zählerstande --> Gesamtbezug: %d kWh, Gesamteinspeisung: %d kWh, aktueller Verbrauch: %d kWh", \
ReadingsVal($name,"MT681_Total_in",0),\
ReadingsVal($name,"MT681_Total_out",0),\
ReadingsVal($name,"MT681_Power_curr",0)\
)}
attr MQTT2_DVES_74ED88 userReadings MT681_Bezug {sprintf("%.f",ReadingsNum("MQTT2_DVES_74ED88","MT681_Total_in",0)) },\
MT681_Einspeisung {sprintf("%.f",ReadingsNum("MQTT2_DVES_74ED88","MT681_Total_out",0)) }

setstate MQTT2_DVES_74ED88 Zählerstande --> Gesamtbezug: 1820 kWh, Gesamteinspeisung: 5120 kWh, aktueller Verbrauch: 37 kWh
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 Heap 20
setstate MQTT2_DVES_74ED88 2023-02-18 19:08:16 IODev mqttBroker
setstate MQTT2_DVES_74ED88 2023-02-18 19:08:35 LWT Online
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 LoadAvg 19
setstate MQTT2_DVES_74ED88 2023-02-14 10:54:01 LogHost
setstate MQTT2_DVES_74ED88 2023-02-14 10:54:01 LogPort 514
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 MT681_Bezug 1821
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 MT681_Einspeisung 5121
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 MT681_Meter_id xxxxxxxxxxxx
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 MT681_Power_curr 37
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 MT681_Total_in 1820.70
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 MT681_Total_out 5120.90
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 MqttCount 4
setstate MQTT2_DVES_74ED88 2023-02-14 10:54:01 MqttLog 0
setstate MQTT2_DVES_74ED88 2023-01-27 20:22:13 SaveData on
setstate MQTT2_DVES_74ED88 2023-02-14 10:54:01 SerialLog_0_Active 0
setstate MQTT2_DVES_74ED88 2023-01-27 20:22:13 SetOption26 on
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 Sleep 50
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 SleepMode Dynamic
setstate MQTT2_DVES_74ED88 2023-01-27 20:22:12 StateText1 off
setstate MQTT2_DVES_74ED88 2023-01-27 20:22:12 StateText2 on
setstate MQTT2_DVES_74ED88 2023-01-27 20:22:12 StateText3 toggle
setstate MQTT2_DVES_74ED88 2023-01-27 20:22:12 StateText4 hold
setstate MQTT2_DVES_74ED88 2023-02-14 10:54:01 SysLog_0_Active 0
setstate MQTT2_DVES_74ED88 2023-02-14 10:54:01 TelePeriod 3600
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 Time 2023-02-19T16:53:58
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 Uptime 22T21:34:30
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 UptimeSec 1978470
setstate MQTT2_DVES_74ED88 2023-02-14 10:54:01 WebLog 2
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 Wifi_AP 1
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 Wifi_BSSId xxxxxx
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 Wifi_Channel 6
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 Wifi_Downtime 0T00:00:04
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 Wifi_LinkCount 1
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 Wifi_Mode 11n
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 Wifi_RSSI 58
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 Wifi_SSId xxxxxx
setstate MQTT2_DVES_74ED88 2023-02-19 16:53:59 Wifi_Signal -71
setstate MQTT2_DVES_74ED88 2023-01-27 20:22:12 attrTemplateVersion 20210523
setstate MQTT2_DVES_74ED88 2023-02-18 19:09:16 subscriptions cmnd/DVES_74ED88_fb/# cmnd/tasmota_74ED88/# cmnd/tasmotas/#
Titel: Antw:Kein setreading im at möglich
Beitrag von: betateilchen am 19 Februar 2023, 17:41:13
Zitat von: dennis_n am 19 Februar 2023, 17:12:19
Im anderen Screenshot seht ihr die Werte die drinstehen mit timestamp.
Ihr seht also dass da irgendwas geschrieben wird, aber ich weiss nicht woher die Zahlen kommen.

Die Kombination aus event-on-change-reading + userReadings + einem at, das die Werte ebenfalls in den dummy schreiben soll, ist einfach gruslig.
Da brauchst Du Dich nicht wundern, wenn da am Ende nicht das rauskommt, was Du erwartest.

Fang doch mal einfach an, bis Du verstanden hast, wie das alles zusammenspielt.
Titel: Antw:Kein setreading im at möglich
Beitrag von: dennis_n am 19 Februar 2023, 17:46:58
Hmm was ist daran so schlimm?

Mit event-on-change will ich das Logfile nicht unnötig aufblähen. Daher die Abgrenzung der Readings, weil mich nur diese interessieren.
Userreadings benutze ich, weil ich die Werte ohne Kommastellen haben möchte. Daher schreibe ich mir die Werte in ein neues Reading aber eben ohne Kommastellen.

Und das at soll sich dann dieser Werte bedienen.

Ich könnte ja auch mit dem at direkt auf die Werte MT681_Total_in usw, zugreifen. Aber dann habe ich die Nachkommastellen und die will ich nicht.

Gruss
Dennis
Titel: Antw:Kein setreading im at möglich
Beitrag von: frober am 19 Februar 2023, 17:50:32
Das userReadings stimmt nicht, du ließt Werte, die es nicht gibt und schreibst diese in die zuvor über setreading gesetzten readings.
Titel: Antw:Kein setreading im at möglich
Beitrag von: betateilchen am 19 Februar 2023, 17:50:56
Zitat von: dennis_n am 19 Februar 2023, 17:46:58
Hmm was ist daran so schlimm?

oje...

Zitat von: dennis_n am 19 Februar 2023, 17:46:58
Ich könnte ja auch mit dem at direkt auf die Werte MT681_Total_in usw, zugreifen. Aber dann habe ich die Nachkommastellen und die will ich nicht.

Das ist Unsinn, man kann auch im at ohne die Nachkommastellen arbeiten.
Titel: Antw:Kein setreading im at möglich
Beitrag von: dennis_n am 19 Februar 2023, 17:52:09
ja ok, habe den Fehler mit den Userreadings gefunden  ::)
Titel: Antw:Kein setreading im at möglich
Beitrag von: betateilchen am 19 Februar 2023, 18:02:50
Zitat von: dennis_n am 19 Februar 2023, 17:46:58
Userreadings benutze ich, weil ich die Werte ohne Kommastellen haben möchte. Daher schreibe ich mir die Werte in ein neues Reading aber eben ohne Kommastellen.


ReadingsNum("MQTT2_DVES_74ED88","MT681_Total_out",0,0)
                                                   ^^


rundet übrigens auf 0 Nachkommastellen, ganz ohne den Umweg mit sprintf()