[Beginner] Rolladensteuerung

Begonnen von casy_, 28 März 2013, 11:57:30

Vorheriges Thema - Nächstes Thema

casy_

Hallo zusammen,

ich bin mittlerweile echt fasziniert von den Möglichkeiten mit FHEM und der ganzen Automatisierungsgeschichte.

Nachdem ich nun - nicht lachen, es ist ein Anfang - FHEM installiert, HM-LAN-Adapter konfiguriert und einen Dimmer für die Wohnzimmerlampe eingebaut habe, will ich mehr. Das bisherige war eigentlich nur ein Test, ob das ganze Sinn macht oder ob ich sag: ach, so ein Blödsinn brauche ich nicht.

Im nächsten Schritt soll realisiert werden, dass

1. die Rollade gegen 22:00 Uhr herunterfährt (wenn jemand zu Hause ist)
2. die Rollade herunterfährt wenn die Sonne untergeht (aber nur wenn niemand zu Hause ist)
3. die Rollade nur herunterfährt, wenn die Tür geschlossen ist

Ich muss noch einiges Lesen, aber ich habe da mal Fragen, da ich Zusammenhänge einfach nicht in den Kopf bekomme.

Ich möchte gerne eine Anwesenheit prüfen - jetzt erstmal rudimentär mit einem Schalter HM-PB-2-WM55. Eigentlich soll (erstmal) nichts passieren als einen Status zu setzen je nach Tastenbetätigung (ANWESEND=0 oder ANWESEND=1). Kann ich eine Variable wohl so mit Hilfe des Schalters belegen?

Die Rolladen sollen automatisch runterfahren. Und zwar bei Status ANWESEND=0 immer zum Sonnenuntergang und bei Status ANWESEND=1 immer um 22:00 Uhr.
Wäre dies eine ifelse-Abfrage? Funktioniert das so, wie ich mir das vorstelle?

Nächste Schritt wäre dann der Funk-Tür-Drehgriff-Kontakt. Wenn der offen ist soll nix mit Rollade passieren (weil dann die Wahrscheinlichkeit recht groß ist, dass ich auf der Terasse sitze --- und keinen Haustürschlüssel dabei habe :) ). Sollte sich doch auch irgendwie (wie?) in die Abfragen einbinden lassen?

Und dann kommen die Erweiterungswünsche die meinen Kopf platzen lassen:
- Ist die Rollade unten und ich öffne die Tür dann soll die Rollade ein paar Sekunden hochfahren (Frischluftzufuhr, wird meist gnemacht wenn der Kamin an ist).

- Wenn wir nach Hause kommen und den Anwesenheitsschalter drücken, und es ist nach Sonnenuntergang (Rolladen sind unten) und es ist vor 22:00 Uhr, dann soll das Wohnzimmerlich eingeschaltet werden und die Rolladen hochgefahren werden....
(hier frage ich mich, ob ich besser den Zeitraum (Nach Sonnenuntergang únd vor 22:00 Uhr) abfrage oder besser gucke ob es vor 22:00 Uhr ist und die Rolladen geschlossen sind. Macht das einen Unterschied?

Danke für die Antworten/Denkanstöße




martinp876

Hi,

mein Vorschlag:
variablen kann man in einem "dummy" 'verstecken'
Verknuepfungen werden ueber notify hergestellt.

dein "HM-PB-2-WM55" laesst du auto-erstellen, dann evtl renamen (damit es in mein Beispiel passt)
rename <dev> myPB
rename <chn1> myPB_Home
rename <chn2> myPB_Away

define Anwesend dummy  # definition der 'user'-Variablen
                                               
define nf1 notify myPB_Home set Anwesend ja    #jetzt die "Verknuepfung"
define nf2 notify myPB_Away set Anwesend nein  #Loesung mit 2 notify, geht auch mit einem

define a15 at *{sunset("REAL",0,"18:00","21:00")} {if(ReadingsVal("Anwesend","")eq "nein"){set Rollo off}}

details zu sunset... nachlesen
Die Verknuepfungen kannst du natuerlich komplexer machen

Zitat..Funk-Tür-Drehgriff-Kontakt. Wenn der offen ist soll nix mit Rollade passieren ...
in die Abfrage oben

Zitat- Ist die Rollade unten und ich öffne die Tür dann soll die Rollade ein paar Sekunden hochfahren (Frischluftzufuhr, wird meist gnemacht wenn der Kamin an ist).

das wuerde ich in HM loesen. Also den Fensterkontakt (wenn HM)mit dem Rollo peeren.

Generell hast du wie oben beschrieben alle trigger und verknuepfungen, kombinieren musst du jetzt selbst.
Uhrzeit, Sonnenuntergang, Anwesendheit (falls alle ein smartphone am mann/frau haben und sich dieses am WLAN einbucht... wer kein smartphone hat ist eh nicht existent;-) )

Verknuepfungen 'innernhalb' von HM wuerde ich (geschmackssache) immer direkt machen, also peeren. Verknuepfungen nach 'extern' Uhrzeit, pings,... gehen nicht HM intern.
HMintern gehen nur 'trigger',also veraenderungen. Will sagen wenn ein Fenster schon offen ist und jemand will eine Aktion ausloesen kann dies NICHT innerhalb von HM erledigt werden, das geht ueber die Zentrale.

Gruss
Martin

casy_

Hui,

wieder eine Menge Input an Anstöße... VIELEN DANK dafür!
Damit kann ich sicherlich jetzt übers WE was basteln. Aber langsam Schritt für Schritt.

Eins habe ich nicht verstanden - oder ich will es nicht verstehen!?

Du schreibst was mit
ZitatVerknuepfungen 'innernhalb' von HM wuerde ich (geschmackssache) immer direkt machen, also peeren. Verknuepfungen nach 'extern' Uhrzeit, pings,... gehen nicht HM intern.
HMintern gehen nur 'trigger',also veraenderungen. Will sagen wenn ein Fenster schon offen ist und jemand will eine Aktion ausloesen kann dies NICHT innerhalb von HM erledigt werden, das geht ueber die Zentrale.

Ich habe da echt Verständnisprobleme mit dem "innerhalb". Ich könnte den Drehgriff-Schalter direkt mit dem Rolladenaktor pairen? Okay. Aber wie und wo gebe ich nun den Befehl was passieren soll, wenn der Drehgriff-Schalter auf "on" oder "open" gestellt wird? Benötige ich dazu die HM-Software (ist nicht installiert)?

martinp876

Hi,

HM devices koennen sich untereinander unterhalten. Andere "Familien" koennen das auch, aber es geht immer nur innerhalb einer "Familie".

Hier jetzt mit HM Fokus:
Du kannst immer alle trigger an die Zentrale melden, die trifft die Entscheidungen und sendet ggf Kommandos.

Du kannst aber auch Kanaele (also einzelne Buttons, einzelne schalter) miteinander direkt verknuepfen.

In beiden Faellen hoert die Zentrale mit und protokolliert alles. Ausserdem kannst du beides mischen, was wohl der Normalfall ist. Festlegen musst du welche der Funktionen du auf welche weise erschlagen willst.

Direkt verknuepfen hat generell den Vorteil, dass du die Zentrale nicht 'brauchst' (nur einstellen und loggen). Es ist also ausfallsicherer und schneller. Die Grenzen kannst du dir sicher denken: keine Tageszeiten, keine komplexen trigger-verknuepfungen..., kein zugang zu anderen Familien (fs20,...)

Direkt-verknuefen (peeren) kann man channels, also die Funktionseinheiten eines Geraets (ein Button mit einem Schalter). Verknuepft werden immer sensoren (ein Button ist auch ein Sensor) mit Aktoren. Der Sensor schickt einfache trigger (long press, short press, ggf auch einen helligkeitswert bei motin detector). Es ist immer der Aktor, der etscheidet, was gemacht wird, also die Reaktion auf den Trigger. Aktor und sensor koennen mit mehreren "peers" gepeert weden.
-Jeder- peer wird im Aktor-channel separat programmiert und modifiziert.

HM beschreibt das peeren anl direktes anlernen. Damit das ganze nicht so schwer sut setzt HM defaults. Beispiel dimmer (damit kann man extrem komplexe szenarien bauen, muss man aber nicht):
Du peerst -einen- button mit dem dimmer. Dieser wird eine Funktion "toggle-dim" implementieren.
- kurzer druck: an, noch mal:aus
- langer druck: hochdimmen, noch mal:runterdimmen.

Du peerst -zwei- button mit dem dimmer gleichzeitig. Dieser wird eine Funktion "dim-up"  und eine "dim_down sein, jeder Button dediziert.

Im Nachhinein kannst du die ganzen Einstellungen auslesen und modifizieren, kannst treppenhausschalter bauen, einschaltverzoegerung, dimmgeschwindigkeit,maxdim,mindim fuer jeden Button separat, blinklicht(waere meist ein Bug...)
Beim dimmer gibt es noch virtuel-channels... fuer noch komplexere aufbauten...

Was einzustellen ist kann man mit  
get <name> regList
ansehen.
Was programmiert ist mit
set <name> getConfig
abholen und mit
get <name> ral all
einsehen (der im web-interface)

ein dimmer und ein push-button sollten fuer das erste Wochenende reichen ;-)


casy_

Zitat von: martinp876 schrieb am Do, 28 März 2013 14:12ein dimmer und ein push-button sollten fuer das erste Wochenende reichen ;-)

Ich beginne zu verstehen... interessante Ansätze.

Ich habe heute drei Rolladenaktore, zwei Drehgriffkontaktschalter und ein Taster erhalten.

Aufgrund der von Dir beschriebenen Komplexität des Ganzen werde ich dann mal mit einem Rolladenaktor beginnen.
Schritt zwei dann mit dem Taster als "Anwesend"- oder "Abwesend"-Abhängige Schliesszeit.
Dann Schritt drei mit dem Türdrehgriffkontakt... vielleicht reicht das WE nicht aus, da ich das ja auch noch bloggen will - für die mir nachfolgenden Fachidioten :D

Danke erstmal... Ich melde mich kurzfristig bei den ersten Schwierigkeiten :)


casy_

Tja, wenn man nunmal keine Ahnung hat....

Also: ich möchte mal was ganz einfaches machen - einfach nur um zu verstehen. In der täglichen Praxis ist das wahrscheinlich unsinnig aber für mich will ich es einfach mal hinbekommen.

Ich habe eine Wohnzimmerlampe mit Dimmer und an der Tür den Türgriffdrehschalter (HM-Komponenten). Nach den Sachen im zweiten Post hier habe ich mal versucht zu realisieren, dass das LIcht angeht, wenn die Tür geöffnet wird.

Zitatdefine test notify WZ_Terassentuer_rechts contact: open set Tuer_auf ja

define lichtanbeituerauf {if(ReadingsVal("Tuer_auf","")eq "ja"){set WZ_Deckenleuchte on}}

Das funktioniert nicht... aber: Warum nicht?

Es gibt WZ_Deckenleuchte (Dimmer) und WZ_Terassentuer_rechts (Türgriffdrehschalter). Nur gibt es beim Speicher von FHEM schonmal die Fehlermeldungen:
ZitatUnknown module {if(ReadingsVal("Tuer_auf","")eq, choose one of ALL3076 ALL4000T ALL4027 BS CM11 CUL CUL_EM CUL_FHTTK CUL_HM CUL_HOERMANN CUL_IR CUL_RFR CUL_TX CUL_WS Calendar ECMD ECMDDevice EIB EM EMEM EMGZ EMWZ ESA2000 EnOcean FHEM2FHEM FHEMWEB FHT FHT8V FHZ FLOORPLAN FS20 FileLog HMLAN HMS HTTPSRV IPCAM IPWE IT Itach_Relay KM271 KS300 LGTV LIRC M232 M232Counter M232Voltage MSG MSGFile MSGMail NetIO230B OREGON OWAD OWCOUNT OWFS OWID OWLCD OWMULTI OWSWITCH OWTEMP OWTHERM OWX PID POKEYS PachLog RFXCOM RFXMETER RFXX10REC RSS SCIVT SISPM SIS_PMS SML STV TCM TRX TRX_ELSE TRX_LIGHT TRX_SECURITY TRX_WEATHER TUL TellStick Twilight USBWX USF1000 VantagePro2 WEBCOUNT WEBIO WEBIO_12DIGITAL WEBTHERM WOL WS2000 WS300 WS3600 Weather X10 ZWDongle ZWave _internal_ at autocreate average dewpoint dummy holiday notify sequence structure telnet watchdog weblink xxLG7000 Please define nf1 first

Was zum Henker mache ich falsch? Und wie müsste es richtig sein?

Danke für die Hilfe, die mir hilft das Ganze zu verstehen :)

martinp876

Hi casy_

ein define ist immer
define <name> <type> [<param>]

bei einem notify ist der type also "notify"

define lichtanbeituerauf notify {if(ReadingsVal('WZ_Terassentuer_rechts','Tuer_auf','')eq 'ja'){fhem ("set WZ_Deckenleuchte on");;}}

und hier
ReadingVal (<entity>,<reading>,<default>)
von welcher Entity, welches Reading? Falls es dies nicht gibt, was soll der default ruckgabewert sein?

Ausserdem:
define test notify WZ_Terassentuer_rechts contact: open set Tuer_auf ja

ist ein notify namens 'test' das reagiert auf 'WZ_Terassentuer_rechts', also immer wenn diese Entity etwas zu melden hat, egal was. Ausgefuert wird dann "contact: open set Tuer_auf ja"

Evtl wolltest du
define test notify WZ_Terassentuer_rechts.contact:.*open.* set Tuer_auf ja

also immer wenn
WZ_Terassentuer_rechts.contact:.*open.*  
erkannt wird soll de state von Tuer_auf auf 'ja' gesetzt werden

'.' ist ein beliebiges Zeichen, '*' beliebig oft wiederholen.
.* ist also eine beliebige Zeichenkette.

Schau dir einmal regexp an,fuer perl. Das ist ein relativ grosses kapitel

Gruss
Martin


casy_

ja, langsam macht es klick...
beim ersten Lesen der Antwort dachte ich ... wie jetzt?
aber nun wird das alles doch klarer....

Vielleicht kann mir hier - auch zu meinem besseren Verständnis jemand bei Folgendem weiterhelfen:

define WZ_Rollo_Tuer_rechts_ab_anwesend at *22:00 (if (ReadingsVal("anwesend" eq "ja") && ReadingsVal("Tuer_offen" eq "nein"))) {set WZ_Rollo_Tuer_rechts off}

define WZ_Rollo_Tuer_rechts_ab_abwesend at *{sunset("REAL",0,"18:00","21:00")} (if (ReadingsVal("anwesend" eq "nein") && ReadingsVal("Tuer_offen" eq "nein"))) {set WZ_Rollo_Tuer_rechts off}


damit will ich, abhängig von dem Anwesenheitsstatus einen unterschiedlichen Schliesszeitpunkt des Rollos der rechten Tür erreichen.... Das doofe ist, dass ich das auch gerne kürzer haben möchte... ähnlich diesem hier:

define WZ_Rollo_Tuer_rechts_ab at ZEITPUNKT (ReadingsVal("Tuer_offen" eq "nein")) {set WZ_Rollo_Tuer_rechts off}

Hier will ich einen ZEITPUNKT der abhängig von dem Anwesenheitsstatus ist nutzen... und zwar nicht nur für WZ_Rollo_Tuer_rechts.

So, in "meiner Sprache" würde ich ZEITPUNKT wie folgt definieren

.Wenn anwesend=ja
..dann setze ZEITPUNKT = *22:00 Uhr
..sonst setze ZEITPUNKT = *{sunset("REAL",0,"18:00","21:00")

aber wie mache ich das denn nun in Perl, bzw. für FHEM verständlich??
Der Zeitpunkt soll sich so mit jedem Status (anwesend=ja oder anwesend=nein) automatisch anpassen und entsprechend das Rollo schliessen....

LIebe Grüße

Carsten

martinp876

Das geht wohl eher schlecht.
Es wird bei der Definition sicher ein timer aufgezogen, ggf. immer wieder.
Wenn du im Nachhinein den Timer aendern willst geht das nicht, es muesste neu definiert werden.

Gruss
Martin

casy_

ein Timer?

Ich will ja keinen Timer... ich will ja nur, abhängig von bestimmten Bedingungen, eine Uhrzeit in eine Variable speichern.

Ändern sich die Bedingungen, dann soll sich auch die in der Variable hinterlegte Uhrzeit ändern.

Oder verstehe ich jetzt zwischen Timer und Uhrzeit etwas nicht?
Heisst das, dass ich nicht sagen kann: eine Variable ZEITPUNKT beinhaltet 12:00 - und somit würde "at *ZEITPUNKT" gleich "at *12:00" sein?

Was verstehe ich nicht? :confused:

martinp876

nun, wenn du ein notify mit einer Zeitangaben baust muss sich das system dies merken und irgendwann aufwachen um das Notify zu prufen.
Das macht ein system klassischer weise mit timern.

Ein at ist also ein timer

mit at 17:00
sagst du "warte bis 17:00, dann starte meine Aktion"

Wenn du sagen willst
"warte bis Zeitpunkt"
kann das system keinen aufweckzeitpunkt errechnen. Das system muesste regelmaessig nachsehen ob ZEITPUNKT erreicht ist.
Wenn du dies willst musst du 'pollen', also einen regelmaessigen Timer aufziehen (mit at *) und dann jedesmal die Uhrzeit vergleichen.

Gruss
Martin

casy_

ahh, jetzt....

jetzt habe ich das verstanden...

okay, ein aufziehen, bzw. pollen würde dann aber bedeuten, er guckt immer nach, ob sich der Zeitpunkt ändert. Das führt dann wohl in der Konsequenz zu höheren Auslastungen.

Das will ich nicht...

aber: stimmst Du mir zu, dass es mit

define WZ_Rollo_Tuer_rechts_ab_anwesend at *22:00 (if (ReadingsVal("anwesend" eq "ja") && ReadingsVal("Tuer_offen" eq "nein"))) {set WZ_Rollo_Tuer_rechts off}

define WZ_Rollo_Tuer_rechts_ab_abwesend at *{sunset("REAL",0,"18:00","21:00")} (if (ReadingsVal("anwesend" eq "nein") && ReadingsVal("Tuer_offen" eq "nein"))) {set WZ_Rollo_Tuer_rechts off}


funktioniert?

Es soll realisiert werden:
Rollo um 22:00 Uhr herunterfahren, wenn Tür nicht offen und jemand anwesend ist,
Rollo zum Sonnenuntergang(nicht vor 18, nicht nach 21 Uhr), wenn Tür nicht offen und niemand anwesend ist

Das müsste, wenn ich es alles richtig verstanden habe, so richtig sein....

Gruß
Carsten


Billy

Sorry Carsten,
wäre das in der Rubrik FHEM - Allgemein - Anfänger oder Automatisierung nicht besser aufgehoben?

Gruss Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

casy_

wenn es so ist - dann entschuldige ich mich fürs zuspammen dieses Forums für Homematic.

Ich dachte mein Beitrag wäre hier sinnvoll thematisch zugeordnet.