Frage zu Rolladensteuerung (Schalten zu bestimmten Zeiten)

Begonnen von DJ-Mix, 14 Mai 2014, 20:52:46

Vorheriges Thema - Nächstes Thema

DJ-Mix

Hallo zusammen,

möchte gerne meinen Rolladenaktor folgendermaßen schalten
# Rollladen soll fix um 07:00h jeden Tag hochfahren / ausser am WE um 08:00h
define CUL_HM_HM_LC_Bl1PBU_FM_256453_hoch at *07:00 { if (!($we)) { fhem ("set CUL_HM_HM_LC_Bl1PBU_FM_256453 on");; }}
define CUL_HM_HM_LC_Bl1PBU_FM_256453_hochWE at *08:00 { if (($we)) { fhem ("set CUL_HM_HM_LC_Bl1PBU_FM_256453 on");; }}

# Rolladen soll bei Sonnenstand 100° auf 50% fahren und bei 200° wieder auffahren
define CUL_HM_HM_LC_Bl1PBU_FM_256453_sonne notify T.azimuth.* {my $Licht = ReadingsVal("T","azimuth","0");; if (($Licht >= 200) && (Value("CUL_HM_HM_LC_Bl1PBU_FM_256453_sonne") ne "Auf")) {fhem("set CUL_HM_HM_LC_Bl1PBU_FM_256453 on")} elsif (($Licht >= 100) && (Value("CUL_HM_HM_LC_Bl1PBU_FM_256453_sonne") ne "Zu")) {fhem("set CUL_HM_HM_LC_Bl1PBU_FM_256453 50")}}

# Rollladen soll variabel je nach Sonnenuntergang, aber nicht vor 17:00h und nicht nach 20:00h jeden Tag runterfahren
define CUL_HM_HM_LC_Bl1PBU_FM_256453_runter at *{sunset("REAL",480,"17:00","20:00")} set CUL_HM_HM_LC_Bl1PBU_FM_256453 off


Das funktioniert so aber leider nicht . . . .  :(
Die Sonnenstände werden berücksichtigt, danach fährt der Rolladen aber nicht mehr runter. Setzt man Ihn manuell auf runter, fährt er wieder hoch!?
Komme leider nicht so ganz weiter.
Vielleicht kann mir diesbezüglich jemand helfen.

Danke schon mal vorab

gruß
Markus

Puschel74

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.

DJ-Mix

Hallo Puschel74,

gesehen ja. Verstanden Nein.  Sehe momentan den Wald vor lauter Bäumen nicht. :'( Soll heißen, ich habe
Schwierigkeiten den Code für den Sonnenstand mit einzubauen. Zudem weiß ich auch nicht, ob ich den jeweils
für hoch und runter mit einbauen muss, oder nur einmal.

Hatte es so versucht, was aber auch nicht funktioniert . . . .
define CUL_HM_HM_LC_Bl1PBU_FM_256453_hoch at *07:00 { if (!($we)) && ReadingsVal("T","azimuth","0");; if (($Licht >= 200) && (Value("CUL_HM_HM_LC_Bl1PBU_FM_256453_sonne") ne "Auf")) {fhem("set CUL_HM_HM_LC_Bl1PBU_FM_256453 on")} elsif (($Licht >= 100) && (Value("CUL_HM_HM_LC_Bl1PBU_FM_256453_sonne") ne "Zu")) {fhem("set CUL_HM_HM_LC_Bl1PBU_FM_256453 50"){ fhem ("set CUL_HM_HM_LC_Bl1PBU_FM_256453 on");; }}


Gruß
Markus

strauch

Das Teil ist auch voller Fehler..... zudem wundern mich manche Namen, warum benennst du dein "CUL_HM_HM_LC_Bl1PBU_FM_256453" nicht in irgendwas Menschenverständliches wie wz_Rollladen?!

Ich hab erst überlegt das einzeln Aufzudröseln, aber da kommt mir zuvieles spanisch vor, mal ganz vom Inhalt abgesehen ist die Syntax seltsam. Du fängst mit if an, es kommt aber keine Anweisung sondern ;; dann kommt noch mal if aber ohne geschweifte klammer, vorher wurde der erste if Befehl auch nicht geschlossen.

Im 2. If machst du direkt zwei Klammern auf.... wozu? statt
if (($Licht >= 200) && (Value("CUL_HM_HM_LC_Bl1PBU_FM_256453_sonne") ne "Auf"))

müsste das eher:
{if ($Licht >= 200) && Value("CUL_HM_HM_LC_Bl1PBU_FM_256453_sonne") ne "Auf") heißen
beim elsif das gleiche

und am Schluss kommen 2 Befehle, die sich zum einen aufheben zum anderen ist die Syntax falsch:
{fhem("set CUL_HM_HM_LC_Bl1PBU_FM_256453 50"){ fhem ("set CUL_HM_HM_LC_Bl1PBU_FM_256453 on")

Also entweder 50 dann müsste es aber pct 50 heißen oder aber on. Zudem ist der Befehl nicht richtig geschlossen.

Ein Befehl sollte so aussehen:
{fhem("set CUL_HM_HM_LC_Bl1PBU_FM_256453 pct 50")}

Zwei so:
{fhem("set CUL_HM_HM_LC_Bl1PBU_FM_256453 pct 50;set CUL_HM_HM_LC_Bl1PBU_FM_256453 on")}

Du solltest dich dringend noch mal in die Grundlagen einlesen, vielleicht einfach mal mit einfachen if konstruktionen beginnen und auch mal deine Geräte umbennen mit CUL_HM_HM_LC_Bl1PBU_FM_256453 und CUL_HM_HM_LC_Bl1PBU_FM_256453_sonne zu arbeiten ist ja grauselig und kaum tippbar, was ist CUL_HM_HM_LC_Bl1PBU_FM_256453_sonne überhaupt? Und wenn du nach auf oder zu abfragst, hast du das auch so gemapped? ansonsten ist on oder off die richtige Abfrage. Und bist du dir sicher das es $Licht gibt?!

Und wenn du das Konstrukt oben über die Befehlszeile ausführst müsste es doch nur so Fehler hageln. Sowas in der Art:

syntax error at (eval 12357) line 1, near ") &&"
Global symbol "$Licht" requires explicit package name at (eval 12357) line 1.
Global symbol "$Licht" requires explicit package name at (eval 12357) line 1.
syntax error at (eval 12357) line 1, near "){"
Missing right curly or square bracket at (eval 12357) line 2, at end of line
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

Jens_B

# Rollladen soll fix um 07:00h jeden Tag hochfahren / ausser am WE um 08:00h
define CUL_HM_HM_LC_Bl1PBU_FM_256453_hoch at *07:00 { if (!($we)) { fhem ("set CUL_HM_HM_LC_Bl1PBU_FM_256453 on");; }}
define CUL_HM_HM_LC_Bl1PBU_FM_256453_hochWE at *08:00 { if (($we)) { fhem ("set CUL_HM_HM_LC_Bl1PBU_FM_256453 on");; }}



Also zunächst:
Am besten benennst Du Deine CUL_HM_XXX mal in einen sprechenden Namen um. Zum Beispiel "ROLLLADEN_WOHNZIMMER" oder so.
Das erreichst Du am schnellsten, indem Du oben in der FHEM Kommandozeile "rename <devicename alt> <devicename neu>" machst
Beispiel für deinen ROLLLADEN:
rename CUL_HM_HM_LC_Bl1PBU_FM_256453 ROLLLADEN_WOHNZIMMER.
Dann würde der Rollladen nun ROLLLADEN_WOHNZIMMER heißen. Klingt doch schon viel besser? Und ist später auch viel besser zu unterscheiden, wenn Du mal mehr als einen Rollladen haben solltest...
Wenn jetzt ROLLLADEN_WOHNZIMMER Wochentags um 7:00 Uhr hochfahren soll:
define ROLLLADEN_WOHNZIMMER_hoch_WT at *07:00 { if  (!$we) {fhem ("set ROLLLADEN_WOHNZIMMER on") } }

Fürs Wochenende wäre es dann
define ROLLLADEN_WOHNZIMMER_hoch_WE at *08:00 { if  ($we) {fhem ("set ROLLLADEN_WOHNZIMMER on") } }

Das Ganze läßt sich auch ganz fein mit der Funktion weekdaytimer abbilden (einfach mal ins commandref schauen), oder hier im Forum nach weekdaytimer suchen.

Wenn das nun auch noch mit Hilfe des Sonnenstandes gesteuert werden soll, wirst Du um eine kurze Einführung in Perl nicht drum rumkommen, um if... elsif.. Abfragen und reg.exp (Reguläre Ausdrücke) zu verstehen...
Ich muß zugeben, da hab ich auch noch an manchen Stellen Verständnisprobleme ;)....


Gruß
Jens





RaspberryPi 4 (Raspian Buster)FHEM+Homebridge
HMLAN für Homematic
Z-Wave USB Stick
Shelly Devices
Fritz!Box 7590Ax

DJ-Mix

danke für die Hinweise . . . .
werde mich bemühen diese umzusetzen

die Zeit Steuerung (Wochentags, Wochenende bekomme ich hin, bzw. habe ich vorher schon gehabt.) funktioniert. Jedoch die Einbindung
der Steuerung für den Sonnenstand (bei xxx° Rollladen auf 50% runter und bei xxx° wieder hoch ) kriege ich nicht eingebaut.
na ja - vielleicht klappt es irgend wann mal . . . .  :(
Danke nochmals

strauch

Schreib doch mal konkret auf was wann passieren soll. Am besten mit den Wörtern wenn dann.

Gesendet von meinem Nexus 4 mit Tapatalk

FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

DJ-Mix

Hallo strauch,

also Rolladen soll um 7:30 Uhr hochfahren ausser am Wochenende, dann um 8:30 Uhr.
Wenn die Sonne bei 100° (Azimuth) steht soll der Rolladen auf 50% runter fahren und ab 200° wieder hoch fahren.
Um 20:00 soll der Rolladen dann runter fahren.

Das ist eigentlich das, was ich gerne haben möchte.
Die Steuerung für hoch um 7:30 (8:00) Uhr und runter um 20:00 Uhr habe ich nun mit dem WeekdayTimer umgesetzt.
Bsp.
define Rollladen_KZ_week WeekdayTimer Rollladen_KZ 12345|07:30|on 12345|20:00|off
den Code ebenfalls fürs Wochenende dann mit 67 und 8:30 / 20:00 Uhr

Den Status der Gradzahl erhalte ich vom Twilight Modul.
myTwilight  azimuth  292.02

Versuche ich den Code einzubauen, fährt der Rollladen auf 100° runter, sowie ab 200° hoch, jedoch wird keine andere Schaltung mehr berücksichtigt (so wie weiter oben in den Threads bereits versucht)

gruß
Markus

Bennemannc

#8
Hallo,

klarer Fall von if ....
Abfragen ob WE - IF ($we) (wenn WE dann ...) ELSE ( wenn nicht WE dann ...)

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

Puschel74

Hallo,

Zitatklarer Fall von if ....
Abfragen ob WE - ID ($we) (wenn WE dann ...) ELSE ( wenn nicht WE dann ...)

äh, kannst du das mal etwas klarer erklären  :o

Der TE benutzt zur Zeit WDD und möchte zusätzlich nach azimuth die Rollläden fahren.

Ein "klarer Fall von if" wird ihn nicht weiter bringen - und genau DIESE Nachfrage WIRD kommen also hat der TE nichts davon.
Wann und Wo soll er den "klaren Fall von if" verwenden?
WE - ID ist was genau?
Bei if gibt es kein ELSE (wenn dann else).

Brocken hinwerfen und mehr Fragen aufwerfen als (nützliche) Antworten liefern hilft hier nicht.

Sorry - ich weiß das du auch einbringst aber diesmal ist deine Antwort nur ein großes ?

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.

Bennemannc

Hallo Puschel,

ich kenne das twilight Modul nicht, aber es löst mit Sicherheit ein notify aus. In diesem notify würde ich abfragen ob Wochenende ist und dann die Zeiten entsprechend setzen. Entweder mit dem perl if oder mit den fhem IF - bei dem dann auch das ELSE groß geschrieben wird.
Ich mach das mit einem anderen Schalter, der nur an Wochentagen schalten soll.
*08:00:00 { if (!$we) { fhem("set Unterbr_Entkalkung on-till 15:00:00") }}
Was ich nicht verstehen, warum Steuern so viele die Rollos nach Azimut? Ich nutze sunrise/Sunset dafür. Hier kann ich Korrekturen (Grad) und max/min Zeiten direkt eingeben. Dort könnte man auch direkt auf $we prüfen und entsprechend steuern.

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

Puschel74

Hallo,

Zitatich kenne das twilight Modul nicht, aber es löst mit Sicherheit ein notify aus.
So ist es.
Und man kann in einem notify auch wunderbar per regexp auf die unterschiedlichen Readings triggern.

Das mann innerhalb eines notify mit IF oder if Unterscheidungen treffen kann ist genauso richtig.
Wobei man sich schon auf eines festlegen sollte da die weitere Handhabung der Codes einfacher wird.

ZitatIch mach das mit einem anderen Schalter, der nur an Wochentagen schalten soll.
Und ich prüfe täglich um 2 Uhr ob Wochenende ist oder nicht da ich auch unterschiedliche Zeiten für unsere Rollläden benutze - was auch funktioniert.

ZitatWas ich nicht verstehen, warum Steuern so viele die Rollos nach Azimut?
Und das ist doch das Schöne an FHEM.
Egal wie was gemacht werden soll - jeder kann es so machen wie er/sie es möchte.

ZitatIch nutze sunrise/Sunset dafür. Hier kann ich Korrekturen (Grad) und max/min Zeiten direkt eingeben. Dort könnte man auch direkt auf $we prüfen und entsprechend steuern.
Sunrise/Sunset nutze ich zusätzlich noch - aber nur für Rollläden auf der Südseite.
Der Rest läuft starr nach $we oder eben !($we) und zusätzlich laufen ALLE Rollläden noch nach Aussentemperatur.

Ich war ja auch knapp dran um DJ-Mix einen Code zu posten allerdings fehlen mir noch Angaben bzw. bin ich zu faul um seine restlichen Codes raus zu suchen und zu schauen was funktionieren könnte und was nicht.
Und das ist ja auch hier das schöne - Jeder kann Lösungen posten. Muss es aber nicht.

Also DJ-Mix:
Was hast du bisher?
Was funktioniert?
Was klappt nicht?
Welche Fehlermeldungen bekommst du?

Grüße

P.S.: WDD klappt einwandfrei für mAn einfache Dinge.
Wenn es komplexer wird - $we + unterschiedliche Zeiten + zusätzliche Anforderungen kommst du um Perl nicht drum rum.
Was kein Problem ist - FHEM kann "fast" alles  ;)
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.

DJ-Mix

Hallo zusammen,

@Puschel74 / Bennemannc

ich steuere meine Rollladen derzeit über
# Rollladen soll fix um 07:30h jeden Tag hochfahren / außer am WE um 08:30h
define Rollo_KZ1_hoch at *07:30 { if (!($we)) { fhem ("set Rollo_KZ1 on") }}
define Rollo_KZ1_hochWE at *08:30 { if (($we)) { fhem ("set Rollo_KZ1 on") }}

# Rollladen soll variabel je nach Sonnenuntergang, aber nicht vor 17:00h und nicht nach 20:00h jeden Tag runterfahren
define Rollo_KZ1_runter at *{sunset("REAL",480,"17:00","20:00")} set Rollo_KZ1 off


außer den einen Rollladen, wo morgens die Sonne bis in den Mittag steht. Diesen schalte ich mit

define Rollo_KZ2_week WeekdayTimer Rollo_KZ2 12345|07:30|on 12345|20:00|17

define Rollo_KZ2_weekend WeekdayTimer Rollo_KZ2 67|08:30|on 67|20:00|17


und habe versucht den Code für den Azimuth mit einzubringen

define n_Rollladen notify myTwilight.azimuth.* {\
       my $Licht = ReadingsVal("myTwilight","azimuth","0");;\
       if (($Licht >= 260) && (Value("Rollo_KZ2") ne "up")) {\
                fhem("set Rollo_KZ2 up")}\
       elsif (($Licht >= 120) && (Value("Rollo_KZ2") ne "pct 50")) {\
                fhem("set Rollo_KZ2 pct 50")}\
}]


Diesen Code habe ich aus dem Forum übernommen. Funktioniert als Dummy (bzw. auch auf Rollo_KZ2) auch soweit, bis auf das wenn dieser Code läuft, der WeekendTimer nicht mehr
funktioniert. Den Versuch diesen mit dem $we und sunrise zu nutzen hat auch nicht funktioniert. Da ich von Perl leider keine Erfahrung aufweisen kann, stehe ich hier auf dem Schlauch.
Ich bin für Ideen, Anregungen oder Beispiele offen und werde auch versuchen diese umzusetzen. Sollte es eine andere Möglichkeit geben, die ich noch nicht beachtet habe, so brauche ich hier
ein wenig Input.

Danke und Gruß
Markus


strauch

#13
Ok,

jetzt verstehe ich langsam die Probleme und warum du wie was versucht hast zu lösen.

Also erstmal sind hier 3 Paar verschiedene Schuhe die du auch als 3 einzelne Dinge betrachten solltest, die da wären:

1. Der Rollladen fährt morgens hoch
2. Der Rollladen fährt abends runter
3. Der Rollladen fährt bei Sonneneinstrahlung runter

1 und 3 kannst du aber mit zwei Weekdaytimer lösen, wie du es ja auch für den KZ2 machst. Beispiel:
define Rollo_KZ1 WeekdayTimer Rollo_KZ1 12345|07:30|on 12345|{sunset("REAL",480,"17:00","20:00")}|off
define Rollo_KZ1_WE WeekdayTimer Rollo_KZ1 67|08:30|on 12345|{sunset("REAL",480,"17:00","20:00")}|off


Das zweitere ist etwas aufwändiger. Hier benötigen wir meiner Meinung nach einmal die Information wo die Sonne steht aus dem Twighlightmodul und dann brauchen wir noch die Info ob die Sonne überhaupt scheint, sonst fährt der Rollo auch bei bewölktem Himmel runter. Hier taucht auch deine $Licht Variable auf die du verwendet hast, das geht aber nicht so wie du das gemacht hast die muss vorher definiert werden wie in dem Beispiel was du aus dem Forum übernommen hast mit my $Licht = ReadingsVal("myTwilight","azimuth","0");;\ .

Ich könnte mir aber vorstellen das wir hier mit einem Threshold arbeiten müssen sonst wird ja jedesmal wenn die Gradzahl sich ändert dein notify ausgelöst und das dürfte nach 20 Uhr (bzw. Sonnenuntergang) dazu führen, das die Rollladen wieder hochfahren, nachdem sie runtergefahren sind. Zudem kann der Threshold direkt schalten und auch die Temperatur und ob Sonne ja oder nein mit verwalten.... Da brauchst dann auch garnicht so eine komplizierte Bedienung.

Und dann stellt sich mir die Frage, hast du denn einen Sensor um festzustellen das die Sonne scheint? Ich selber mach das bei mir auch noch abhängig von der Temperatur draußen und drinnen.

Hier mal ein Beispiel Threshold für den Azimuth:
define threshold_Rollladen_azimuth threshold myTwilight:azimuth:140:260 Rollo_KZ2|set @ pct 50|set @ on|1

Mit der hysterese bin ich mir nicht sicher das muss so eingestellt sein, das er bei 120 runter und bei 260 rauffährt.... der Unterschied ist 140.... aber ob ich jetzt 120 oder 260 als Basis nehmen muss, musst du mal schauen.
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

Markus M.

Jedesmal bei einer  T.azimuth Änderung schlägt dieses notify an und möchte den Rolladen hochfahren wenn die Sonne nicht mehr scheint und er gerade unten ist.
Mögliche Lösungen: disable bei manuellem Runterfahren und nach Sonnenuntergang. Besser wäre noch, den Schalter vom Rolladen logisch zu trennen und weitere Prüfungen einzubauen.
Wie das bei HM genau funtioniert weiss ich allerdings nicht.

Zitat von: DJ-Mix am 14 Mai 2014, 20:52:46

# Rolladen soll bei Sonnenstand 100° auf 50% fahren und bei 200° wieder auffahren
define CUL_HM_HM_LC_Bl1PBU_FM_256453_sonne notify T.azimuth.* {my $Licht = ReadingsVal("T","azimuth","0");; if (($Licht >= 200) && (Value("CUL_HM_HM_LC_Bl1PBU_FM_256453_sonne") ne "Auf")) {fhem("set CUL_HM_HM_LC_Bl1PBU_FM_256453 on")} elsif (($Licht >= 100) && (Value("CUL_HM_HM_LC_Bl1PBU_FM_256453_sonne") ne "Zu")) {fhem("set CUL_HM_HM_LC_Bl1PBU_FM_256453 50")}}


Die Sonnenstände werden berücksichtigt, danach fährt der Rolladen aber nicht mehr runter. Setzt man Ihn manuell auf runter, fährt er wieder hoch!?
Aktuell weder Smarthome noch FHEM vorhanden