Hauptmenü

DOIF Ausführungsteil

Begonnen von atze2010, 22 Dezember 2017, 18:32:27

Vorheriges Thema - Nächstes Thema

atze2010

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.

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

atze2010

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.

Gisbert

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
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Damian

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))})
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

atze2010

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.