Leider habe ich kein wirklich passendes Thema gefunden, wo ich mich anhängen kann.
Ich schaffe es, aus FHEM heraus meine Werte für Temperatur und Luftfeuchtigkeit in der CCU3 zu setzen (per HMCCU)
set myCCU var CUxD.CUX9002001:1.SET_TEMPERATURE 20.1
set myCCU var CUxD.CUX9002001:1.SET_HUMIDITY 91
Jetzt möchte ich aber einen Notify erstellen, der mir die Werte automatisch bei Änderung an die CCU schickt.
Das ist mein kläglicher Versuch, der nicht klappt.
define nt.Tmp_T4 notify (TMP_T4.*) {\
fhem ('myCCU var CUxD.CUX9002001:1.SET_TEMPERATURE ' .$EVTPART1);;\
}
Wie komme ich an die Werte für Temperatur und Luftfeuchte meines Sensors, um die zur CCU zu schicken ?
Im Eventlog kommen die Meldungen für den Temperatur-Sensor in dieser Form:
2022-11-04 14:04:57 TRX_WEATHER Tmp_T4 T: 18.9 H: 66 BAT: ok
Vielen Dank
Gib mal bitte ein list vom Tmp_T4 Device. Bin mir sicher das nicht nur das eine Reading kommt. Das scheint ja das state Reading zu sein. Da gibt es auch noch temperature und humidity bestimmt. Und dann musst Du Deine RegEx setzen.
define nt.Tmp_T4 notify TMP_T4:(temperature|humidity):.*
Und im Notify weiter auswerten
Zitat von: JueFi am 04 November 2022, 14:24:21
Jetzt möchte ich aber einen Notify erstellen, der mir die Werte automatisch bei Änderung an die CCU schickt.
Hi,
Tipp: die einfachste Vorgehensweise ist mit Hilfe vom Eventmonitor.
https://wiki.fhem.de/wiki/Event_monitor
Danach kann man optimieren ;)
Gruß Otto
Vielen Dank euch beiden.
So läuft es jetzt:
Ich habe noch per "Log" eine Debug-Hilfsausgabe ins Logfile eingefügt, die kann natürlich raus.
Und nicht wundern, ich habe einen anderen Sensor benutzt zum Testen (Tmp_T2, statt wie oben Tmp_T4, ist aber der gleiche Typ)
define nt.Tmp_T2 notify (Tmp_T2.*) {\
my $temperature = ReadingsNum("Tmp_T2","temperature",10);;\
my $humidity = ReadingsNum("Tmp_T2","humidity",10);;\
Log 3, "$NAME: CCU Temperatur: $temperature";;;;\
Log 3, "$NAME: CCU Humidity: $humidity";;;;\
fhem ('set myCCU var CUxD.CUX9002001:1.SET_TEMPERATURE ' .$temperature);;\
fhem ('set myCCU var CUxD.CUX9002001:1.SET_HUMIDITY ' .$humidity);;\
}
Das Suchmuster ist "nicht schön" prüf mal:
{notifyRegexpCheck('(Tmp_T2.*)')}
das belastet das System unnötig.
Sorry bin nicht so fit.
Statt
define nt.Tmp_T2 notify (Tmp_T2.*) {\
soll ich
define nt.Tmp_T2 {notifyRegexpCheck('(Tmp_T2.*)')} {\
probieren ?
Zitat von: JueFi am 05 November 2022, 11:03:47
define nt.Tmp_T2 {notifyRegexpCheck('(Tmp_T2.*)')} {\
probieren ?
Nein, das war so nicht gemeint.
Du solltest das in der Kommandozeile von FHEM schreiben. Die Ausgabe zeigt Dir dann an, auf welche devices Dein notify reagiert.
Zur Probe kannst Du ja mal eingeben:
{notifyRegexpCheck('(Tmp_T2:temperatue:.*)')}
Die Verbesserung bzw. das Schärfen des Triggers meinte Otto und zwar zu:
define nt.Tmp_T2 notify Tmp_T2:temperature:.*)
Zitat von: JueFi am 05 November 2022, 11:03:47
Sorry bin nicht so fit.
nein! Du sollst diesen Code mal in die FHEM Kommandozeile werfen und die Ausgabe versuchen zu verstehen.
Vor allem ist Dein Suchmuster nicht optimal! Die Klammern sind so unnütz und es es fehlt die Trennung Gerätename:Event.
https://fhem.de/commandref_modular_DE.html#notify
Dein Suchmuster lässt das notify auf jeden Event triggern!
Und ich will Dir zeigen wie Du fitter wirst, also lies bitte den Link oben zum Wiki und verstehe ihn.
{notifyRegexpCheck('TMP_":temperatue:.*|TMP_2:humidity:.*')}
Bei Dir dann
define nt.Tmp_T2 notify TMP_2:temperatue:.*|TMP_2:humidity:.*
Finde ich aber zu viel geschrieben. Geht auch anders.
define nt.Tmp_T2 notify TMP_T2:(temperature|humidity):.*
Vielen Dank für eure Hilfe
{notifyRegexpCheck('(Tmp_T2.*)')}
in der Commandozeile ergibt diese Ausgabe
(Tmp_T2.*): devspec Tmp_T2 (OK)
reagiert also auf Änderungen im Device Tmp_T2, genau das will ich ja.
Wenn ich
define nt.Tmp_T2 notify Tmp_T2:temperature:.*)
verwende, wird ja eine Änderung in "Humidity" nicht getriggert. Dann müsste ich ein zweites Notify aufsetzen, denke ich. Bringt das wirklich einen Vorteil ?
EDIT: Oder so wie CoolTux vorschlägt, das klingt gut.
ZitatUnd ich will Dir zeigen wie Du fitter wirst, also lies bitte den Link oben zum Wiki und verstehe ihn.
Gelesen habe ich, verstanden ... leider bei weitem nicht.
Schau Dir bitte noch mal mein Post eins über Deinen letzten an
Zitat von: JueFi am 05 November 2022, 11:49:41
verwende, wird ja eine Änderung in "Humidity" nicht getriggert. Dann müsste ich ein zweites Notify aufsetzen, denke ich. Bringt das wirklich einen Vorteil ?
Nö, das geht auch in einem notify:
define nt.Tmp_T2 notify Tmp_T2:(temperature|humidity):.*
Edit: CoolTux war schneller.....
Das wird der Thread der schludrigen Klammern ::) ;D
Also das ist die Variante für schreibfaule
define nt.Tmp_T2 notify Tmp_T2:(temperature|humidity):.* {}
Soweit ich weiß, ist die Variante besser fürs System:
define nt.Tmp_T2 notify Tmp_T2:temperature:.*|Tmp_T2:humidity:.* {}
Die gewünschten Werte stehen dann auch schon im $EVENT ($EVTPART1) man kann sich ReadingsNum() sparen. Mit etwas Geschick kann man den Code auch generalisieren. Der erste Ansatz im ersten Beitrag abgewandelt:
fhem ('set myCCU var CUxD.CUX9002001:1.SET_'.uc($EVTPART0).' '.$EVTPART1)
Gruß Otto
Wie es aussieht ist die Realität leider doch anders ...
Es kommen nur diese Events von den Thermometern
Events (Filter: Tmp_T2.*)
2022-11-05 16:53:58 TRX_WEATHER Tmp_T2 T: 17.8 H: 56 BAT: ok
2022-11-05 16:54:39 TRX_WEATHER Tmp_T2 T: 17.9 H: 57 BAT: ok
2022-11-05 16:56:01 TRX_WEATHER Tmp_T2 T: 18 H: 56 BAT: ok
2022-11-05 16:57:23 TRX_WEATHER Tmp_T2 T: 18.2 H: 60 BAT: ok
2022-11-05 16:58:04 TRX_WEATHER Tmp_T2 T: 19.3 H: 71 BAT: ok
2022-11-05 16:58:45 TRX_WEATHER Tmp_T2 T: 19 H: 70 BAT: ok
2022-11-05 16:59:26 TRX_WEATHER Tmp_T2 T: 19.3 H: 78 BAT: ok
2022-11-05 17:00:07 TRX_WEATHER Tmp_T2 T: 19.3 H: 80 BAT: ok
2022-11-05 17:00:48 TRX_WEATHER Tmp_T2 T: 19.2 H: 79 BAT: ok
2022-11-05 17:01:29 TRX_WEATHER Tmp_T2 T: 19.1 H: 76 BAT: ok
2022-11-05 17:02:10 TRX_WEATHER Tmp_T2 T: 19 H: 75 BAT: ok
2022-11-05 17:02:51 TRX_WEATHER Tmp_T2 T: 19 H: 72 BAT: ok
2022-11-05 17:03:32 TRX_WEATHER Tmp_T2 T: 18.9 H: 71 BAT: ok
2022-11-05 17:04:13 TRX_WEATHER Tmp_T2 T: 18.9 H: 69 BAT: ok
D.h. ja dann, ich muss den Notify auf notify Tmp_T2.*
setzen, wenn ich das richtig sehe.
Trotzdem vielen Dank für Eure Mühe
Viele Grüße
Jürgen
zeig mal ein list Tmp_T2
Internals:
CODE THGR228N_9e_2
DEF THGR228N_9e_2
FUUID 5cf2bdc9-f33f-751b-9219-087753a97443d1ce
IODev TRX_0
LASTInputDev TRX_0
MSGCNT 458
NAME Tmp_T2
NR 82
STATE T: 18.7 H: 60 BAT: ok
TRX_0_MSGCNT 458
TRX_0_RAWMSG 0a5201af9e0200bb3c0059
TRX_0_TIME 2022-11-05 17:19:56
TYPE TRX_WEATHER
eventCount 75
READINGS:
2022-11-05 11:59:18 IODev TRX_0
2022-11-05 17:19:56 battery ok
2022-11-05 17:19:56 batteryState ok
2021-09-25 21:17:38 battery_warning 1632597458.32888
2022-11-05 17:19:56 humidity 60
2022-11-05 17:19:56 state T: 18.7 H: 60 BAT: ok
2022-11-05 17:19:56 temperature 18.7
Attributes:
IODev TRX_0
alias Tmp_T2_Schlafen
event-min-interval state:900
event-on-change-reading state
group Dash-Temperatur
room Temperaturen
EDIT: und das Define
define Tmp_T2 TRX_WEATHER THGR228N_9e_2
setuuid Tmp_T2 5cf2bdc9-f33f-751b-9219-087753a97443d1ce
attr Tmp_T2 IODev TRX_0
attr Tmp_T2 alias Tmp_T2_Schlafen
attr Tmp_T2 event-min-interval state:900
attr Tmp_T2 event-on-change-reading state
attr Tmp_T2 group Dash-Temperatur
attr Tmp_T2 room Temperaturen
define FileLog_Tmp_T2 FileLog ./log/Tmp_T2-%Y.log Tmp_T2
setuuid FileLog_Tmp_T2 5cf2bdc9-f33f-751b-79b6-75882026dbe2063e
attr FileLog_Tmp_T2 logtype temp4hum4:Temp/Hum,text
attr FileLog_Tmp_T2 room Temperaturen
define SVG_Tmp_T2 SVG FileLog_Tmp_T2:SVG_Tmp_T2:CURRENT
setuuid SVG_Tmp_T2 5cf2bdc9-f33f-751b-02f4-bb10e449c46f464f
attr SVG_Tmp_T2 label "Tmp_T2 Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr SVG_Tmp_T2 room Plots
EDIT2: Ich sehe es schon - aber so wollte ich das im LOG, um es Plotten zu können - ist alles lange her ...
event-on-change-reading state
Damit sollte es funktionieren:
attr Tmp_T2 event-on-change-reading state,temperature,humidity
Und das Log bleibt wie es ist.
attr FileLog_Tmp_T2 ignoreRegexp Tmp_T2:humidity:.*|Tmp_T2:temperature:.*
Gibt wohl nichts, was du nicht hinbekommst ;)
Dankeschön :D