Kein setreading im at möglich

Begonnen von dennis_n, 19 Februar 2023, 15:09:02

Vorheriges Thema - Nächstes Thema

dennis_n

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

betateilchen

Poste mal bitte ein vollständiges raw list des at device.
Vermutlich fehlt da ein doppelter Strichpunkt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

dennis_n

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

betateilchen

#3
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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Wolle02

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?

betateilchen

#5
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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Wolle02

Ah ja. Ich bin gleich beim at_ultimo hängen geblieben. Das mit dem "unknown command setreading" hab ich übersehen.

betateilchen

#7
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.


--
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

frober

#8
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.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

dennis_n

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.


frober

Bilder bringen nichts, 2x raw list ist besser geeignet.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

dennis_n

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/#

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

dennis_n

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