DOIF neue Features: Generalisierung, $DEVICE, $EVENT, Attribut notexist

Begonnen von Damian, 28 Dezember 2015, 22:06:42

Vorheriges Thema - Nächstes Thema

RoBra81

Hallo,

Die  ; müssen maskiert werden, das heißt, suchen nach ; und ersetzen durch ;; - geht u. A. mit RegEx, müsste ich aber erstmal raussuchen (bin gerade nur an Handy)

Ronny

Gesendet von meinem SM-G935F mit Tapatalk


JoeALLb

Zitat von: RoBra81 am 22 März 2017, 18:41:45
Die  ; müssen maskiert werden, das heißt, suchen nach ; und ersetzen durch ;; - geht u. A. mit RegEx, müsste ich aber erstmal raussuchen (bin gerade nur an Handy)

Hallo Ronny, danke für die Idee, das hatte ich schon versucht doch die Fehlermeldung bleibt die selbe....
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Ellert

Zitat von: JoeALLb am 22 März 2017, 18:01:48
Nein. Danke für die Hilfe! Übernommen wird bis zum ersten ;

dummy1:userReadings sieht in etwa so aus;
desired-manual:(desired-temp|controlMode|set_desired-temp).* {
my $tempProfile="";
my $wTagN = strftime('%w', localtime);
}


in
dummy2:userReadings kommt dann folgendes an:
desired-manual:(desired-temp|controlMode|set_desired-temp).* {
my $tempProfile="";

Hier stimmt ja schon die normale Klammerprüfung nicht.

im DOIF- "error" erhalte ich damit:
{fhem("attr dummy2 userReadings ".AttrVal("dummy1","userReadings",""))}: Unknown command my, try help.

Bei mehr Zeilen wiederholt sich das "Unknown command my, try help", so als ob jede zeile einzeln ausgeführt wird?!?

Hast Du noch eine weitere Idee dazu?

sG
joe
Gibt es auch eine Fehlermeldung, wenn Du {fhem("attr dummy2 userReadings ".AttrVal("dummy1","userReadings",""))} in der Befehlszeile ausführst? Wenn ja, dann ist es kein DOIF Problem.

Eventuell müssen die Anführungszeichen und Zeilenumbrüche im Code maskiert werden.

JoeALLb

Zitat von: Ellert am 23 März 2017, 23:04:52
Gibt es auch eine Fehlermeldung, wenn Du {fhem("attr dummy2 userReadings ".AttrVal("dummy1","userReadings",""))} in der Befehlszeile ausführst? Wenn ja, dann ist es kein DOIF Problem.
Eventuell müssen die Anführungszeichen und Zeilenumbrüche im Code maskiert werden.

Vielen Dank für die Hilfe!!

Ja, die selbe Fehlermeldung. kann ich den Wert aus der fhem.cfg irgendwie direkt auslesen? Dieser müsste ja das korrekte Encoding schon haben.
Wenn ich selbst ein Encoding versuche umzusetzen, habe ich die Sorge, etwas zu vergessen bzw. ein unvollständiges Encoding zu schreiben.....
Oder kann ich irgendwo direkt auf das Encoding zugreifen, dass dher fhem-editor selbst nutzt?


sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Ellert

Du könntest versuchen direkt im %attr-Hash zu kopieren, ist aber nicht empfohlen, s. https://wiki.fhem.de/wiki/DevelopmentModuleIntro#Attribute

Oder Du fragst im entsprechenden Forenbereich nach.

Gisbert

Hallo zusammen,

ich versuche $DEVICE einzusetzen, scheitere aber bei der Umsetzung.
Ich habe mich im commandref und Forum belesen, finde aber nicht heraus, was ich falsch mache.

Ich habe verschiedene Devices, die ein Reading "Zeitstempel" haben.
Ich möchte Meldungen generieren, die mir eine Nachtricht zusenden, wenn die Zeitspanne eines Readings älter als 120 Sekunden ist.
Es kommen gar keine Nachrichten, nicht mal verstümmelte.

define Sensor.Aktualitaet DOIF ([+:02] and [":^Zeitstempel$"] and [$DEVICE:Zeitstempel:sec] > 120)
((set Pushover.Nachricht msg 'Sensor außer Betrieb' '$DEVICE:\n[$DEVICE:Zeitstempel]'))
((set PushNotifier.Nachricht message Sensor außer Betrieb_$DEVICE:_[$DEVICE:Zeitstempel]))
(set Pushbullet.Nachricht message $DEVICE: [$DEVICE:Zeitstempel] | Sensor außer Betrieb)


Warum bekomme ich keine Nachrichten?

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Gisbert

Hallo,

zur Ergänzung, so sieht ein Reading "Zeitstempel" aus:
defmod Heizung MQTT_DEVICE DS18B20
setstate Heizung 2017-09-23 16:05:19 Zeitstempel 2017-09-23 16:05:19

Kann es sein, dass die Zeitspanne bei Verwendung des obigen Readings nicht richtig dargestellt wird bzw. verarbeitet wird?

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

CoolTux

Nimm mal die +2 bitte erstmal raus. Mir kommt das seltsam vor. Kann mir nicht vorstellen das beides wahr sein kann. Also Event Zeitstempel und gleichzeitig die plus 2
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

amenomade

Genau. Und noch weniger, dass die 3 gleichzeitig wahr sind:
[+:02] in 2 Minuten
[":^Zeitstempel$"] ein "Zeitstempel Event
[$DEVICE:Zeitstempel:sec] > 120) der vor mehr als 2 Minuten passiert ist
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

CoolTux

Und do always setzen.
Hier sollte doch eine Abfrage reichen

[?$DEVICE:Zeitstempel:sec] > 120)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

amenomade

Die beiden letzten können auch nicht gleichzeitig wahr sein, egal ob mit ? oder nicht.

Sagen wir mal, das Event "Zeitstempel" kommt um 17:00:00

[":^Zeitstempel$"] ist um 17:00:00 wahr
[?$DEVICE:Zeitstempel:sec] > 120 ist um 17:00:00 nicht wahr da dann :sec = 0
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Gisbert

Hallo anemonade und Leon,

vielen Dank für euren Input.

Ich fürchte auch, dass kein Event zustande kommt (zumindest nicht mit der Generalisierung $DEVICE), da die Sensoren sich dann ja aufgehangen haben oder aus irgeneinem Grund keine Daten mehr nach Fhem liefern.
Eure Vorschläge habe ich ausprobiert, ohne Erfolg.
Do always war schon vorher gesetzt.

Was funktioniert, ist folgendes, was ich aber für jedes Device einzeln angelegt habe.
Ich dachte ich könnte mir mit der Generalisiserung $DEVICE einige Zeilen Code ersparen.

define SensorAktualitaet DOIF ([+:02] and ReadingsAge("Heizung","Zeitstempel","") > 120)
((set Pushover.Nachricht msg 'Sensor außer Betrieb' 'Heizung:\n[Heizung:Zeitstempel]'))
((set PushNotifier.Nachricht message Sensor außer Betrieb_Heizung:_[Heizung:Zeitstempel]))
(set Pushbullet.Nachricht message Heizung: [Heizung:Zeitstempel] | Sensor außer Betrieb)


Falls ihr noch eine Idee habt, dann teste ich gerne.

Viele Grüße Gisbert

Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Gisbert

Hallo Damian,

Attribut resetwait statt always: kein Erfolg
Ich hatte noch ein Attribut wait, welches ich auf Null gesetzt habe: kein Erfolg

Die Abfrage [":^Zeitstempel$"] alleine ohne irgendeine weitere Bedingung liefert keine Nachrichten, sehr merkwürdig.
Wenn ich die Bedingung [":Zeitstempel"] benutze, kommen im Halbsekunden-Takt Nachrichten herein.

Benutze ich [":Zeitstempel"] und irgendeine weitere Bedingung z.B. [?$DEVICE:Zeitstempel:sec] > 60, bekomme ich keinerlei Meldung.
Die letztere Bedingung war nachweislich erfüllt.

Ich habe diesen Beitrag gelesen, Ausfallerkennung von Sensoren:
https://forum.fhem.de/index.php/topic,63223.msg544611.html#msg544611
Dort wird geraten: Funktion vor Schönheit - ich werde diesen Rat beherzigen, da sich kein Erfolg bei der Generalisierung einstellen will.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Damian

1) [":^Zeitstempel$"] kann schon deswegen nicht funktionieren, da hinter Zeitstempel ja noch was kommt ;)

daher wäre hier [":^Zeitstempel"] besser.

2) [":^Zeitstempel"] and [?$DEVICE:Zeitstempel:sec] > 60 macht keinen Sinn, da zum Triggerzeitpunkt [?$DEVICE:Zeitstempel:sec] gleich Null ist.

3) Wait-Attribut mit do resetwait, macht nur bei konkreten Deviceangaben Sinn, da DOIF nur einen Wait-Timer verwaltet und nicht mehrere. Hier ist Generalisierung für mehrere Devices mit wait nicht möglich

4) Du musst entweder pro Device, wie im Anwendungsbeispiel ein DOIF definieren, oder du generalisierst mit einem DOIF in Kombination mit sleep bzw. at, wie in diesen Beispielen:

ZitatVerzögerte "Fenster offen"-Meldung

define di_window_open DOIF ["^window_:open|tilted"])
(defmod at_$DEVICE at +00:05 set send window $DEVICE open)
DOELSEIF (["^window_:closed"])
(delete at_$DEVICE)

attr di_window_open do always

Alternative mit sleep

define di_window_open DOIF ["^window_:open|tilted"])
(sleep 300 $DEVICE quiet;set send window $DEVICE open)
DOELSEIF (["^window_:closed"])
(cancel $DEVICE quiet)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF