FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Charity am 01 Januar 2014, 19:18:27

Titel: Fenster Sensor eines FHT's auslesen
Beitrag von: Charity am 01 Januar 2014, 19:18:27
Hallo zusammen,

ich würde gerne den Fenster Sensor eines FHT80b auslesen um einen Dummy auf "offen" oder "zu" setzen zu können.

Der FHT ist wie folgt definiert


## Heizung
define SZ_Heizung FHT 3834
attr SZ_Heizung alias Schlafzimmer Heizung
attr SZ_Heizung fm_type temperature,desiredtemp,tempbutton,window,actuators
attr SZ_Heizung group Heizungen
attr SZ_Heizung icon hc_wht_regler
attr SZ_Heizung model fht80b
attr SZ_Heizung retrycount 3
attr SZ_Heizung room 20 Heizungen


Ich würde gerne bei einer Statusänderung des Readings "window" mittels notify den Dummywert ändern.

Ich hab mittlerweile einiges ausprobiert, aber leider funktioniert das nicht so wie ich mir das erwarte.

Der Dummy ist wie folgt definiert :

define Fenster_SZ dummy
attr Fenster_SZ alias Fenster Schlafzimmer


Mein letzter nicht funktionierender Versuch war :

define act_on_Window_SZ notify SZ_Heizung.* { \
$curWindow_SZ = ReadingsVal ("SZ_Heizung","window","open");;\
if (Value($curWindow_SZ) eq "open" ) { fhem "set Fenster_SZ offen" };;\
if (Value($curWindow_SZ) eq "closed" ) { fhem "set Fenster_SZ zu" };;\
}


aber auch solche Codings funktionieren nicht

define act_on_Window_SZ notify SZ_Heizung:open { ...
oder
define act_on_Window_SZ notify SZ_Heizung:window:open { ...
oder
define act_on_Window_SZ notify SZ_Heizung.*:open { ...
geht nicht.
Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: Puschel74 am 01 Januar 2014, 19:32:42
Hallo,

SZ_Heizung:window.*

Versuch mal das.

Grüße
Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: Charity am 01 Januar 2014, 20:25:26
Danke,

nun scheint fhem nun zumindest auf das notify zu reagieren.


define act_on_Window_SZ notify SZ_Heizung:window.* { \
$curWindow_SZ = ReadingsVal ("SZ_Heizung","window","open");;\
if (Value($curWindow_SZ) eq "open" ) { fhem "set Fenster_SZ offen" };;\
if (Value($curWindow_SZ) eq "closed" ) { fhem "set Fenster_SZ zu" };;\
}


leider bekomm ich aber folgenden Fehler :

Zitat
2014.01.01 20:21:11 3: act_on_Window_SZ return value: Global symbol "$curWindow_SZ" requires explicit package name at (eval 1149) line 2.
Global symbol "$curWindow_SZ" requires explicit package name at (eval 1149) line 3.
Global symbol "$curWindow_SZ" requires explicit package name at (eval 1149) line 4.

Was bedeutet das ?
Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: Puschel74 am 01 Januar 2014, 20:29:58
Hallo,

das hier
Zitat$curWindow_SZ = ReadingsVal ("SZ_Heizung","window","open");;\
noch ein my davor gehört.

Also so:
my $curWindow_SZ = ReadingsVal ("SZ_Heizung","window","open");;\

Sorry. Hatte ich vorhin doch glatt übersehen.

Grüße
Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: Charity am 01 Januar 2014, 21:37:59
Danke, jetzt bekomm ich den Fehler zwar nicht, aber funktionieren tut's auch nicht ;-)

So sieht der Code nun aus.
Ein notify wird nicht ausgelöst bei einer Änderung des Values "window"


define Fenster_AZ dummy
attr Fenster_AZ alias Fenster Arbeitszimmer

define act_on_Window_AZ notify AZ_Heizung:window.* { \
my $curWindow_AZ = ReadingsVal ("AZ_Heizung","window","open");;\
if (Value($curWindow_AZ) eq "open" ) { fhem "set Fenster_AZ offen" };;\
if (Value($curWindow_AZ) eq "closed" ) { fhem "set Fenster_AZ zu" };;\
}

define FileLog_act_on_Window_AZ FileLog ./log/act_on-%Y.log act_on_Window_AZ
attr FileLog_act_on_Window_AZ logtype text
attr FileLog_act_on_Window_AZ room 90 Alarmanlage

Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: Puschel74 am 01 Januar 2014, 22:07:04
Hallo,

Event Monitor öffnen und den FHTTK öffnen/schliessen und schauen was der Event Monitor sagt.

Wenn es ein FHTTK ist kannst du aber auch direkt diesen abfragen bzw. du brauchst keinen Dummy schalten.
autocreate sollte einen FHTTK erkennen und anlegen.

Grüße
Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: stromer-12 am 01 Januar 2014, 22:12:28
Zitat von: Charity am 01 Januar 2014, 21:37:59


if (Value($curWindow_AZ) eq "open" ) { fhem "set Fenster_AZ offen" };;\
if (Value($curWindow_AZ) eq "closed" ) { fhem "set Fenster_AZ zu" };;\


ohne Value() sollte es klappen.


if ($curWindow_AZ eq "open" ) { fhem "set Fenster_AZ offen" };;\
if ($curWindow_AZ eq "closed" ) { fhem "set Fenster_AZ zu" };;\

Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: Puschel74 am 01 Januar 2014, 22:21:53
Hallo,

Zitatohne Value() sollte es klappen.

Stimmt.
Und noch was übersehen  :o

stromer-12 sollte recht behalten  8)

Grüße
Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: Charity am 01 Januar 2014, 22:45:46
Perfekt, danke. Das hat echt super geklappt.

An dieser Stelle muss ich echt mal sagen, dass das hier eines der Besten Foren ist die ich kenn.
Hier wird stets schnell und kompetent geholfen.

Prima.
Danke
Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: Hans Topf am 02 Januar 2014, 07:16:47
Könntest du deinen nun bei dir funktionierenden, vollständigen Code hier noch einmal einstellen? Danke!
Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: Charity am 02 Januar 2014, 11:41:32
Klar, mach ich gerne.

Damit wird mal der Dummy definiert

define Fenster_AZ dummy
attr Fenster_AZ alias Fenster Arbeitszimmer


und damit mittels notify auf die Statusänderung reagiert:

define act_on_Window_AZ notify AZ_Heizung:window.* { \
my $curWindow_AZ = ReadingsVal ("AZ_Heizung","window","open");;\
if ($curWindow_AZ eq "open" ) { fhem "set Fenster_AZ offen" };;\
if ($curWindow_AZ eq "closed" ) { fhem "set Fenster_AZ zu" };;\
}


AZ_Heizung ist der definierte FHT für dieses Zimmer.

Und damit kann ich sehr einfach eine Übersicht erstellen in der ich den Status der jeweiligen Fenster sehe.
Ich weiss man kann es auch einfacher abfragen, aber damit geht die Statusabfrage auf Fenster.* recht einfach.
Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: Puschel74 am 02 Januar 2014, 12:04:39
Hallo,

schön das der Code funktioniert aber ...

Du verwendest als Fensterkontakte doch FHTTK oder nicht?
Diese sollten dank autocreate aber in FHEM als CUL_FHTTK angelegt werden und stellen ihren Status ohne notify bereit.

Wenn es keine FHTTK sind beachte meinen Beitrag bitte nicht weiter.

Grüße
Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: Zrrronggg! am 02 Januar 2014, 21:42:31
ZitatDiese sollten dank autocreate aber in FHEM als CUL_FHTTK angelegt werden und stellen ihren Status ohne notify bereit.

Genau. Und für die Dinger ist selbst Autocreate schon zu kompliziert.
Die melden sich im Log und dann legt man die einfach an. ich zitiere mal den passenden Wikiartikel:

ZitatWird ein neuer CUL/FHEM Türkontakt erkannt, erscheint im Logfile "FHTTK unknown device 123abc, please define it." (wobei 123abc ein Stellvertreter für den tatsächlichen Devicecode des Fensterkontaktes ist, der dem Logfileeintrag zu entnehmen ist), der Fensterkontakt kann dann mit
define <name> CUL_FHTTK <devicecode>
definiert werden.


Und danach mache ich z.b. schlicht Folgendes:

define act_on_Tuer_Schlafen1 notify Tuer_Schlafen { if (Value("Tuer_Schlafen") eq "Closed") { fhem("set AussentuerEG_Schlafen zu") } else { fhem("set AussentuerEG_Schlafen offen") }}

wobei
Tuer_Schlafen
mein FHTTK ist und
AussentuerEG_Schlafen
mein dummy.
Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: Puschel74 am 02 Januar 2014, 21:46:53
Hallo,

sorry, ich steh grad aufm Schlauch  :o

Wozu dupliziert man sich den Status eines FHTTK per notify in einen Dummy?
Ich versteh grad den Sinn dahinter nicht - ausser das es klappt.

Bitte um Aufklärung - Danke schonmal.

Grüße
Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: Zrrronggg! am 02 Januar 2014, 22:00:19
ICH habe das gemacht weil ich damit eine Alarmanlage gebastelt habe.

Dabei habe ich auf vorhanden Sensoren zurückgegriffen. Das waren FHTTKs (Plural -S wird natürlich nicht mit Apostoph abgetrennt auch wenn Threadersteller das glaubt ;-)  ) aber auch FS20TFK und HM-SEC-SC .

Das Problem ist nun, das die alle was anders melden:


FHT80TF (aka FHTTK)-> Open / Closed
HM-SEC-SC -> open / closed
FS 20 TFK -> on / off (!)

Wenn man jetzt mehrere der Kontakte mit einem notify abfragen will, kann man weder nach  einem gleichen State wie "open" oder "close" abfragen noch die  Geräte nach TYPE zusammengefasst abfragen.

Daher habe ich mir als Abstraktionslayer Dummys gemacht, die nun alle "Tuer_irgendwas" heissen und alle den Zustand "auf" und "zu" kennen und vom jeweiligen Kontakt "befüllt" werden.

Zum Auslösen des Alarms kann ich jetzt sowas machen:

define act_on_tuer_auf notivy tuer_.*:auf set alarm on


(vereinfacht ausgedrückt, mehr Details und weitere Gründe dazu im Wikiartikel "Alarmanlage, speziell hier: http://www.fhemwiki.de/wiki/Alarmanlage#Abstraktionlayer)

Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: Puschel74 am 02 Januar 2014, 22:16:47
Hallo,

ok. Klingt erstmal logisch.

ZitatWenn man jetzt mehrere der Kontakte mit einem notify abfragen will,
Dann bau ich mir das regexp so das nur die gewünschten Geräte abgefragt werden.

Beispiel:
Ich will nur wissen welche Tür oder Fenster offen ist.

Dann bau ich mir das notify das alle Türen und Fenster matchet.
define Tuer_Fenster_offen notify (.*Fenster.*|.*[Tt]uer):Window.* {

Um den Status per Value in einem notify einfach vergleichen zu können - ok.
Da bietet sich die Vorgehensweise mit einem Dummy an.
Das habe ich so aber in diesem Beitrag vermutlich übersehen  ;)

Grüße
Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: Zrrronggg! am 02 Januar 2014, 22:22:38
Zitatdefine Tuer_Fenster_offen notify (.*Fenster.*|.*uer):Window.* {

Sowas geht aber auch nur, wenn die bisherigen Namen das einigermassen hergeben. Das war z.b. bei mir, da die Kontakte "historisch gewachsen waren" schonmal nicht der Fall. Klar, kann man umbennen...

Ausserdem ist da noch das Thema, das man in einen Dummy noch zustätzliche "Logik" einbauen kann, wie z.b. den Umstand abfangen, dass FHTTK ihren Zustand alle 2 Minuten ändern und ein

Zitatdefine Tuer_Fenster_offen notify (.*Fenster.*|.*uer):Window.* {

das die Dinger beinhaltet, alle 2 Minuten auslöst (das kann bei einer Alarmanlage unpraktisch sein, vor allem wenn ein Fenster beim Scharfschalten offen war.). Das Dummy hingegen löst nicht alle 2 Minuten aus, da es seinen Zustand nicht ändert.

Kurzum: Viel Wege führen nach Rom, aber ich habe über diese Alarmanlage wierklich sehr lange nachgedacht und am Ende war das für mich das flexibelste und auch einfachste.

Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: Puschel74 am 03 Januar 2014, 10:51:01
Hallo,

es ging ja nicht um die Alarmanlage oder darum wie du dir das gedach hast  8)
Das hat schon Hand und Fuß.

Ich hab nur nicht daran gedacht das man ja mehrere unterschiedliche Sensoren verwenden kann und diese
a) unterschiedliche events senden und
b) nicht einfach so gesamt abgefragt werden können.

Aber dank deiner Erklärung habe ich mal wieder gesehen das man ruhig auch etwas "um die Ecke denken" kann  ;D

Danke nochmal Zrrronggg!

Grüße
Titel: Antw:Fenster Sensor eines FHT's auslesen
Beitrag von: Zrrronggg! am 03 Januar 2014, 13:45:12
Und ich wollte ja nur sagen, warum regexp bei mir eher nicht die Lösung war. Ich weiss doch, dass gerade du bei sowas ganz undogmatisch bist ;-)