Aktuelles Datum und Uhrzeit durch Notify in setReading

Begonnen von Grml, 24 April 2019, 13:13:15

Vorheriges Thema - Nächstes Thema

Grml

Hallo zusammen,

Ich habe ein Dummy-Device. Das hat als states "scharf"/"unscharf". Wenn meine Alarmanlage scharf geschaltet wird bekommt das Dummy-Device den Wert "scharf" (set AlarmanlageDummy scharf). Sobald das Dummy diesen Wert hat rennt ein Notify los und soll in diesem Dummy ein Reading "last_set" anlegen (setReading). Gefüllt werden soll das mit aktuellem Datum und Uhrzeit. Gleiches wenn die Alarmanlage deaktiviert wird ("unscharf"). Dann rennt ein anderes Notify los.

Meine beiden Readings "last_set" und "last_unset" bekomme ich per setReading an das Dummy angepappt (ausgelöst durch die Notifys). Aber wie lese ich denn auf einfach Weise die aktuelle Uhrzeit (inkl. Datum) aus um sie in dem Notify dem setReading mitzugeben? Egal welche Kombination ich bislang mit localtime() versucht habe, nichts hat funktioniert. in meinem Reading last_set/last_unset steht dann einfach nur (bspw.) "{fhem localtime()} (bzw. welche Variante ich halt gerade probiere).

Wie komme ich am schnellsten und einfachsten auf das aktuellste Datum und Uhrzeit um sie per setReading als Wert/String zu setzen?

(Ziel ist ist nachher nur, die Readings per MQTT weiterzuschicken und sie über Node Red anzeigen zu lassen).


Nachtrag: Die setReadings bekommen im System ja automatisch das aktuelle Datum und Zeit in der letzten Spalte wenn sie gesetzt werden (so wie ich das sehe). Kann ich die einfach irgendwie abgreifen und per MQTT weiterschicken (Modul MQTT_Bridge und Mosquitto)? Dann wäre mir egal was als Wert im setReading steht...

betateilchen

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

Beta-User

Noch weitergehend:
Warum erst den Dummy dazwischenschaten und nicht gleich EIN notify auf die Alarmanlage legen, das dann direkt den publish über das MQTT-IO macht (geht mit allen IO-Varianten). Dann kannst du gleich den ReadingsTimestamp (von Alarmanlage->state) verwenden...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Grml

Zitat von: betateilchen am 24 April 2019, 13:15:08
$today und $hms helfen Dir weiter.
Wenn ich die auf der Kommandozeile aufrufe ja. Aber in meinem Notify (um die Rückgabe in einem anderen Device als setreading zu setzen) nicht.

DEF des Notify
Alarmanlage.Status:Scharf setreading Alarmanlage.Status.SetUnset last_set {$today." ".$hms}

Das Notify funktioniert. Denn: Wenn das Device "Alarmanlage.Status" im State "Scharf" bekommt, triggert es brav. Schreibt dann aber in das Reading "last_set" im Device "Alarmanlage.Status.SetUnset" nur {$today." ".$hms} rein. Also exakt diesen String. Nicht das, was als Wert zurückkommen sollte (wie es das über die Kommandozeile tut)

Zitat von: Beta-User am 24 April 2019, 13:20:16
Noch weitergehend:
Warum erst den Dummy dazwischenschaten und nicht gleich EIN notify auf die Alarmanlage legen, das dann direkt den publish über das MQTT-IO macht (geht mit allen IO-Varianten). Dann kannst du gleich den ReadingsTimestamp (von Alarmanlage->state) verwenden...
Weil mir das im Moment noch zu hoch ist ;-) Ich hab auch das die letzte Stunde versucht, bin aber krachend gescheitert. Das verstehe ich alles noch nicht. Das ReadingsTimestamp sieht zwar gut aus, aber ich bekomme von dem Ding außer Fehlermeldung noch gar nichts zurück. Deshalb würde ich erst gerne die erste Variante probieren um überhaupt mal was zu haben.

Otto123

#4
Hi Grml,

schau mal -> https://commandref.fhem.de/#set

Dort steht ->
Zitat{(perlExpression)} with the result of perlExpression. The $DEV variable is additionally available, designating the set device name.
These replacements are also known as "set magic".

Also dies sollte klappen :)
Alarmanlage.Status:Scharf setreading Alarmanlage.Status.SetUnset last_set {($today." ".$hms)}

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Grml

Zitat von: Otto123 am 24 April 2019, 18:20:24
Hi Grml,

schau mal -> https://commandref.fhem.de/#set

Dort steht ->
Also dies sollte klappen :)
Alarmanlage.Status:Scharf setreading Alarmanlage.Status.SetUnset last_set {($today." ".$hms)}

Gruß Otto

Ohhhhhhh man... Das ists! Kaum sind die runden Klammern drumrum funktionierts. Vielen, vielen Dank!

Beta-User

Zitat von: Grml am 24 April 2019, 18:14:03
Weil mir das im Moment noch zu hoch ist ;-) Ich hab auch das die letzte Stunde versucht, bin aber krachend gescheitert. Das verstehe ich alles noch nicht. Das ReadingsTimestamp sieht zwar gut aus, aber ich bekomme von dem Ding außer Fehlermeldung noch gar nichts zurück. Deshalb würde ich erst gerne die erste Variante probieren um überhaupt mal was zu haben.
Mal ein ungetesteter Pseudo-Code (für die DEF eines der notify, das zweite sollte überflüssig werden, die Angaben in den <...> sind noch anzupassen, kann auch sein, das die $message so noch nicht funktioniert):
Alarmanlage.Status:(Uns|S)charf {\
my $message = "$today $hms";\
if($EVENT eq "open" ) {\
  CommandSet(undef,"<name-MQTT-Def> publish "<base>/Alarmanlage/Alarmanlage.Status/last_set $message");\
} else {\
  CommandSet(undef,"<name-MQTT-Def> publish "<base>/Alarmanlage/Alarmanlage.Status/last_unset $message");\
}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Docter

da würde ich mich gern mal reinhängen...

ich versuche eine Reading zu schreiben, und dazu den aktuellen TimeStamp zu nutzen:

([00:01-23:59,+:10])
(setreading TADO_Winter_Target_Unten_SZ {($today." ".$hms)} manual [TADO2:DesiredTemp_SZ])
(setreading TADO_Winter_Target_Unten_SZ 2020-10-19 12:46:27 actual [TADO2:Temperatur_SZ])

Also so wie unten, aber eben den aktuellen. Ich bekomme es aber einfach nicht hin.

Danke

betateilchen

Zitat von: Docter am 19 Oktober 2020, 14:07:06
ich versuche eine Reading zu schreiben, und dazu den aktuellen TimeStamp zu nutzen:

wenn Du den aktuellen TimeStamp haben möchtest, lass die Zeitangabe bei setreading einfach weg.

Aber ob diese Frage es wert war, einen 1,5 Jahre alten Thread auszugraben?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

gvzdus

Wer gegen Textilverschwendung ist, sollte Threads recyclen :-) Dieser Thread ist mein Google-Firsthit ("FHEM setreading mit Zeit").
Nur möchte ich etwas anderes: Ich möchte mein "setreading" mit einem historischen Zeitstempel setzen.

Warum?
Mein SML-Stromzähler / ein Shelly liefert mir einen Momentanwert, der ab sofort gilt: Springt z.B. eine Heizung an, feuert der Shelly sofort mit dem neuen Lastwert.
Meinen SolarEdge-Wechselrichter kann ich nur in Intervallen auslesen, und muss die Leistung in Watt rückwirkend setzen. Also Zählerstand Jetzt - Zählerstand vor 60 Sekunden = WattSekunden / Zeit = Watt.
Im Graphen & Co. sind diese Werte nun versetzt. Daher möchte ich das Reading "Solarleistung" mit dem Zeitstempel von vor 1 Minute setzen und loggen.

Geht das? Und wenn ja, ist es unethisch, weil damit die Eventverarbeitung durcheinanderkäme? Wenn ich es richtig sehe, könnte man das dadurch ertricksen, indem man am Ende des letzten Zyklus bereits ein neues "ReadingBulkUpdate" holt, und erst eine Minute später dieses verwendet. Ist aber doch ziemlich hintenrum...

Beta-User

Ist wohl eher der falsche forenbereich, aber evtl. hilft der Hinweis, dass rbu einen wenig bekannten weiteren Parameter kennt, siehe https://svn.fhem.de/trac/browser/trunk/fhem/fhem.pl#L4849...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors