FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: bmilos am 13 Dezember 2016, 20:25:34

Titel: Luftzug mittels Fensterkontakte erkennen
Beitrag von: bmilos am 13 Dezember 2016, 20:25:34
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
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: CoolTux am 13 Dezember 2016, 20:31:05
Es gab vor kurzem das Thema Anzahl offener Fenster zählen. Suche mal nach, damit kannst das sicher was anfangen.
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: bmilos am 13 Dezember 2016, 23:19:55
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
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: CoolTux am 14 Dezember 2016, 06:37:28
https://forum.fhem.de/index.php/topic,48482.msg536103.html#msg536103

Schaue mal hier, da ist alles schon fertig dargelegt.
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: bmilos am 14 Dezember 2016, 19:45:28
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


Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: CoolTux am 14 Dezember 2016, 20:07:58
Mach eine structure. Ist das beste.
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: bmilos am 14 Dezember 2016, 21:07:56
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
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: CoolTux am 14 Dezember 2016, 21:12:52
Structure. Packe alle Beteiligten Kontakte da rein. Wenn alle offen melden ist die structure offe. Wenn nur einer zu meldet ist die structure zu.
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: CBSnake am 14 Dezember 2016, 21:17:30
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

Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: Puschel74 am 14 Dezember 2016, 21:21:41
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*
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: bmilos am 14 Dezember 2016, 21:31:56
Jetzt können die Code-Tags sich besser auf Mobilen Geräten lesen lassen.
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: bmilos am 14 Dezember 2016, 22:09:34
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
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: CoolTux am 14 Dezember 2016, 22:14:23
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
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: bmilos am 20 Dezember 2016, 21:45:12
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
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: CoolTux am 20 Dezember 2016, 21:53:49
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??
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: Puschel74 am 20 Dezember 2016, 21:54:29
Zitat von: bmilos am 14 Dezember 2016, 21:31:56
Jetzt können die Code-Tags sich besser auf Mobilen Geräten lesen lassen.
Wusste doch da will noch jemand auf meine Ignor.
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: bmilos am 20 Dezember 2016, 21:57:19
Ganz genau :) Endlich versteht mich jemand  ;D
Zitat von: CoolTux am 20 Dezember 2016, 21:53:49
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??
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: CoolTux am 20 Dezember 2016, 23:09:43
Ok dann ist es doch trotzdem einfach.
Als erstes wie bereits erwähnt aber diesmal nur die Fenster je Raum in eine Structure. Also alle Fenster Wohnzimmer in StructureFensterWohnzimmer und alle Fenster Kinderzimmer in StructureFensterKinderzimmer.
Ich würde das so machen weil man irgendwann in anderen Szenarien die Structuren Fenster pro Raum eh brauchen kann.
Dann machst du eine weitere Structure und zwar von den Räumen wo die Fenster einen durchzug bilden. In die Structure packst Du die structure der Fenster von den zugehörigen Raum.

structureFensterWohnzimmer Fenster1 Fenster2

structureFensterKinderzimmer Fenster1 Fenster2

structureFensterDurchzug structureFensterWohnzimmer structureFensterKinderzimmer TürWohnzimmer TürKinderzimmer

entscheidend ist nun wie der Status der Structuren sein muß. Bei den Raum Structuren ist es so, sobald ein Fenster auf - structure auf, sobald alle Fenster zu - Structure zu.
Bei den Durchzugstructuren Status auf sobald beide structuren und Türen auf und status zu sobald eine zu.

Und triggern tust du am ende die Durchzugsstructure auf offen.



FERTIG. Total einfach
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: bmilos am 21 Dezember 2016, 13:25:17
Hi,

habs nun mit structure eingetragen:
define WZ_Kontakte_Gruppe structure Fenster_WZ Fensterkontakt_Wohnzimmer Balkonkontakt_Wohnzimmer
attr WZ_Kontakte_Gruppe clientstate_behavior relative
attr WZ_Kontakte_Gruppe clientstate_priority off on
define KU_Kontakte_Gruppe structure Fenster_KU Fensterkontakt_Kueche Balkonkontakt_Kueche
attr KU_Kontakte_Gruppe clientstate_behavior relative
attr KU_Kontakte_Gruppe clientstate_priority off on


ZitatBei den Durchzugstructuren Status auf sobald beide structuren und Türen auf und status zu sobald eine zu.
Meinst du es etwa so:
define Durchzug_Alle structure Durchzug WZ_Kontakte_Gruppe KU_Kontakte_Gruppe Fensterkontakt_Kinderzimmer Fensterkontakt_Schlafzimmer Tuerkontakt_Eingangstuer Tuerkontakt_Schlafzimmer Tuerkontakt_Kinderzimmer Tuerkontakt_Wohnzimmer
attr Durchzug_Alle clientstate_behavior relative
attr Durchzug_Alle clientstate_priority off on


Den so wird ja Durchzug_Alle auf offen->off(bei mir) wenn ein Kontakt offen ist und somit kein Durchzug.

Gurss


Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: CoolTux am 21 Dezember 2016, 14:28:22

Internals:
   ATTR       FensterWohn
   CFGFN
   DEF        FensterWohn FensterWohn1 FensterWohn2
   NAME       structureFensterWohn
   NR         80
   NTFY_ORDER 50-structureFensterWohn
   STATE      on
   TYPE       structure
   Content:
     FensterWohn1 on
     FensterWohn2 on
   Readings:
     2016-12-21 14:27:50   LastDevice      FensterWohn1
     2016-12-21 14:27:50   LastDevice_Abs  FensterWohn1
     2016-12-21 14:27:50   state           on
Attributes:
   Durchzug   structureDurchzugWohnSchlaf
   clientstate_behavior relative
   clientstate_priority on off
   room       Test
   userattr   Durchzug Durchzug_map structexclude
   webCmd     :



Internals:
   ATTR       Durchzug
   CFGFN
   DEF        Durchzug structureFensterSchlaf structureFensterWohn TuerSchlaf TuerWohn
   NAME       structureDurchzugWohnSchlaf
   NR         98
   NTFY_ORDER 50-structureDurchzugWohnSchlaf
   STATE      on
   TYPE       structure
   Content:
     TuerSchlaf on
     TuerWohn   on
     structureFensterSchlaf on
     structureFensterWohn on
   Readings:
     2016-12-21 14:27:51   LastDevice      TuerWohn
     2016-12-21 14:27:51   LastDevice_Abs  TuerWohn
     2016-12-21 14:27:51   state           on
Attributes:
   clientstate_behavior relative
   clientstate_priority off on
   room       Test
   webCmd     :
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: bmilos am 21 Dezember 2016, 17:27:26
Ja, du hast ja nur 2 Räume, aber wie mit mehr Räumen oder verstehe ich es nicht?
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: CoolTux am 21 Dezember 2016, 17:38:00
Du verbindest nur die Räume welche ein zug ergeben. Wenn es drei sind machst halt ein dritten hinzu. Also Structure Fenster vom 3 Raum und Tür vom dritten Raum in die Structure Zug.
Hast du andere Räume welche zusammen ein Zug ergeben dann verbindest du die. So das du am Ende alt 2 oder 3 Structure Zug hast. Und auf die 2 oder 3 machst ein Notify und lässt dir Ansagen welche Zug Structure das Open gemeldet hat.
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: CoolTux am 21 Dezember 2016, 17:39:45
Nur mal so am Rande erwähnt. Das was Du möchtest ist mit FHEM Boardmitteln nur bedingt zu lösen. Spätestens bei der Info wirst wenn es sah er werden soll nicht um paar Zeilen Perl Rum kommen.
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: bmilos am 21 Dezember 2016, 19:42:40
Ist mit structure alleine einfach zu unschön :(

Meine Idee mit eine Sub die structure's und einzelne-Fensterkontakte zählen welche auf offen sind, bedingung wenn in diesem Raum z.B. gleiches Modell (in meinem Fall EV1527), mit der dem Namen Tuerkontakt/ anfängt und auf geschlossen, dann soll dieser Fensterkontakt nicht berechnet werden, sonst +1.

Mit notify oder doif etc. dann wenn mehr als 2 offen sind bspw. push etc.

Wäre dies umsetzbar?

Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: CoolTux am 21 Dezember 2016, 19:47:14
Wenn du sowas fragen musst bist du noch nicht soweit dies umzusetzen. Und ich habe bestimmt keine Lust für Dich Code zu schreiben. Daher der "einfache" Weg über structure.


Grüße
Leon
Titel: Antw:Luftzug mittels Fensterkontakte erkennen
Beitrag von: bmilos am 21 Dezember 2016, 19:58:01
Ich wollte dich auch nicht bitten mir den Code zu schreiben. Vielen Dank für deine mühe und Zeit.

Gruss