Keymatic / Alltagsschliessung und Urlaubsschliessung

Begonnen von CarlMcCoy, 26 Januar 2014, 16:49:42

Vorheriges Thema - Nächstes Thema

CarlMcCoy

Hallo Leute,
ich habe Keymatic im Einsatz und lasse es derzeit jeden Werktag um 22:00 Uhr schliessen. Morgens schliesst das Schloss um 6.45 Uhr auf. Äquivalent werden am Wochenende die Schliess- und Öffnungszeiten auf 23:00 Und 8:00 Uhr gestellt.

Nun ist ein Urlaub somit nicht abgedeckt, deswegen habe ich mir vorgestellt einen Dummy Schalter zu haben, der bei "On" den Alltag abbildet und bei "Off" in den Urlaubsmodus schaltet. Dabei soll im Urlaubsmodus geprüft werden, ob die Tür unlocked ist, und ggf. diese schliessen und geschlossen halten.

Dabei ist folgendes Herausgekommen, was ich aber noch nicht live getestet habe.
Mir ist wohler, wenn ein erfahrener User über den Code schaut, denn was Perl und fhem angeht bin ich noch ziemlich grün hinter den Ohren.

Das ist mein Code:
define Haustuer dummy
attr Haustuer room Steuerung
attr Haustuer setList on off

define HaustuerLock notify Haustuer {if ("$Value{Haustuer}" eq "on") {
fhem("define HaustuerLock at *22:00:00 set HS_Tuer lock");;
fhem("set HS_Tuer inhibit on");;
fhem("define HaustuerUnlock at *06:45:00 set HS_Tuer unlock");;
fhem("set HS_Tuer inhibit off")
}
else {if ("$Value{lock}" ne "locked") {
fhem("set HS_Tuer lock");;
fhem("set HS_Tuer inhibit on")
}
}


Würde das, das gewünschte Szenario abdecken?

Vielen Dank & Grüße

CarlMcCoy

Grisu

Hoi CarlMcCoy

Ich sehe da schon ein Problem:
der Befehl fhem("define HaustuerUnlock at *06:45:00 set HS_Tuer unlock");; bleibt bei deiner else Anweisung bestehen und wird brav die Türe öffnen. du musst in der Else Anweisung also noch folgendes einbauen   fhem ("delete HaustuerUnlock ") if (Value("HaustuerUnlock ") ne "");;\
fhem ("delete HaustuerLock ") if (Value("HaustuerLock ") ne "");;\
Auch die Lock Anweisung muss gelöscht werden, ansonsten wird beim ausschalten der FerienSteuerung eine Fehlermeldung geworfen.

Verwende etwas sprechendere Namen zb.Haustür on off > kann Tür oder Schloss gemeint sein.  Die Variable "lock" kann auch alles mögliche sein. Denk daran deine Haussteuerung wird bestimmt noch erweitert werden. Daher sind sprechende Namen besonders wichtig.

Gruss Grisu
PS Testen nicht vergessen ;-)
2x RPI B+ 1x FritzBox7390 1x USV
1x HM-Lan 1x cul433 1x cul868
9x HM Türkontakt 1x Heizzyklen Überw. 1x Ultraschall Öl Pegel 1x Regens. 15x IT Z.stecker 2x HM Dimmer 6x FS20 Dimmer 1x Stromzähler 1x FS20 to Infrarot 3x HM Rauchmelder 3x Temp 10x Sender
Alarmanlage Aquariumst. Terrariumst.

CarlMcCoy

Hi Grisu,

danke für deine Anmerkungen.
Klingt einleuchtend!
Die sprechenden Namen habe ich berücksichtigt.

Zum Verständnis: 
fhem ("delete HaustuerUnlock ") if (Value("HaustuerUnlock ") ne "");;\
fhem ("delete HaustuerLock ") if (Value("HaustuerLock ") ne "");;\

Würde es nicht ausreichen in der "else" Anweisung einfach fhem ("delete HaustuerUnlock ") zu schreiben?

Testen versteht sich von selbst! ;-)

Grüße
CarlMcCoy

Grisu

leider nein

Weil beim ausschalten der Feriensteuerung der Befehl fhem("define HaustuerLock at *22:00:00 set HS_Tuer lock");; erneut ausgeführt wird. Ein define auf ein bereits definiertes Element führt zu einem Fehler. Ein delete auf ein nicht vorhandenes Element ebenso darum if (Value("HaustuerLock ") ne "")Probier es aus und verfolge die Einträge im Log. Du kannst den Inhalt des Log zur besseren Übersicht vorher löschen.

Gruss Grisu
2x RPI B+ 1x FritzBox7390 1x USV
1x HM-Lan 1x cul433 1x cul868
9x HM Türkontakt 1x Heizzyklen Überw. 1x Ultraschall Öl Pegel 1x Regens. 15x IT Z.stecker 2x HM Dimmer 6x FS20 Dimmer 1x Stromzähler 1x FS20 to Infrarot 3x HM Rauchmelder 3x Temp 10x Sender
Alarmanlage Aquariumst. Terrariumst.

CarlMcCoy

#4
Hi,

@Grisu, danke für deine Tipps.

ich habe jetzt erst Zeit dazu gefunden, mich wieder dem Thema zu widmen.
Das ist jetzt mein Code-Schnipsel direkt aus der fhem.cfg kopiert.

# Urlaubssteuerung für die Haustür
define Haustuerschloss dummy
attr Haustuerschloss eventMap /on:Alltag/off:Urlaub/
attr Haustuerschloss room Steuerung
attr Haustuerschloss setList on off

define HaustuerSchlossLock notify Haustuerschloss (if (Value('Haustuerschloss') eq "Alltag")) { \
{fhem("define HaustuerLock at *22:00:00 set HS_Tuer lock")}
{fhem("define HaustuerUnlock at *06:45:00 set HS_Tuer unlock")}
{fhem("set HS_Tuer inhibit off")}
} \
elsif (Value("lock") ne "locked") { \
{fhem("delete HaustuerUnlock ") if (Value("HaustuerUnlock ") ne "")}
{fhem("delete HaustuerLock ") if (Value("HaustuerLock ") ne "")}
{fhem("set HS_Tuer lock")}
{fhem("set HS_Tuer inhibit on")}
}


Beim Speichern bekomme ich die Fehlermeldung: Unknown command }, try help. Unknown command }, try help.
Das lustige ist, das soweit alles funktioniert. Klicke ich dann aber auf "Save Config" bleibt das aus meiner fhem.cfg übrig:
# Urlaubssteuerung für die Haustür
define Haustuerschloss dummy
attr Haustuerschloss eventMap /on:Alltag/off:Urlaub/
attr Haustuerschloss room Steuerung
attr Haustuerschloss setList on off

define HaustuerSchlossLock notify Haustuerschloss (if (Value('Haustuerschloss') eq "Alltag")) { \
{fhem("define HaustuerLock at *21:57:00 set HS_Tuer lock")}
define HaustuerUnlock at *21:59:00 set HS_Tuer unlock


Ich sehe momentan nicht, was bei den Klammern nicht stimmt. Setze ich weitere Backslashes hinter den abschliessenden geschwungenen Klammern, funktioniert nichts mehr, aber die Fehlermeldungen bleiben aus..
Kann mir einer meine Augen öffnen?

Grüße
CarlMcCoy

Puschel74

Hallo,

Zitatdirekt aus der fhem.cfg
Der nächste der direkt in der fhem.cfg rumfuhrwerkt und dann um Hilfe schreit wenn der Code nicht klappt.

2 Möglichkeiten - wie immer:
a) selbst schauen was los ist oder
b) Finger weg von der fhem.cfg <-- ich empfehle das

Grüße
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.

CarlMcCoy

Danke Puschel74,

die letzten Beiträge, die ich von Dir hier im Forum gelesen habe, waren recht frustriert.
Wenn Du es Leid bist, Hilfestellung zu leisten, dann lass es doch bleiben und konzentriere dich auf deine Arbeit als Moderator. <- Ich empfehle das, spart dir 'ne Menge Nerven.

Wie soll jemand tiefer in die Materie einsteigen und die ganzen Zusammenhänge verstehen, wenn man bei auftretenden Fragen so abgebügelt wird?
Und bevor die Frage kommt, ob ich das Einsteiger PDF gelesen habe, ja habe ich.

Mir ist schon klar, dass normalerweise die Zeilenumbrüche in der fhem.cfg mit den Backslashes gekennzeichnet werden.
Nur wenn ich den code im Webfrontend für die Benachrichtigung eingebe, ist zwar die Schreibweise der Zeilenumbrüche korrekt, aber der Code an sich funktioniert nicht.
Dieser Umstand ist mir nicht klar.

Grüße
CarlMcCoy

Puschel74

#7
Hallo,

wie uns was mich frustiert oder nicht entscheide ich aber danke für den gut gemeinten Rat.
Um in die Materie einzusteigen und die Zusammenhänge zu verstehen muss man nicht zwingend die fhem.cfg bearbeiten.
Den das bringt idR nur! Fehler mit sich wenn man nicht versteht was man macht.
FHEMWEB ist um einiges Fehlertoleranter und zeigt die Fehler idR auch direkt an - ohne das man das Logfile bemühen müsste.

Wenn der Code nicht funktioniert sollte vielleicht ein Blick ins LogFile helfen?
Stehen dort Fehlermeldungen?

Grüße

Edith: Was auch gerne für unverhersebare Fehler sorgt sind Leerzeichen am Ende der Zeilen - evtl. mal danach schauen.
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.

CarlMcCoy

Hi Puschel74,

danke für die Tipps, wo sich die Fehlerteufel einschleichen können.
Um eins noch sicher zu stellen. ich editiere nicht die fhem.cfg in der Shell sondern nur über FHEMWEB über "Edit Files".
Die Fehler, die gepostet hatte, waren die Meldung, die ich bekam, nachdem ich auf "Save fhem.cfg" geklickt habe.

Habe ich keine Meldung beim Abspeichern, bekomme ich leider auch keine Hinweise, was am Code falsch sein könnte, denn es wird nichts ins Log geschrieben.

Grüße
CarlMcCoy