Hallo,
ich brauche bitte Hilfe bei einem Szenario:
Im Wohnzimmer sind vier Rolläden (1x Türe und 3x Fenster), diese werden automatisch zu definierten Uhrzeiten hoch und runtergfahren - funktioniert einwandfrei.
Nun würde ich gerne im 1. Schritt einen Funk-Fenster-Drehgriffkontakt HM-Sec-RHS einbinden, dieser soll verhindern das das Rollo an der Türe runterfährt wenn die Türe geöffnet ist (ich will mich nicht aussperren).
Zudem hätte ich gerne das beim Kippen der Türe das Rollo sich leicht öffnet zum Lüften. Ich hab schon ein paar Threads gelesen, verstehe aber irgendwie nur Bahnhof.
Im 2. Schritt würde ich das auf die Fenster ausdehnen, hier würde mir "Lüften" reichen.
Was müsste ich an meiner Konfig ändern, aktuell sieht sie so aus:
Die Rollos habe ich in einer Gruppe zusammengefasst und lasse sie zeitgesteuert fahren (unten noch der Griffsensor):
define Jalousie_Alle structure room Jalousie_1 Jalousie_2 Jalousie_3 Jalousie_4
attr Jalousie_Alle room 1_EG_WZ
define Jalousie_Alle.JedenTag_an at *07:30:00 {fhem("set Jalousie_Alle on")}
attr Jalousie_Alle.JedenTag_an room 1_EG_WZ
define Jalousie_Alle.JedenTag_aus at *{sunset(0,"17:00","22:00")} set Jalousie_Alle off
attr Jalousie_Alle.JedenTag_aus room 1_EG_WZ
attr Jalousie_Alle eventMap on:Auf off:Zu stop:Stop 65:Halbschatten 40:Vollschatten 24:Lüften statusRequest:Status
attr Jalousie_Alle webCmd Auf:Zu:Stop:Halbschatten:Vollschatten:Lüften:Status
define Griffsensor_1_Terasse CUL_HM 21E96D
attr Griffsensor_1_Terasse .devInfo 910101
attr Griffsensor_1_Terasse .stc 80
attr Griffsensor_1_Terasse IODev HMLAN1
attr Griffsensor_1_Terasse actCycle 028:00
attr Griffsensor_1_Terasse actStatus alive
attr Griffsensor_1_Terasse autoReadReg 4_reqStatus
attr Griffsensor_1_Terasse expert 2_full
attr Griffsensor_1_Terasse firmware 2.1
attr Griffsensor_1_Terasse model HM-SEC-RHS
attr Griffsensor_1_Terasse peerIDs
attr Griffsensor_1_Terasse room 1_EG_WZ
attr Griffsensor_1_Terasse serialNr KEQ0550078
attr Griffsensor_1_Terasse subType threeStateSensor
define FileLog_Griffsensor_1_Terasse FileLog ./log/Griffsensor_1_Terasse-%Y.log Griffsensor_1_Terasse
attr FileLog_Griffsensor_1_Terasse logtype text
attr FileLog_Griffsensor_1_Terasse room 1_EG_WZ
define ActionDetector CUL_HM 000000
attr ActionDetector actCycle 600
attr ActionDetector event-on-change-reading .*
Über Tips würde ich mich freuen!
Ich habe mir dafür zwei Perl Funktionen gebaut!
Schaue mal ob du damit klar kommst!
Es müssen Homematic Komponenten sein und die Aktoren muessen das Schluesselwort Rollo im Namen enthalten!
#################################################
# $Id: 99_myUtilsRollos.pm 1932 2012-10-06 20:15:33Z ulimaass $
package main;
use strict;
use warnings;
use POSIX;
sub
myUtilsRollos_Initialize($$)
{
my ($hash) = @_;
}
######################################
#
#####################################
sub rollos_runter()
{
my @rollos=devspec2array("TYPE=CUL_HM");
foreach(@rollos) {
if (/.*Rollo.*/) {
# Pruefen ob Rollos schon unten sind
if ( Value($_) eq "runter" ) {
Log 3,"[rollos_runter] - Name: ".$_." ist schon unten - wird ignoriert!";
}
elsif ( Value($_) eq "20" ) {
Log 3,"[rollos_runter] - Name: ".$_." ist zu 20% offen - wird ignoriert!";
}
elsif (Value("EG.WZ.Terrassentuer") eq "open" && $_ eq "EG.WZ.Rollo.Tuer") {
Log 3, "[rollos_runter] - Name: ".$_." wird nicht heruntergefahren, da die Tuer auf ist!";
}
elsif ( Value($_) eq "hoch") {
if (Value("EG.WZ.Terrassentuer") eq "tilted" && $_ eq "EG.WZ.Rollo.Tuer") {
Log 3, "[rollos_runter] - Name: ".$_." wird auf 20% heruntergefahren, da die Tuer gekippt ist!";
fhem("set ".$_." 20");
}
else {
Log 3,"[rollos_runter] - Name: ".$_." wird heruntergefahren!";
fhem("set ".$_." runter");
}
}
}
}
}
######################################
#
#####################################
sub rollos_hoch()
{
my @rollos=devspec2array("TYPE=CUL_HM");
foreach(@rollos) {
if (/.*Rollo.*/) {
# Pruefen ob Rollos schon oben sind
if ( Value($_) eq "hoch" ) {
Log 3,"[rollos_hoch] - Name: ".$_." ist schon oben - wird ignoriert!";
}
else {
Log 3,"[rollos_hoch] - Name: ".$_." wird hochgefahren!";
fhem("set ".$_." hoch");
}
}
}
}
1;
bei mir ist es ein dummy und ein wenig drum herum ...
define dummy.rollade.1 DUMMY
define RolladeWohnzimmerAuf AT *{sunrise(0,"06:00","07:00")} set hm.rollade.1 on;
set hm.rollade.2 on;
set dummy.rollade.1 on;
define RolladeWohnzimmerZu AT *{sunset(0,"19:00","23:00")} set hm.rollade.2 off;
IF ([hm.sec.1:state] eq "closed") (set hm.rollade.1 off);
set dummy.rollade.1 off
define hm.sec.1.open NOTIFY hm.sec.1:open IF ([dummy.rollade.1:state] eq "off") (set hm.rollade.1 pct 90)
define hm.sec.1.closed NOTIFY hm.sec.1:closed IF ([dummy.rollade.1:state] eq "off") (set hm.rollade.1 off)
Hallo ihr zwei,
erst mal vielen Dank für eure Antworten, ich werde das mal testen!
Wobei ich keine Ahnung habe, wie das mit der Perl Variante funktioniert...
Ich geb noch mal Bescheid!
So habe nun zumindest die zweite Variante zum Laufen gebracht, die Perl Variante von P.A.Trick leider nicht.
Leider klappt es noch nicht ganz:
Die "notify" reagieren leider nicht "nur" in der Nacht, sondern auch am Tag, also beim Schließen des Griffes fährt der Rolladen zu...
Wie kann ich das ändern bzw. auf die Nacht beschränken?
Hallo,
isday() bzw. !isday()
Oder du prüfst direkt eine Uhrzeit ab - Codes dafür gibt es ja schon zur Genüge (hier im Forum und auch im Wiki).
Grüsse
Ich habe eine dummy Variable Rollladen_soll, die mittels sunset/rise auf offen oder geschlossen gesetzt wird. Somit kann man das Zufahren der Rollläden am Tage verhindern.
Zitat von: puckthefly am 21 Juli 2014, 13:16:40
So habe nun zumindest die zweite Variante zum Laufen gebracht, die Perl Variante von P.A.Trick leider nicht.
Leider klappt es noch nicht ganz:
Die "notify" reagieren leider nicht "nur" in der Nacht, sondern auch am Tag, also beim Schließen des Griffes fährt der Rolladen zu...
Wie kann ich das ändern bzw. auf die Nacht beschränken?
Sorry für die Späte Antwort ...
der Dummy ist für den Sollzustand da ... On = Rollade auf, ist der Dummy noch nicht gesetzt, dann steht er auf Off und die Logik ist im "Nachtmodus". Das System braucht also einmal einen Startzustand ODER Du wartest einen der beiden ATs ab, damit der Zustand mit gesetzt wird.
Liebe Grüße aus Barcelona
Ralf
Hallo zusammen,
die Lösung funktioniert nun eiwandfrei seit einigen Wochen, der Tip von Wuppi68 brachte bei mir den Durchbruch.
Danke an alle die geholfen haben :)
Grüße Stefan
Hallo, ich habe jetzt die Perl variante von P.A.Trick eingebaut.
Leider geht das Rollo auch am Tage runter.
define Rollo_Flur_Auf at *{sunrise(-900,"07:55","09:00")} set Rollo_Flur on
define Rollo_Flur_Zu at *{sunset(-900,"17:00","21:30")} set Rollo_Flur off
habe ich in der cfg drin.
Kann mir vielleicht jemand sagen wie ich das kombiniere?
Danke schon mal.
Hallo,
ZitatLeider geht das Rollo auch am Tage runter.
Was heisst das?
Den Ausführungszeitpunkt deiner at siehst du in FHEM und die werden zu dem dort angegeben Zeitpunkt ausgeführt.
Das siehst du im Logfile.
Was willst du kombinieren?
Und schon wieder die Nachfragen weil die Glaskugel zum polieren ist.
Grüße
Zitat von: Badflex am 13 November 2014, 10:17:27
Hallo, ich habe jetzt die Perl variante von P.A.Trick eingebaut.
Leider geht das Rollo auch am Tage runter.
define Rollo_Flur_Auf at *{sunrise(-900,"07:55","09:00")} set Rollo_Flur on
define Rollo_Flur_Zu at *{sunset(-900,"17:00","21:30")} set Rollo_Flur off
habe ich in der cfg drin.
Kann mir vielleicht jemand sagen wie ich das kombiniere?
Danke schon mal.
War wohl nicht ganz verständlich. Sorry
Also, ich hatte vorher die beiden sunrise und sunset Zeilen drinn. Funktioniert auch alles super.
Jetzt habe ich den Perl code von P.A.Trick ( siehe oben ) eingefügt, damit ich mich nicht aussperre wenn ich zufällig mal zur bestimmten Zeit rausgehen wenn das Rollo runter fährt.
Also wenn die Tür offen ist soll das Rollo erst runter fahren wenn ich die Tür wieder schließe.
Da hat mir die Perl variante gut gefallen da ich nicht 1000 dummys haben möchte.
Deswegen hatte ich gefragt,wie man am besten die beiden Sachen zusammenfügt.
Zitat von: Badflex am 13 November 2014, 10:17:27
Hallo, ich habe jetzt die Perl variante von P.A.Trick eingebaut.
Leider geht das Rollo auch am Tage runter.
define Rollo_Flur_Auf at *{sunrise(-900,"07:55","09:00")} set Rollo_Flur on
define Rollo_Flur_Zu at *{sunset(-900,"17:00","21:30")} set Rollo_Flur off
habe ich in der cfg drin.
Kann mir vielleicht jemand sagen wie ich das kombiniere?
Danke schon mal.
Hi, versuche mal folgendes!
define Rollo_Flur_Auf at *{sunrise(-900,"07:55","09:00")} {rollos_hoch;}
define Rollo_Flur_Zu at *{sunset(-900,"17:00","21:30")} {rollos_runter;}
Du musst aber noch die Perl Funktion anpassen!
Bei mir heisst der Drehgriff
EG.WZ.Terrassentuer und das Rollo
EG.WZ.Rollo.Tuer
! Wenn du mir deine Namen nennst, kann ich das auch gerne für dich übernehmen und die Funktion
dementspechend abändern!
Oh ja logisch.
Vielen Dank
Ich hab das jetzt mal genau so eingefügt.
Leider kommt jetzt bei jedem aufruf von fhem:
Error messages while initializing FHEM:
configfile: Unknown command }, try help.
Unknown command }, try help.
Das gleiche steht auch wenn ich meine 99_myUtils.pm reloaden will.
Das einzige was ich dort geändert habe ist myUtilsRollos_Initialize($$) in myUtils_Initialize($$)
Dann hast du wohl Fehler drinnen.
P.S.: Und frag jetzt nicht welche, wenn du das wissen willst wäre es nett wenn du den Code posten würdest :P
Edith: Wobei - welche Fehler es sind steht ja in der Meldung ::)
Zitat von: Puschel74 am 18 November 2014, 19:36:37
Dann hast du wohl Fehler drinnen.
P.S.: Und frag jetzt nicht welche, wenn du das wissen willst wäre es nett wenn du den Code posten würdest :P
Edith: Wobei - welche Fehler es sind steht ja in der Meldung ::)
Also nochmal
define Rollo_Flur_Auf at *{sunrise(-900,"07:55","09:00")} {rollos_hoch;}
define Rollo_Flur_Zu at *{sunset(-900,"17:00","21:30")} {rollos_runter;}
Und die myUtils:
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
sub rollos_runter()
{
my @rollos=devspec2array("TYPE=CUL_HM");
foreach(@rollos) {
if (/.*Rollo.*/) {
# Pruefen ob Rollos schon unten sind
if ( Value($_) eq "off" ) {
Log 3,"[rollos_runter] - Name: ".$_." ist schon unten - wird ignoriert!";
}
elsif ( Value($_) eq "20" ) {
Log 3,"[rollos_runter] - Name: ".$_." ist zu 20% offen - wird ignoriert!";
}
elsif (Value("Terrassentuer") eq "open" && $_ eq "Rollo_Flur") {
Log 3, "[rollos_runter] - Name: ".$_." wird nicht heruntergefahren, da die Tuer auf ist!";
}
elsif ( Value($_) eq "on") {
if (Value("Terrassentuer") eq "tilted" && $_ eq "Rollo_Flur") {
Log 3, "[rollos_runter] - Name: ".$_." wird auf 20% heruntergefahren, da die Tuer gekippt ist!";
fhem("set ".$_." 20");
}
else {
Log 3,"[rollos_runter] - Name: ".$_." wird heruntergefahren!";
fhem("set ".$_." off");
}
}
}
}
}
######################################
#
#####################################
sub rollos_hoch()
{
my @rollos=devspec2array("TYPE=CUL_HM");
foreach(@rollos) {
if (/.*Rollo.*/) {
# Pruefen ob Rollos schon oben sind
if ( Value($_) eq "on" ) {
Log 3,"[rollos_hoch] - Name: ".$_." ist schon oben - wird ignoriert!";
}
else {
Log 3,"[rollos_hoch] - Name: ".$_." wird hochgefahren!";
fhem("set ".$_." on");
}
}
}
}
1;
Danke für die Fehlersuche.:-)
Hallo,
http://www.fhemwiki.de/wiki/99_myUtils_anlegen (http://www.fhemwiki.de/wiki/99_myUtils_anlegen)
Hier findest du auch wie eine sub in der 99_myUtils.pm aufgerufen werden sollte.
define Rollo_Flur_Auf at *{sunrise(-900,"07:55","09:00")} {rollos_hoch}
define Rollo_Flur_Zu at *{sunset(-900,"17:00","21:30")} {rollos_runter}
Ich geh mal davon aus das das ; am Ende gestört hat.
In der myUtils (du weisst aber das die 99_myUtils heissen sollte ??? ) würde ich, wenn der Fehler immer noch vorhanden ist erstmal alle unnötigen Leerzeilen rauswerfen.
Ich hab deinen Code - den Beitrag bitte übrigens nochmal bearbeiten und Code-Tags verwenden, danke - in Notepad++ eingefügt und es waren mehr Leerzeilen drinnen als einem lieb sein könnte.
Ich weiß nicht ob das der Fehler sein kann da ich meine sub`s grundsätzlich OHNE Leerzeilen schreiben (wozu sollen die gut sein ??? ).
Grüße
Fehler gefunden. Hatte mit eventmap on und off auf hoch und runter geändert.
Wüste nicht das er bei der anfrage nur die Internals liest.
Habe die zwei Zeilen jetzt geändert und es funktioniert.
# Pruefen ob Rollos schon unten sind
if ( Value($_) eq "runter" ) {
Log 3,"[rollos_runter] - Name: ".$_." ist schon unten - wird ignoriert!";
}
elsif ( Value($_) eq "20" ) {
Log 3,"[rollos_runter] - Name: ".$_." ist zu 20% offen - wird ignoriert!";
}
elsif (Value("Terrassentuer") eq "open" && $_ eq "Rollo_Flur") {
Log 3, "[rollos_runter] - Name: ".$_." wird nicht heruntergefahren, da die Tuer auf ist!";
}
elsif ( Value($_) eq "hoch") {
if (Value("Terrassentuer") eq "tilted" && $_ eq "Rollo_Flur") {
Log 3, "[rollos_runter] - Name: ".$_." wird auf 20% heruntergefahren, da die Tuer gekippt ist!";
fhem("set ".$_." 20");
}