Prüfung ob irgendein Fenster auf ist

Begonnen von ArduPino, 25 März 2017, 12:33:39

Vorheriges Thema - Nächstes Thema

ArduPino

Hallo.
Gerade wollte ich mir ein DOIF anlegen, das mir per dummy zeigt, ob irgend wo ein Fenster offen ist.
Das würde ich gerne nutzen um z.B. eine Meldung zu erhalten, wenn ich das Haus verlasse und die Alarmanlage an schalte.

Nun habe ich an einigen Fenstern einen Sender, der mir jede Minute ein Signal sendet. Damit lasse ich mir im Tablet-UI Fenster offen oder geschlossen anzeigen.

(["^Fenster_:open"]) (set Fenster_offen on) DOELSEIF (["^Fenster_:close"]) (set Fenster_offen off)

Ich habe also ein DOIF definiert, ähnlich wie das Beispiel in der Hilfe mit der Batterieüberwachung. Wenn ein device mit "Fenster_" open ist, dann schalte dummy "Fenster_offen" an, wenn nicht, schalte es aus.
Das funktioniert zwar, hilft mir aber nichts, denn irgend ein Fenster ist ja immer zu und so schaltet das dummy "Fenster_offen" aus und an im Wechsel.
Wie könnte man denn so was lösen ?

igami

monitoring benutzen und prüfen ob die warnings Liste leer ist
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

ArduPino

Ok, das sieht gut (und kompliziert) aus.
Im Forumsbeitrag wird auch noch auf eine ausgebautere Version verwiesen, aber das ist noch mal einige Nummern komplexer.

Ich schaue mir das mal in ruhe an und versuche ob ich damit zurecht komme.
Danke schon mal.

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Bennemannc

Hallo,

ich mache das einfach über "structure". Wenn alle zu - structure zu, wenn eines offen structure undef, wenn alle offen - structure offen.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

CoolTux


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++;
}

return $msgtext if ($cnt_devs > 0);
}


Einfach über ein Notify oder so aufrufen lassen. Gibt eine Liste aller Fenster die nicht closed sind.
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

igami

Das finde ich an fhem so schön: es gibt viele Wege.

Das mit devspec2array und filtert verwende ich selbst für einzelne Räume :)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

ArduPino

#7
Zitat von: Damian am 25 März 2017, 15:28:11
Es wird demnächst im DOIF eine Abfrage dafür geben, siehe https://forum.fhem.de/index.php/topic,67367.msg588160.html#msg588160

Ah das wäre ja schön, DOIF find ich gut und habe das einige male im Gebrauch.

Zitat von: Bennemannc am 25 März 2017, 17:44:08
Hallo,

ich mache das einfach über "structure". Wenn alle zu - structure zu, wenn eines offen structure undef, wenn alle offen - structure offen.

Gruß Christoph

Habe ich noch nie verwendet, aber mir fällt ein, das ich mir das mal ansehen wollte...hab aber vergessen warum  ::)

Zitat von: CoolTux am 25 März 2017, 18:03:01

Einfach über ein Notify oder so aufrufen lassen. Gibt eine Liste aller Fenster die nicht closed sind.

Das ist eindeutig zu viel des Guten  ;D
Ich "kann" etwas C wegen Arduino und so, aber das hier ist schon was ganz anderes.
Wenn ich das so einbaue (ok den Device Namen bekomme ich noch geändert) und es funktioniert nicht, könnte ich das niemals selber anpassen.
Aber ich bau das mal in ein Notify ein und schau mal was passiert.

EDIT:
So, hab das mal mit structure versucht, das funktioniert jetzt.
Nach dem anlegen mit 2 dummy devices hatte nur eins diese zwei zusätzlichen Attribute, warum auch immer.
Habe dann noch mal neu im DEF eingetragen, dann waren sie auf einmal da.

Puschel74

ZitatNun habe ich an einigen Fenstern einen Sender, der mir jede Minute ein Signal sendet.
Das Attribut event-on-change-reading passend setzen das nur ein Event ausgelöst wird wenn sich der Status auch tatsächlich ändert.
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.

Zrrronggg!

#9
Naja: Wiki Artikel "Alarmanlage"

Da wird zur Meldegruppenüberwchung sowas gebaut, wenngleich auch mit perl if anstatt DOIF.

Da werden vermutlich alle Aspekte die du brauchst abgehandelt:
- Sensoren die alle paar Minuten einen status ändern,
- Anzeige aller Fenster in EINER Meldung (irgendeine fenster ist offen / alle fenster sind zu)
- auslösen von Alarm, wenn ein Fenster geöffnet wird

Und alles recht primitiv ohne structure, event-on-change-reading, devspec2array und ähnliche "höhere" Konstruktionen.

So oder so: Viele Wege führen nach Rom, wenn du jetzt was hast, das geht ... supie.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

ArduPino

Also mit Perl kenne ich mich gar nicht aus. Deshalb bin ich froh das es noch andere Möglichkeiten gibt.
Habe nun mal mit structure versucht. Scheint jetzt zu funktionieren, bin gerade noch am testen.

Zitat von: Puschel74 am 25 März 2017, 22:52:34
Das Attribut event-on-change-reading passend setzen das nur ein Event ausgelöst wird wenn sich der Status auch tatsächlich ändert.
Ja das wäre natürlich auch eine Idee gewesen. Daran habe ich gar nicht gedacht. Damit würde ja mein DOIF bestimmt direkt funktionieren.
Aber ich teste jetzt erst mal eine von diesen zwei Lösungen, sonst hab ich gleich hier durcheinander  :P

Zrrronggg!

Naja, echte perl Kenntnisse sind da nicht nötig. Jedenfalls um 2 Grössenordnungen weniger als bei CoolTux Lösung. Ich kann auch kein perl. Abschreiben und eigene Gerätenamen einsetzen reicht und speziell das perl if ist auch nicht super komplex. Ich habe inzwischen den Eindruck, das DOIF wegen seiner Mächtigkeit und damit den sehr zahlreichen Optionen nicht gerade leicht zu erfassen ist.

Aber wenn du einen Weg hast, reichts ja.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

fiedel

Zitat von: Zrrronggg! am 27 März 2017, 00:52:04
Ich habe inzwischen den Eindruck, das DOIF wegen seiner Mächtigkeit und damit den sehr zahlreichen Optionen nicht gerade leicht zu erfassen ist.

Mittlerweile nervt es auch in der Commandref: Wenn man irgendwas über die Browsersuche sucht, landet man automatisch bei DOIF, weil es wie eine Krake alle möglichen FHEM- Befehle, Attribute und Begriffe verwendet - nur auf seine Art und Weise. Verwendet man nun das gefundene Codestückchen ohne stundenlang hochzuscrollen wozu der Code gehört, fällt man automatisch auf die Nase.

Ich finde ja DOIF sollte aus der FHEM- Commandref raus und eine eigene Ref. bekommen.
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423