Globale, flexible Fenster-/Tür-Offen-Meldungen

Begonnen von Benni, 20 April 2015, 20:19:31

Vorheriges Thema - Nächstes Thema

dhupfer

Hallo CoolTux,

ich würde schon sagen, dass es reine Fensterkontakte sind.
FS20 Fensterkontakt
https://www.elv.de/fs20-tfk-2-kanal-tuer-fenster-kontakt-fertiggeraet.html

FHT 80b Regeleinheit
https://www.elv.de/Funk-Heizk%C3%B6rperthermostat-FHT-80B/x.aspx/cid_726/detail_34945

FS20 Fensterkontakt --> FHT 80b Regeleinheit --> USB-FHZ an FHEM

Deine Frage hat mich aber auf eine Idee gebracht. Da ich über so einen selbst zusammengebauten NanoCUL verfüge, war ich auf der Suche, ob man mit diesem vielleicht das Funksignal des Fensterkontakt direkt empfangen kann. Und ja - man kann.
Internals:
   CODE       46c493
   DEF        46c493
   IODev      nanoCUL868
   LASTInputDev nanoCUL868
   MSGCNT     3
   NAME       FHTTK.Buero
   NR         139
   OPEN       1
   PREVSTATE  Closed
   PREVTIMESTAMP 1493241834
   STATE      Open
   TYPE       CUL_FHTTK
   nanoCUL868_MSGCNT 3
   nanoCUL868_RAWMSG T46C49301
   nanoCUL868_RSSI -65
   nanoCUL868_TIME 2017-04-26 23:24:56
   Prev:
     STATE      01
     TIMESTAMP  1493241896
   Readings:
     2017-04-26 23:24:56   Battery         ok
     2017-04-26 23:24:56   Previous        Closed
     2017-04-26 23:24:56   Reliability     ok
     2017-04-25 19:39:05   Sync            Syncing
     2017-04-26 23:24:56   Window          Open
     2017-04-26 23:24:56   state           Open
Attributes:
   IODev      nanoCUL868
   room       CUL_FHTTK
   userattr   winOpenMaxTrigger winOpenTimer winOpenTimer2 winOpenType:Fenster,Türe winOpenName
   winOpenMaxTrigger 3
   winOpenName CulBueroFenster
   winOpenTimer 00:00:13
   winOpenTimer2 00:00:34
   winOpenType Fenster


Allerdings juckt dieser Weg das Notify auch nicht - es wird einfach nicht getriggert. In der Datei 99_Utils.pm, in der sich die zwei Subfunktionen winOpenStart und winOpenStop befinden, habe ich noch eine Zeile fürs logging ergänzt
sub winOpenStart($;$) {
    #Als Parameter muss der device-Name übergeben werden
    my $dev=shift(@_);
        Log3(undef,1,"winOpenDevice: $dev");

Aber es wird leider nichts geloggt, die Funktion wird für meine Begriffe nicht aufgerufen. Wenn ich nur wüsste warum  :-\

Benni

#151
Zitat von: dhupfer am 26 April 2017, 23:56:43
In der Datei 99_Utils.pm ...

Achtung! Nicht die 99_Utils.pm dafür verwenden.

Dazu erstellt man sich eine 99_myUtils.pm
s.a. https://wiki.fhem.de/wiki/99_myUtils_anlegen

Das hat zwar nicht direkt was mit der Problemlösung zu tun, aber die 99_Utils.pm gehört zur FHEM Standardauslieferung und wird ggf. bei einem update auch wieder überschrieben.

Zur Problemlösung:

Bleibe bei deinem Fensterkontakt. Setze dort mal das Attribut event-on-change-reading auf .* und dann schau dir mal im Eventmonitor an, wie die Events des Fensterkontaktes beim Öffnen, bzw. Schließen des Fensters aussehen. Ausgabe ggf. hier mal posten. Wahrscheinlich braucht es eine Anpassung der regex bei den notify.

CoolTux

Ok dann also Fensterkontakte. Allerdings wird die hier verwendete RegEx für das Notify wie Benni schon so treffend sagte nicht passen.

.*:(open|tilted) {winOpenStart($NAME)}

Das geben Deine Fensterkontakte so sicherlich nicht her. Also befolge Mal bitte Bennis Bitte.
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

dhupfer

Servus Benni,

das Attribut event-on-change-reading habe ich auf .* gesetzt. Allerdings erscheint da bei mir auch nicht entscheidet mehr im Event Monitor als sonst. Aber beim direkten Empfangsweg über CUL ist mir doch aufgefallen, dass das Wörtchen "Open" und "Closed" einen großen Anfangsbuchstaben hat. Und tatsächlich, mit
.*:(Open|tilted) {winOpenStart($NAME)}
wird das Notify aktiv :-)

Der Weg über das Raumthermostat geht nach wie vor nicht, hier wird open und closed kleingeschrieben:
2017-04-27 10:53:22 FHT Temp.KG.Buero actuator: 0%
2017-04-27 10:53:23 FHT Temp.KG.Buero desired-temp: 12.0
2017-04-27 10:53:23 FHT Temp.KG.Buero ack: 24
2017-04-27 10:53:24 readingsGroup ZE.Fenster Temp.KG.Buero.window: open
2017-04-27 10:53:24 FHT Temp.KG.Buero window: open
2017-04-27 10:53:24 FHT Temp.KG.Buero warnings: Window open
2017-04-27 10:53:24 FHT Temp.KG.Buero ack: 32
2017-04-27 10:53:24 FHT Temp.KG.Buero end-xmit: 32


2017-04-27 10:57:17 FHT Temp.KG.Buero actuator: 100%
2017-04-27 10:57:18 FHT Temp.KG.Buero desired-temp: 30.0
2017-04-27 10:57:18 FHT Temp.KG.Buero ack: 60
2017-04-27 10:57:19 readingsGroup ZE.Fenster Temp.KG.Buero.window: closed
2017-04-27 10:57:19 FHT Temp.KG.Buero window: closed
2017-04-27 10:57:19 FHT Temp.KG.Buero warnings: none
2017-04-27 10:57:19 FHT Temp.KG.Buero ack: 0
2017-04-27 10:57:19 FHT Temp.KG.Buero end-xmit: 0


Falls noch jemand einen Geistesblitz hat - gerne, ansonsten bin ich so auch zufrieden. Klasse Funktion!
Danke auch für den Hinweis mit der Datei 99_Utils.pm.
Danke CoolTux für die Nachfrage, so war die Idee über CUL geboren  ;)

Grüße aus Ottobrunn,
Dirk

CoolTux


.*:window:.(open|tilted) {winOpenStart($NAME)}


So sollte es auch mit den Thermostaten gehen.
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

Benni

Zitat von: CoolTux am 27 April 2017, 11:30:38

.*:window:.(open|tilted) {winOpenStart($NAME)}


So sollte es auch mit den Thermostaten gehen.

Sollte klappen, ansonsten kann man auch um die Groß-/Kleinschreibung abzufangen die Regex auch noch so anpassen:


.*:([Oo]pen|[Tt]ilted) {winOpenStart($NAME)}


So wird "Open", "open", "Tilted" und "tilted" abgefangen.

dhupfer

die Vorschläge von CoolTux und Benni fruchten - RESPEKT!
Da ich ja zwei Wege habe, die Fensterkontakte abzufragen, habe ich noch eine Weile getestet. Der Knackpunkt scheint der Doppeltpunkt in der RegExp zu sein...

geht mit CUL
.*:(Open|tilted) {winOpenStart($NAME)}

geht mit FHZ
.*:window:.(open|tilted) {winOpenStart($NAME)}

geht mit CUL und FHZ
.*([Oo]pen|[Tt]ilted) {winOpenStart($NAME)}

geht mit CUL und FHZ
.*\s([Oo]pen|[Tt]ilted) {winOpenStart($NAME)}
Diese Variante habe ich nun in Verwendung. \s steht für 1x Whitspace

DeeSPe

Zitat von: dhupfer am 27 April 2017, 17:08:19
die Vorschläge von CoolTux und Benni fruchten - RESPEKT!
Da ich ja zwei Wege habe, die Fensterkontakte abzufragen, habe ich noch eine Weile getestet. Der Knackpunkt scheint der Doppeltpunkt in der RegExp zu sein...

geht mit CUL
.*:(Open|tilted) {winOpenStart($NAME)}

geht mit FHZ
.*:window:.(open|tilted) {winOpenStart($NAME)}

geht mit CUL und FHZ
.*([Oo]pen|[Tt]ilted) {winOpenStart($NAME)}

geht mit CUL und FHZ
.*\s([Oo]pen|[Tt]ilted) {winOpenStart($NAME)}
Diese Variante habe ich nun in Verwendung. \s steht für 1x Whitspace

Die beiden letzten Varianten sind im Prinzip identisch, da .* auch \s mit abdeckt!

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Benni

Zitat von: dhupfer am 27 April 2017, 17:08:19
Der Knackpunkt scheint der Doppeltpunkt in der RegExp zu sein...

Ja! Das ist quasi eine Spezialität der Events, bzw. wie sie von notify eingefangen werden können:

Zitat von: https://fhem.de/commandref_DE.html#notify
<Suchmuster> ist entweder der Name des auslösenden ("triggernden") Gerätes oder die Kombination aus Gerät und auslösendem Ereignis (Event) Gerätename:Event.
Das <Suchmuster> muss exakt (!) entweder dem Gerätenamen entsprechen oder der Zusammenfügung aus Gerätename:Event. Events lassen sich mit "inform" in Telnet oder durch Beobachtung des "Event-Monitors" in FHEMWEB ermitteln.

Sargon

Hallo zusammen,

ich mache anscheinend etwas falsch beim Anlegen des UserAttr. Ich setzte den MaxTrigger auf 10 aber wenn ich Logge dann ist der immer 0.


attr Bad_Fensterkontakt_Dach userattr winOpenMaxTrigger:10 winOpenTimer:00:15:00 winOpenTimer2:00:10:00 winOpenTemp:10 winOpenType:Fenster winOpenName:Badezimmer


Hier das List zum Fensterkontakt


Internals:
   CFGFN      /usr/local/FHEM/etc/MyCfg/20_Bad.cfg
   DEF        ShutterContact 0f094d
   IODev      cm
   LASTInputDev cm
   MSGCNT     15
   NAME       Bad_Fensterkontakt_Dach
   NR         137
   RSSI       -70
   STATE      opened (rf error)
   TYPE       MAX
   addr       0f094d
   cm_MSGCNT  15
   cm_TIME    2017-04-30 20:42:58
   rferror    1
   type       ShutterContact
   Readings:
     2017-04-30 20:42:58   RSSI            -70
     2017-04-30 20:42:58   battery         ok
     2015-01-24 23:02:41   msgcnt          13
     2017-04-30 20:42:58   onoff           1
     2017-04-30 20:42:58   state           opened (rf error)
   Internals:
     interfaces switch_active;battery
Attributes:
   IODev      cm
   devStateIcon closed:signal_Fenster_Offen.off opened:signal_Fenster_Offen.on
   group      Bad
   room       Bad
   userattr   winOpenMaxTrigger:10 winOpenTimer:00:15:00 winOpenTimer2:00:10:00 winOpenTemp:10 winOpenType:Fenster winOpenName:Badezimmer


Hier der Code aus der winOpenStart()


#Fehlt dieses Attribut oder ist 0, dann wird für das device gar keine Offen-Meldung ausgegeben
my $maxtrigger=AttrVal($dev,'winOpenMaxTrigger',0);

Log3(undef,1,"winOpenMessage: Ich bin an der zweiten Stelle Wert aus MaxTrigger $maxtrigger");

if($maxtrigger) {

Log3(undef,1,"winOpenMessage: Ich bin an der dritte Stelle");


Da der MaxTrigger immer 0 ist komme ich auch nicht weiter. Was mache ich hier falsch?

Danke für eure Hilfe

Gruß
Thomas
Unitymedia IPv6, Synology 212+, Cul, 4 Max Thermostate und 4 Fensterkontakte

CoolTux

userattr
FensterSuedWest FensterSuedWest_map FensterWohnzimmer FensterWohnzimmer_map structexclude winOpenMaxTrigger winOpenName winOpenTimer winOpenTimer2 winOpenType:Fenster,Türe

Und dann die Werte bei den Attributen angeben.
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

Sargon

Unitymedia IPv6, Synology 212+, Cul, 4 Max Thermostate und 4 Fensterkontakte

ChrisW

#162
Ahh wichtig die timer zeit mit 00:00:10 anzugeben :)

Wie funzt das mit Pushinfo? Nutze Telegram
"teleBot message BLAA BLAAA "
Will so eine Push senden
Raspberry PI3 mit allem möglichen.

CoolTux

Das "funzt" in dem Du den Befehl in die Msg Meldung der Sub ein bindest.
pushcmd
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

Benni

Zitat von: ChrisW am 03 Dezember 2017, 21:46:13
Wie funzt das mit Pushinfo? Nutze Telegram
"teleBot message BLAA BLAAA "
Will so eine Push senden

Weiter vorne in diesem Thread habe ich doch ein Beispiel für eine sub Pushinfo gepostet.

Dort musst du doch nur statt ins Log zu schreiben eben deinen Telegram-Bot benutzen.
Also statt Log3 ... irgendwie sowas:


fhem("teleBot message BLAA BLAAA");


Statt "Blablabla", kannst du ja bei bedarf die Variablen verwenden, die im Beispiel schon vorhanden sind.

gb#