Luftzug mittels Fensterkontakte erkennen

Begonnen von bmilos, 13 Dezember 2016, 20:25:34

Vorheriges Thema - Nächstes Thema

bmilos

Hi zusammmen,

ab und zu nervt es micht wenn mind. 2 Fenster offen sind gibt es einen Luftzug und dann knallen die Türen zu.
Ich habe 10-12 Fensterkontakte im Einsatz, meine Idee wäre wenn mind.  2 Kontakte offen sind bspw.  zwei Fenster, dann soll eine Push-Meldung an das Handy geschickt werden.

Mit dem Push zu implementieren habe ich kein Problem, jedoch die Erkennung.
structure, doif, watchdog wüsste ich nicht wie 2 Kontakte auszuwerten.

Hate jemand eine Idee?

Gruss
Raspberry Pi 3, nanoCUL 433, FHEMduino, HMLAN, Homematic, Intertechno, MiLight, MySensor

CoolTux

Es gab vor kurzem das Thema Anzahl offener Fenster zählen. Suche mal nach, damit kannst das sicher was anfangen.
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

bmilos

#2
Hi,

danke dir.
Ich habe deinen Beitrag vor ewigkeiten gefunden:
sub statusFensterOffen() {
my @monitored=devspec2array("(FensterKontakt.*):FILTER=STATE!=closed");
my $cnt_devs=@monitored;
my $i = 0;
my $msgtext = "";
foreach(@monitored) {
$msgtext .= AttrVal($_,"alias",$_);
if ($i < $cnt_devs - 2) {
  $msgtext .= ", ";
}
if ($i == $cnt_devs - 2) {
  $msgtext .= " und ";
}
$i++;
}


woran ich nicht weiterkommen, wie man den Wert ausliest resp. weiterverarbeitet.

Kannst du mir allenfalls einen Hinweis geben?

Gruss
Raspberry Pi 3, nanoCUL 433, FHEMduino, HMLAN, Homematic, Intertechno, MiLight, MySensor

CoolTux

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

bmilos

#4
Wow cool vielen lieben dank!

Ich habe es wie folgt gelöst, falls es jemand nachbauen möchte:
Dies als 99_myUtils_statusFensterOffen.pm speichern:
[package main;

use strict;
use warnings;
use POSIX;

sub winOpenStartStop($$) {
    #Als Parameter muss der device-Name übergeben werden
    my ($dev,$event)=@_;
   
    #Der dummy der verwendet wird, um die offenen Fenster/Tueren nachzuhalten
    my $dummy = 'Offene_Fenster';
   
    #Erst mal prüfen, ob das übergebene device überhaupt existiert
    if ($dev =~ /[Ff]enster|Tuer/ && $defs{$dev})
    {
        my $model=AttrVal($dev,'model','');
        if ($model eq 'ev1527')
        {
            #hole die liste der Fenster, die gerade offen sind
            my $openWindows = ReadingsVal($dummy, 'openWindows', '');
            my @parts;
            @parts = split(/,/, $openWindows) if ($openWindows ne '-');

            # wenn das aktuelle Fenster noch nicht in der liste ist -> hinzufuegen
            if ($event eq 'off' || $event eq 'tilted') {
                # add element to array if not already there
                push(@parts, $dev) unless grep{$_ eq $dev} @parts;
            }
            elsif ($event eq 'on') {
                # remove element from array
                @parts = grep {$_ ne $dev} @parts;
            }
           
            # aktualisiere die Readings des dummies
            my $openWindowsCount = scalar(@parts);
            if ($openWindowsCount > 0) { $openWindows = join(',', @parts); }
            else                       { $openWindows = '-';               }
            fhem("setreading $dummy openWindows $openWindows");
            fhem("setreading $dummy openWindowsCount $openWindowsCount");
        }
    }
}
1;


Meines Fensterkontakte haben on/off und Model ist "ev1527".

Dummy für Werte
define Offene_Fenster dummy
attr Offene_Fenster room Wohnung
attr Offene_Fenster stateFormat openWindowsCount


Zählen der Offenen Fenster
define Offene_Fenster_zaehlen DOIF ([".*:(on|off)$"]) ({winOpenStartStop("$DEVICE", "$EVENT")})
attr Offene_Fenster_zaehlen do always


Wenn mehr als 2 Fensterkontakte offen sind, dann wird Push (pushmsg ist structure) Nachricht versendet.
define Offene_Fenster_Push DOIF ([Offene_Fenster:openWindowsCount]>=2) (set pushmsg message "Durchzug möglich!")

Jedoch habe ich ein weiteres Problem, welches ich nicht wirklich weis wie lösen.
Da ich bei den Räumen an den Türen und Fenstern Kontakte montiert habe, möchte ich nur die Nachricht versenden wenn z.B.:
-Fenster_Kinderzimmer offen und Tuere_Kinderzimmer offen + Fenster_Schlafzimmer offen und Tuere_Schlafzimmer offen = Durzug -> pushmg
-Fenster_Kinderzimmer offen und Tuere_Kinderzimmer geschlossen+ Fenster_Schlafzimmer offen und Tuere_Schlafzimmer offen = kein Durzug ->nix
-Fenster_Kinderzimmer offen und Tuere_Kinderzimmer offen + Fenster_Schlafzimmer offen und Tuere_Schlafzimmer geschlossen= kein Durzug ->nix

Hat jemand eine Idee?
Mit structure habe ich gedacht, aber wie den Wert der Türe als Prio 1 setzten...

Gruss


Raspberry Pi 3, nanoCUL 433, FHEMduino, HMLAN, Homematic, Intertechno, MiLight, MySensor

CoolTux

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

bmilos

Ja, schon aber wie mit dem szenario:

Da ich bei den Räumen an den Türen und Fenstern Kontakte montiert habe, möchte ich nur die Nachricht versenden wenn z.B. mehr als Kontakte offen sind jedoch nicht wenn die Türe geschlossen in dem Raum bei welchem der Fensterkontakt offen ist:
-Fenster_Kinderzimmer offen und Tuere_Kinderzimmer offen + Fenster_Schlafzimmer offen und Tuere_Schlafzimmer offen = Durzug -> pushmg
-Fenster_Kinderzimmer offen und Tuere_Kinderzimmer geschlossen+ Fenster_Schlafzimmer offen und Tuere_Schlafzimmer offen = kein Durzug ->nix
-Fenster_Kinderzimmer offen und Tuere_Kinderzimmer offen + Fenster_Schlafzimmer offen und Tuere_Schlafzimmer geschlossen= kein Durzug ->nix

Gruss
Raspberry Pi 3, nanoCUL 433, FHEMduino, HMLAN, Homematic, Intertechno, MiLight, MySensor

CoolTux

Structure. Packe alle Beteiligten Kontakte da rein. Wenn alle offen melden ist die structure offe. Wenn nur einer zu meldet ist die structure zu.
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

CBSnake

Moin,
genauer:
eine structure fürs kinderzimmer, enthält fenster und Türkontakt des Kinderzimmer.
Eine weitere für das Schlafzimmer usw usw
Grüße
Achim

Gesendet von meinem SM-P605 mit Tapatalk

FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

Puschel74

Und Code-Tags würde sich auf Mobilen Geräten besser lesen lassen als Zitat-Tags.
Wenn man aber potentielle Helfer mit mobilen Geräten ausschliessen will dann verwendet man Zitat-Tags - für alles andere liest man meinen angepinnten Beitrag im Anfängerbereich.

*Von Mobil gesendet da PC im Keller steht und ich zu bequem bin um runter zu gehen*
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

bmilos

Jetzt können die Code-Tags sich besser auf Mobilen Geräten lesen lassen.
Raspberry Pi 3, nanoCUL 433, FHEMduino, HMLAN, Homematic, Intertechno, MiLight, MySensor

bmilos

Hi,

ich glaube nicht dass es geht, denn ich habe vergessen dass ich bsp. 3 Kontakte pro Raum habe:

define KZ_Kontakte_Gruppe structure room Fensterkontakt_Kinderzimmer Tuerkontakt_Kinderzimmer
attr KZ_Kontakte_Gruppe clientstate_behavior relative
attr KZ_Kontakte_Gruppe clientstate_priority off on
define WZ_Kontakte_Gruppe structure room1 Fensterkontakt_Wohnzimmer Balkonkontakt_Wohnzimmer Tuerkontakt_Wohnzimmer
attr WZ_Kontakte_Gruppe clientstate_behavior relative
attr WZ_Kontakte_Gruppe clientstate_priority on off
define SZ_Kontakte_Gruppe structure room2 Fensterkontakt_Schlafzimmer Tuerkontakt_Schlafzimmer
attr SZ_Kontakte_Gruppe clientstate_behavior relative
attr SZ_Kontakte_Gruppe clientstate_priority off on
define WO_Kontakte_Gruppe structure room3 Tuerkontakt_Eingangstuer
attr WO_Kontakte_Gruppe clientstate_behavior relative
attr WO_Kontakte_Gruppe clientstate_priority off on
define KU_Kontakte_Gruppe structure room4 Fensterkontakt_Kueche Balkonkontakt_Kueche
attr KU_Kontakte_Gruppe clientstate_behavior relative
attr KU_Kontakte_Gruppe clientstate_priority off on


Daher funktioniert es nicht oder sehe ich dies falsch?

Gruss
Raspberry Pi 3, nanoCUL 433, FHEMduino, HMLAN, Homematic, Intertechno, MiLight, MySensor

CoolTux

#12
Wieso machst Du es nicht so wie Du es geschrieben hast

-Fenster_Kinderzimmer offen und Tuere_Kinderzimmer offen + Fenster_Schlafzimmer offen und Tuere_Schlafzimmer offen = Durzug -> pushmg

Also die hier erwähnten Kontakte in eine Structure. Oder Du machst Structure pro Raum und verbindest die 2 Räume über eine dritte Structure Namens DurchzugKinSchlafZimmer

Du kannst auch die Zimmer structure so lassen und fragst die Raumverbindung dann einfach im Notify ab.

trigger Kinderzimmer open Abfrage ist Schlafzimmer open wenn ja löse Meldung aus
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

bmilos

Geht nicht, du verstehst mich glaube ich nicht ganz.

In der Wohnung möchte ich mir melden lassen wenn 2 Fenster offen sind, sprich auch die Türen in denen die 2 Fensterkontakte offen sind (Wert 2, bereits mit den oben genannten Sub realisiert und nur Fensterkontakte werden ausgewertet). Falls aber in einem Raum der Fensterkontakt offen, aber der Türkontakt geschlossen ist, jedoch in einem anderen Raum beides Tür- und Fensterkontakt offen (Wert 1).

Ich hoffe man versteht was ich meine :(

Gruss
Raspberry Pi 3, nanoCUL 433, FHEMduino, HMLAN, Homematic, Intertechno, MiLight, MySensor

CoolTux

Gut möglich das ich dich nicht verstehe.

Du hast Räume die in bestimmten Konstellation einen Durchzug verursachen.

Beispiel Kinderzimmer Wohnzimmer.
Wohnzimmer 1 Fenster auf und Tür auf + Kinderzimmer Tür zu Fenster auf = kein Durchzug
Wohnzimmer 1 Fenster auf und Tür auf + Kinderzimmer Tür auf 1Fenster auf = Durchzug

Im Gründe dürfen Fenster auf sein so lange die Türen dabei geschlossen sind.
Durchzug ist aber nur bei bestimmten Raumkonstellationen.


Korrekt so??
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