FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: CarlMcCoy am 26 Januar 2014, 16:49:42

Titel: Keymatic / Alltagsschliessung und Urlaubsschliessung
Beitrag von: CarlMcCoy am 26 Januar 2014, 16:49:42
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
Titel: Antw:Keymatic / Alltagsschliessung und Urlaubsschliessung
Beitrag von: Grisu am 26 Januar 2014, 17:25:50
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 ;-)
Titel: Antw:Keymatic / Alltagsschliessung und Urlaubsschliessung
Beitrag von: CarlMcCoy am 26 Januar 2014, 20:01:50
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
Titel: Antw:Keymatic / Alltagsschliessung und Urlaubsschliessung
Beitrag von: Grisu am 26 Januar 2014, 20:26:16
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
Titel: Antw:Keymatic / Alltagsschliessung und Urlaubsschliessung
Beitrag von: CarlMcCoy am 01 Februar 2014, 22:16:31
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
Titel: Antw:Keymatic / Alltagsschliessung und Urlaubsschliessung
Beitrag von: Puschel74 am 02 Februar 2014, 08:14:14
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
Titel: Antw:Keymatic / Alltagsschliessung und Urlaubsschliessung
Beitrag von: CarlMcCoy am 02 Februar 2014, 12:26:04
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
Titel: Antw:Keymatic / Alltagsschliessung und Urlaubsschliessung
Beitrag von: Puschel74 am 02 Februar 2014, 12:30:19
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.
Titel: Antw:Keymatic / Alltagsschliessung und Urlaubsschliessung
Beitrag von: CarlMcCoy am 02 Februar 2014, 15:44:23
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