[gelöst] Twilight: Ich blick nix!?

Begonnen von habichthugo, 08 Mai 2014, 21:06:49

Vorheriges Thema - Nächstes Thema

habichthugo

Bisher habe ich meine Rolläden mit z.B.
define Bad.Rolladen:auto_auf at *{sunrise("REAL",30*60,"07:30","09:00")} set Bad.Rolladen on
gesteuert. Da das häufig wegen Bewölkung & Co. nicht so ganz passt habe ich mich jetzt mit Twilight beschäftigt und es immerhin schon geschafft, ein entsprechendes Device anzulegen. Mein Freund wäre wohl sr/ss_indoor. Aber wie kriege ich damit so was wie oben mit at*sunrise (vielleicht noch zusätzlich abhängig vom Wochen-/Feiertag) hin? Perl ist so gar nicht mein Ding...
CUL (CC1101-USB-Lite module-V3) + 5*fht80b + 6*Mumbi-Funksteckdosen (=Elro AB440); HM-LAN + 11*HM-LC-Bl1PBU-FM Rollladenaktor + 1*HM-LC-Sw1PBU-FM Funklichtschalter + 2*HM-RC-12-W; Raspbian (Raspberry Pi Model B Rev 1 ECN0001 256MB)

mike1969bln

Statt

set Bad.Rolladen on

schreibst Du für wochentags

{ if ( !($we)) { fhem("set Bad.Rolladen on") }}


Sent from my iPad using Tapatalk

Dietmar63


define TwilightMessage1       notify Twilight.*:aktEvent:.*ss_weather.*      set StehlampeTisch on;; define yy at +00:00:05 set StehlampeTV on
define TwilightMessage2      notify Twilight.*:aktEvent:.*                  {Log 3, "Nachricht von @: %"}


Der erste Befehl solle deine Anforderung erfüllen. Wenn du noch Wochenendabfragen haben möchtest, kommst du an Perl nicht vorbei - besorg dir schon einmal ein Buch.

define TwilightMessage1       notify Twilight.*:aktEvent:.*ss_weather.*      { fhem ("set StehlampeTisch on")     if (!$we) }

TwilightMessage2 liefert im log alle Events, die TW so feuert.



Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

habichthugo

Ne, also ich blick wohl nicht mal die einfachsten Sachen. Warum ergibt {print $we} jetzt grade 1? Ich dachte, Freitag wäre ein Wochentag?
Wie kann man komplexere Dinge / Scripte überhaupt vernünftig im FHEM-Kontext testen?
twilight_weather ist wohl mein Freund...
CUL (CC1101-USB-Lite module-V3) + 5*fht80b + 6*Mumbi-Funksteckdosen (=Elro AB440); HM-LAN + 11*HM-LC-Bl1PBU-FM Rollladenaktor + 1*HM-LC-Sw1PBU-FM Funklichtschalter + 2*HM-RC-12-W; Raspbian (Raspberry Pi Model B Rev 1 ECN0001 256MB)

mike1969bln

Hallo Hugo,

zu deinen Fragen:

1. beim Ausdruck !($we) wird durch das ! die Bedingung umgekehrt im Sinne "nicht Wochenende"

2. zum Testen habe ich mir 2 Testdummys, ein Test-at und ein Test-notify eingerichtet, so kann ich Bedingungen probieren und setze zur Prüfung dann einfach Werte in den Testdummy mit "Set Test.1 1".


Sent from my iPad using Tapatalk

habichthugo

Schon klar, das mit dem !($we). Bei {print $we} wird offenbar der Status von print zurückgegeben...

Ich muss hier recht komplexe Zusammenhänge bilden, also pro Rolladen
offen, wenn twilight_weather > z.B. 70%, aber erst ab z.B. 8:30 Uhr und das entsprechende on/off nur jeweils ein Mal am Tag.
Das müsste am besten in eine Funktion (im FHEM Kontext). Das kann man zeilenweise nicht/schlecht an der Telnet-Konsole oder WFE entwicklen/testen. Ich kann aber FHEM auch nicht jedes Mal neu starten, weil da u.a. meine Heizungssteuerung dran hängt.
Gibt's den für Perl/FHEM keinen Script-Debugger o.ä.? Ich kann mir schwer vorstellen, dass das alles im Ei-Zeile-Verfahren entwickelt wurde.
CUL (CC1101-USB-Lite module-V3) + 5*fht80b + 6*Mumbi-Funksteckdosen (=Elro AB440); HM-LAN + 11*HM-LC-Bl1PBU-FM Rollladenaktor + 1*HM-LC-Sw1PBU-FM Funklichtschalter + 2*HM-RC-12-W; Raspbian (Raspberry Pi Model B Rev 1 ECN0001 256MB)

habichthugo

So, anbei mal mein vorläufiges Gesamtkunstwerk als fertiges Modul.

Am meisten Probleme hatte ich mit
sub on_as_long_as_daylight($$$$$$$$$$)
{
...   
    sub _twilight()
    {
...
    }
...
         if (($auto_state ne 'on') && (_twilight() >= $on_level))
...
}

Solange _twilight() noch twilight() hieß, wurde da doch tatsächlich die gleichnamige globale Funktion gerufen. Verstehe Perl wer will...
CUL (CC1101-USB-Lite module-V3) + 5*fht80b + 6*Mumbi-Funksteckdosen (=Elro AB440); HM-LAN + 11*HM-LC-Bl1PBU-FM Rollladenaktor + 1*HM-LC-Sw1PBU-FM Funklichtschalter + 2*HM-RC-12-W; Raspbian (Raspberry Pi Model B Rev 1 ECN0001 256MB)

habichthugo

Da ich dazu grade eine Anfrage per Mail bekommen habe:
Es geht hier um die (primär tageslichtabhänige) Steuerung von Rollläden. Ich dachte Aufrufparameter/Reihenfolge seien halbwegs selbsterklärend und einfach aus dem Modul-Code herauslesbar...

on_as_long_as_daylight(
    dev_blind_actuator, # instance of an on/off device, like 'define <dev_blind_actuator> CUL_HM ...' (subType blindActuator)
    dev_twilight,       # instance of 'define <dev_twilight> Twilight ...'
    weather_influence,  # 0..100 [%]
    on_level,           # 0..100 [%]
    earliest_on,        # HH:MM[:SS]
    latest_on,          # HH:MM[:SS]
    delay_on,           # [s] < 0 => random =>(0..-<delay_on>)
    earliest_off,       # HH:MM[:SS]
    latest_off,         # HH:MM[:SS]
    delay_off,          # [s] < 0 => random => (0..-<delay_off>)
)

Beispiel (für fhem.cfg):
define MyBlindActuator:auto at +*00:01:00 { on_as_long_as_daylight('MyBlindActuator', 'MyTwilight', 100, 50, '07:00', '10:00', -2*60, '16:00', '23:59', -2*60);; }
Die Funktion muss zyklisch aufgerufen werden (at +*00:01:00 => also jede Minute). MyBlindActuator ist z.B. ein HM-Rollladenaktor, MyTwilight eine Instanz von Twilight. Mit weather_influence (0..100%) kann man angeben wieviel Wetter/Bewölkungseinfluss man haben will (100% => nur twilight_weather; 0% => nur twilight), hier also 100%. on_level (0..100%) gibt dann den Schwellwert (gen twilight_weather bzw. twilight) vor, ab dem der Rolladen offen (on) sein sollen, hier 50%. Zwischen 00:00 Uhr und earliest_on (HH:MM[:SS]) soll der Rollladen immer geschlossen sein, hier 7:00 Uhr. Bis latest_on (HH:MM[:SS], hier 10:00 Uhr) wird nun aktiv geprüft, ob der on_level erreicht/überschritten ist und ggf. der Rolladen hochgefahren (set <dev_blind_actuator> on). Sollte on_level danach wieder unterschritten werden wird er aber >nicht< wieder geschlossen. Spätestens ab latest_on wird er auf jeden Fall hochgefahren und bleibt bis earliest_off (HH:MM[:SS], hier 16:00 Uhr) offen.
Das Öffnen kann mit delay_on (+-0..24*60*60s, hier 2*60 = 120s) verzögert werden, mit positiven Werten absolut, mit negativen Werten um eine Zufällige Zeit (0..-delay_on).
Ab earliest_off wird der on_level dann auf Unterschreitung geprüft und ggf. der Rollladen zugefahren (off). Sollte on_level danach wieder überschritten werden wird er aber >nicht< wieder geöffnet. Spätestens ab latest_off (HH:MM[:SS], hier 23:59 Uhr) wird er auf jeden Fall geschossen. delay_off siehe delay_on für's schliessen. Puh...

I.A. (fhem wird nicht gestoppt) gibt es also nur ein Mal am Tag ein on und ein off, das war mir wichtig, ebenso die 'Kernzeiten', wo der Rolladen offen oder zu ist. Dazu ist der Wettereinfluss regelbar und man kann die Lichtschwelle fein justieren (u.a. z.B. im Norden höher als im Süden). Die Delays brauche ich um Zenarien wie 'Licht 15 Min. vor schliessen des Rolladen an' oder 'Rolladen zeitversetzt fahren' zu machen (letzlich 'belebtes Haus')...
CUL (CC1101-USB-Lite module-V3) + 5*fht80b + 6*Mumbi-Funksteckdosen (=Elro AB440); HM-LAN + 11*HM-LC-Bl1PBU-FM Rollladenaktor + 1*HM-LC-Sw1PBU-FM Funklichtschalter + 2*HM-RC-12-W; Raspbian (Raspberry Pi Model B Rev 1 ECN0001 256MB)

habichthugo

#8
Zitat von: habichthugo am 12 Mai 2014, 14:34:58
...Zenarien wie 'Licht 15 Min. vor schliessen des Rolladen an'...
Ach ja, es wird ein Reading 'state-on_as_long_as_daylight' ('on' oder 'off') in dev_blind_actuator geschrieben, und zwar ggf. schon in dem Moment, wenn das Delay abgesetzt wird (define <dev_blind_actuator>:on_as_long_as_daylight.delay at +<delay> ...). Auf 'state-on_as_long_as_daylight' kann man also mit einem notify triggern...
Wer die Zeiten (z.B. earliest_on) am Wochenende anders haben möchte kann dafür recht kompakt z.B. $we ? '09:00' : '07:00' (am Wochenende erst um 9:00 Uhr, sonst um 7:00 Uhr) schreiben:
define MyBlindActuator:auto at +*00:01:00 { on_as_long_as_daylight('MyBlindActuator', 'MyTwilight', 100, 50, $we ? '09:00' : '07:00', '10:00', -2*60, '16:00', '23:59', -2*60);; }
CUL (CC1101-USB-Lite module-V3) + 5*fht80b + 6*Mumbi-Funksteckdosen (=Elro AB440); HM-LAN + 11*HM-LC-Bl1PBU-FM Rollladenaktor + 1*HM-LC-Sw1PBU-FM Funklichtschalter + 2*HM-RC-12-W; Raspbian (Raspberry Pi Model B Rev 1 ECN0001 256MB)

habichthugo

CUL (CC1101-USB-Lite module-V3) + 5*fht80b + 6*Mumbi-Funksteckdosen (=Elro AB440); HM-LAN + 11*HM-LC-Bl1PBU-FM Rollladenaktor + 1*HM-LC-Sw1PBU-FM Funklichtschalter + 2*HM-RC-12-W; Raspbian (Raspberry Pi Model B Rev 1 ECN0001 256MB)