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
Es gab vor kurzem das Thema Anzahl offener Fenster zählen. Suche mal nach, damit kannst das sicher was anfangen.
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
https://forum.fhem.de/index.php/topic,48482.msg536103.html#msg536103
Schaue mal hier, da ist alles schon fertig dargelegt.
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
Mach eine structure. Ist das beste.
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
Structure. Packe alle Beteiligten Kontakte da rein. Wenn alle offen melden ist die structure offe. Wenn nur einer zu meldet ist die structure zu.
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
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*
Jetzt können die Code-Tags sich besser auf Mobilen Geräten lesen lassen.
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
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
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
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??
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.
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??
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
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
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 :
Ja, du hast ja nur 2 Räume, aber wie mit mehr Räumen oder verstehe ich es nicht?
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.
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.
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?
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
Ich wollte dich auch nicht bitten mir den Code zu schreiben. Vielen Dank für deine mühe und Zeit.
Gruss