FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: atze2010 am 22 Dezember 2017, 18:32:27

Titel: DOIF Ausführungsteil
Beitrag von: atze2010 am 22 Dezember 2017, 18:32:27
Hallo,

trotz WIKI lesen: ich komm einfach nicht drauf:

in einem DOIF möchte ich als Ausführung die aktuelle Zeit in einem Dummy setzen. Meine (erfolglosen) Versuche:

define di_test01 DOIF ([Test01_Motion:motion] ) (set testdummy strftime('%d.%m. %H:%M:%S', localtime))
define di_test01 DOIF ([Test01_Motion:motion] ) (set testdummy {strftime('%d.%m. %H:%M:%S', localtime)})

Wie kann ich die Fhem-Anweisung richtig mit dem Perl-Ausdruck kombinieren?
Vielen Dank UweK.
Titel: Antw:DOIF Ausführungsteil
Beitrag von: Damian am 22 Dezember 2017, 18:44:20
Zitat von: atze2010 am 22 Dezember 2017, 18:32:27
Hallo,

trotz WIKI lesen: ich komm einfach nicht drauf:

in einem DOIF möchte ich als Ausführung die aktuelle Zeit in einem Dummy setzen. Meine (erfolglosen) Versuche:

define di_test01 DOIF ([Test01_Motion:motion] ) (set testdummy strftime('%d.%m. %H:%M:%S', localtime))
define di_test01 DOIF ([Test01_Motion:motion] ) (set testdummy {strftime('%d.%m. %H:%M:%S', localtime)})

Wie kann ich die Fhem-Anweisung richtig mit dem Perl-Ausdruck kombinieren?
Vielen Dank UweK.

zuerst Commandref lesen, dann Wiki:

https://fhem.de/commandref_DE.html#DOIF_Berechnungen_im_Ausfuehrungsteil
Titel: Antw:DOIF Ausführungsteil
Beitrag von: atze2010 am 22 Dezember 2017, 18:54:56
ja das hatte ich auch gelesen und daraufhin meine Variante2 mit
define di_test01 DOIF ([Test01_Motion:motion] ) (set testdummy {strftime('%d.%m. %H:%M:%S', localtime)})
die aber auch nicht funktioniert.
Titel: Antw:DOIF Ausführungsteil
Beitrag von: Gisbert am 22 Dezember 2017, 18:55:32
Hallo Uwe,

zuerst eine Frage: was willst du mit dem Dummy anstellen?

Wenn es dir darum geht bei einem Device einen Zeitstempel eines Readings zu erzeugen, dann kannst Du das direkt im Device erzeugen:
attr Device userReadings Zeitstempel {substr(ReadingsTimestamp('Device','Reading',''),0,19)}
Dies erzeugt das neue Reading Zeitstempel im Format YYYY-MM-TT hh:mm:ss; "11,8" erzeugt ein Ergebnis im Format hh:mm:ss.
Du kannst dieses Reading und ggf. weitere mit dem Attribut stateformat anzeigen lassen; für das Reading Zeitstempel sieht es so aus:
attr Device stateFormat Zeitstempel
Device und Reading sind natürlich auf deinen Fall zu ändern.

Unter Umständen geht das Anzeigen eines Zeitstempels auch einfacher als das gezeigte Beispiel.
Mit dem Reading kannst Du dann wie mit jedem anderen Reading arbeiten, z.B. in einem notify oder DOIF abfragen.

Viele Grüße Gisbert
Titel: Antw:DOIF Ausführungsteil
Beitrag von: Damian am 22 Dezember 2017, 19:04:41
Zitat von: atze2010 am 22 Dezember 2017, 18:54:56
ja das hatte ich auch gelesen und daraufhin meine Variante2 mit
define di_test01 DOIF ([Test01_Motion:motion] ) (set testdummy {strftime('%d.%m. %H:%M:%S', localtime)})
die aber auch nicht funktioniert.


ZitatBerechnungen können in geschweiften Klammern erfolgen. Aus Kompatibilitätsgründen, muss die Berechnung unmittelbar mit einer runden Klammer beginnen. Innerhalb der Perlberechnung können Readings, Status oder Internals wie gewohnt in eckigen Klammern angegeben werden.

Anwendungsbeispiel: Es soll ein Vorgabewert aus zwei verschiedenen Readings ermittelt werden und an das set Kommando übergeben werden:

define di_average DOIF ([08:00]) (set TH_Modul desired {([default:temperature]+[outdoor:temperature])/2})
attr di_average do always

define di_test01 DOIF ([Test01_Motion:motion] ) (set testdummy {(strftime('%d.%m. %H:%M:%S', localtime))})
Titel: Antw:DOIF Ausführungsteil
Beitrag von: atze2010 am 22 Dezember 2017, 19:26:55
Hallo Damian, ja genau das wars mit den extra runden Klammern - danke.
Danke auch an Gisbert, der Dummy sollte einfach nur zu Testzwecken da sein, wollte dort auf die schnelle sehen was wann passiert.