[73_AutoShuttersControl.pm] Neues Modul zum automatisierten steuern von Rolläden

Begonnen von CoolTux, 30 Oktober 2018, 17:29:46

Vorheriges Thema - Nächstes Thema

stefanpf

Zitat von: Alcamar am 18 März 2019, 10:56:12
Die Steuerung mit der Unterscheidung von Wochenende und Werktag klappt sehr gut. Trotzdem weiß ich nicht, wie ich meine Anforderung abbilde:
Am Wochenende sollte der Samstag einen "Sonderstatus" haben. So können die Rollos morgens zwar später als werktags hochfahren, aber nicht so spät wie sonntags. Wie kann ich diese Differenzierung umsetzen? Lässt sich eine dedizierte tagweise Steuerung auch umsetzen? Beispielsweise mittwochs Rollos immer früher herunterfahren, als sonst Werktags?

Das ASC-Modul habe ich seit einigen Monaten im Einsatz. Zwei Mal hatte ich das Phänomen, dass die Rollos nicht wie erwartet bewegt wurden. Leider konnte ich keine Ursache oder gar Systematik ausfindig machen. Das Modul ist sehr gut. Danke dafür und für die Portierung der bisherigen Lösung.
Vielleicht ein Ansatz (je nachdem wieviel du basteln möchtest)
du könntest ASC_up auf brightness setzen und ein Fake/Dummy Brightness device erstellen, dass abhängig von deinen Wünschen den entsprechenden Helligkeitwert in einem UserReading vorhält.
In dem UserReading kann man sich dann mit Perl voll austoben - oder, wenn man so wie ich dort nicht ganz sattelfest ist die Daten per Doif zusammen kratzen :)

Alcamar

Interessanter workaround über die Helligkeit und Dummy.
Würde ich mit drei unterschiedlichen Helligkeitsunterscheidungen dann auskommen?

  • werktag
  • samstag
  • sonntag

stefanpf

Einfacher, ich meine das eher so:

defmod fakeBrightness dummy
attr fakeBrightness room 00
attr fakeBrightness stateFormat brightness



defmod di_fakeBrightness DOIF ([06:00-11:05|12345] or [08:30-11:05|6] or [09:00-11:05|7])  (setReading fakeBrightness brightness 10000) \
DOELSE (setReading fakeBrightness brightness 1)
attr di_fakeBrightness room 00


Die Attribute im Rollladen könnten so aussehen:

attr ga_Rollladen_Fenster ASC_BrightnessMaxVal 100000
attr ga_Rollladen_Fenster ASC_BrightnessMinVal 1000
attr ga_Rollladen_Fenster ASC_Brightness_Reading brightness
attr ga_Rollladen_Fenster ASC_Brightness_Sensor fakeBrightness
attr ga_Rollladen_Fenster ASC_Mode_Up always
attr ga_Rollladen_Fenster ASC_Time_Up_Early 05:00
attr ga_Rollladen_Fenster ASC_Time_Up_Late 11:00
attr ga_Rollladen_Fenster ASC_Up brightness


Der Gedanke:
Der Rollladen wartet in der Zeit von 05:00 bis 11:00 auf einen Helligkeitswert >= 1000 um zu öffnen.

Das DOIF faked einen Helligkeitswert von 10000
Montag-Freitag zwischen 06:00 und 11:05
Samstag zwischen 08:30 und 11:05
Sonntag zwischen 09:00 und 11:05

Die 11:05 sorgen dafür, dass der Helligkeitswert nicht im time_up_early bis time_up_late Zeitfenster sinkt (wer weiß ob der Rollladen dann wieder runterfahren würde)

Aber: alles ungetestete Gedanken

Komplizierter wird es, wenn du für die Beschattung noch echte Werte dort hinein bekommen möchtest.

Alternativ könntest du auch probieren mit dem Partys zu spielen:
Also normale Astro Steuerung mit
Time_up_early 06:00 und time_up_we_holiday 08:30
Und am Sonntag aktivierst du den Partymodus per Doif zwischen 05:59 und 10:00 um das Fahren zu blocken.
Falls das klappt ist das Risiko auf Nebenwirkungen nicht so hoch :-)

Alcamar

Wenn ich zeitlich dazu komme, versuche ich das mal am Wochende. Sieht vielversprechend aus.
Danke!

BigGB

Zitat von: CoolTux am 18 März 2019, 18:37:26
Stell mal bitte das ASC Device auf verbose 5 und starte dann neu.
Bitte sehr.
Hier das Log direkt nach 1. rereadcfg und 2. nach dem Neustart

[b]1.[/b]
2019.03.19 17:42:22.558 4: AutoShuttersControl (myASControl) - Devname: global Name: myASControl Notify: $VAR1 = [
          'REREADCFG',
          'RESIDENTS:INITIALIZED Bewohner',
          'RESIDENTS:INITIALIZED',
          'ROOMMATE:INITIALIZED AAAAAAAAAA',
          'ROOMMATE:INITIALIZED CCCCCCCCC',
          'ROOMMATE:INITIALIZED DDDDDDDD',
          'ROOMMATE:INITIALIZED BBBBBBBBB',
          'ROOMMATE:INITIALIZED'
        ];

2019.03.19 17:42:23.276 4: AutoShuttersControl (myASControl) - Devname: global Name: myASControl Notify: $VAR1 = [
          'DEFINED telnetForBlockingFn_1553013742'
        ];

2019.03.19 17:42:37.343 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'userAttrList: rolled out'
        ];

2019.03.19 17:42:41.261 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.AZ_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:42:41.274 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

2019.03.19 17:42:41.292 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.Bad.OG_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:42:41.308 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

2019.03.19 17:42:41.326 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.KU.EG_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:42:41.341 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

2019.03.19 17:42:41.359 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.KZ.OG_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:42:41.374 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

2019.03.19 17:42:41.392 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.SZ_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:42:41.408 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

2019.03.19 17:42:41.426 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.WC.EG_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:42:41.440 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

2019.03.19 17:42:41.458 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.WZ.Garten_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:42:41.474 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

2019.03.19 17:42:41.492 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.WZ.Strasse_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:42:41.507 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

2019.03.19 17:42:41.524 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.WZ.Terrasse_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:42:41.540 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

2019.03.19 17:43:41.678 4: AutoShuttersControl (myASControl) - Devname: Helligkeitssensor_West Name: myASControl Notify: $VAR1 = [
          'brightness: 4370.68',
          'state: B: 4370.68'
        ];

2019.03.19 17:46:15.926 4: AutoShuttersControl (myASControl) - Devname: Helligkeitssensor_West Name: myASControl Notify: $VAR1 = [
          'brightness: 13987.42',
          'state: B: 13987.42'
        ];

2019.03.19 17:47:11.861 4: AutoShuttersControl (myASControl) - Devname: TL Name: myASControl Notify: $VAR1 = [
          'azimuth: 263.03'
        ];

2019.03.19 17:48:35.664 4: AutoShuttersControl (myASControl) - Devname: Helligkeitssensor_West Name: myASControl Notify: $VAR1 = [
          'brightness: 4180.37',
          'state: B: 4180.37'
        ];

2019.03.19 17:49:26.087 4: AutoShuttersControl (myASControl) - Devname: global Name: myASControl Notify: $VAR1 = [
          'SHUTDOWN'
        ];

2019.03.19 17:49:26.088 0: Server shutdown
[b]2.[/b]
2019.03.19 17:49:59.475 4: AutoShuttersControl (myASControl) - Devname: global Name: myASControl Notify: $VAR1 = [
          'INITIALIZED',
          'RESIDENTS:INITIALIZED Bewohner',
          'RESIDENTS:INITIALIZED',
          'ROOMMATE:INITIALIZED AAAAAAAAAA',
          'ROOMMATE:INITIALIZED CCCCCCCCC',
          'ROOMMATE:INITIALIZED DDDDDDDD',
          'ROOMMATE:INITIALIZED BBBBBBBBB',
          'ROOMMATE:INITIALIZED'
        ];

2019.03.19 17:49:59.654 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'userAttrList: rolled out'
        ];

2019.03.19 17:50:01.047 4: AutoShuttersControl (myASControl) - Devname: global Name: myASControl Notify: $VAR1 = [
          'DEFINED telnetForBlockingFn_1553014200'
        ];

2019.03.19 17:50:03.584 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.AZ_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:50:03.596 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

2019.03.19 17:50:03.610 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.Bad.OG_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:50:03.622 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

2019.03.19 17:50:03.636 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.KU.EG_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:50:03.647 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

2019.03.19 17:50:03.662 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.KZ.OG_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:50:03.673 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

2019.03.19 17:50:03.687 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.SZ_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:50:03.699 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

2019.03.19 17:50:03.713 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.WC.EG_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:50:03.724 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

2019.03.19 17:50:03.738 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.WZ.Garten_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:50:03.750 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

2019.03.19 17:50:03.764 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.WZ.Strasse_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:50:03.776 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

2019.03.19 17:50:03.789 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'Rolllade.WZ.Terrasse_nextAstroTimeEvent: 19.03.2019 - 18:24'
        ];

2019.03.19 17:50:03.801 4: AutoShuttersControl (myASControl) - Devname: myASControl Name: myASControl Notify: $VAR1 = [
          'state: created new drive timer'
        ];

FHEM 6.2 auf NUC6CAYH, Fritzbox,
MAX-, Homematic-Komponenten, WLAN-Steckdosen mit Tasmota u. MQTT
Tablet UI3

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

BigGB

Zitat von: CoolTux am 19 März 2019, 17:58:54
Die Timer werden anscheinend gesetzt. Sieht doch gut aus.
1. Bild zeigt vor "rereadcfg" und 2. u. 3 Bild ist der Zustand nach "rereadcfg.

FHEM 6.2 auf NUC6CAYH, Fritzbox,
MAX-, Homematic-Komponenten, WLAN-Steckdosen mit Tasmota u. MQTT
Tablet UI3

CoolTux

rereadcfg interessiert nicht. Was bekommst Du nach einem shutdown restart? Ist dann alles okay?
rereadcfg wird es bald nicht mehr geben. Ausserdem zerstört es die interne Datenstruktur. ASC ist das erste Modul welches eine eigene objektorientierte Datenstruktur hat.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

BigGB

Zitat von: CoolTux am 19 März 2019, 18:17:25
rereadcfg interessiert nicht. Was bekommst Du nach einem shutdown restart? Ist dann alles okay?
rereadcfg wird es bald nicht mehr geben. Ausserdem zerstört es die interne Datenstruktur. ASC ist das erste Modul welches eine eigene objektorientierte Datenstruktur hat.


Grüße
Aaaacchhsssoo  ;D, nach shutdown restart ist alles erhalten geblieben.
Danke Dir.
FHEM 6.2 auf NUC6CAYH, Fritzbox,
MAX-, Homematic-Komponenten, WLAN-Steckdosen mit Tasmota u. MQTT
Tablet UI3

dk3572

Zitat von: CoolTux am 10 März 2019, 22:14:14
Hallo Dieter

Ich habe nun testen können. Mit dem hier folgenden Code klappt es bei mir Reibungslos


sub calendarEvents($) {
    my $calDev  = shift;
    my $value = 0;
    my $start = CommandGet(undef,$calDev.' events format:custom="$S $t2" filter:mode=="start"');
    my $upcoming = CommandGet(undef,$calDev.' events limit:to=+1d format:custom="$S $t2" filter:mode=="upcoming"');

    CommandSet(undef,'dummy'.AttrVal($calDev,'alias',undef).' '.(length($start) > 0 ? 1 : 0) );

    $value = 1 if ( (length($start) > 0 and int((split('\s',$start))[1] / 86400) != int(time() / 86400 )) or length($upcoming) > 0 );
    CommandSet(undef,'dummy'.AttrVal($calDev,'alias',undef).' tomorrow '.$value);
}



Mein Notify sieht so aus


calendar.*:triggered { calendarEvents($NAME) }



Grüße

Hallo CoolTux,

ich getraue mich gar nicht es zu sagen, aber es funktioniert immer noch nicht.
In meinem dummy erhalte ich nur das reading state tomorrow 0 und state tomorrow 1.

Internals:
   FUUID      5c89ebe2-f33f-cd72-2492-5448379b2870e117
   NAME       dummyGoogleArbeitsfrei
   NR         323
   STATE      tomorrow 1
   TYPE       dummy
   READINGS:
     2019-03-19 19:57:03   state           tomorrow 1
Attributes:
   event-on-change-reading state,tomorrow
   readingList tomorrow,state
   setList    tomorrow:0,1 state:0,1


Deinen code und dein notify habe ich 1:1 übernommen.

Übersehe ich bei dem dummy etwas?

Wäre wie immer für Hilfe dankbar.
VG Dieter

CoolTux

readingList tomorrow,state

ändern nach

readingList tomorrow state


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

dk3572

Zitat von: CoolTux am 19 März 2019, 20:27:39
readingList tomorrow,state

ändern nach

readingList tomorrow state


Grüße

Vielen Dank. Jetzt endlich funktioniert es.

Dann dürfte dein dummy aus Post #937 aber auch nicht funktionieren  ;)

Danke noch mal für die schnelle Hilfe und schönen Abend noch.
VG Dieter

CoolTux

Das ist korrekt. Diese Art war ein funktionierender Bug und wurde vor einem Monat von Rudi gefixt. Werde wohl einige davon haben. Lach.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

eurofinder

Hallo CoolTux,

ich habe für einen Rolladen im Attribut ASC_WindowRec ein Fensterkontakt hinterlegt. Die readings des Fensterkontaktes werden im state auch korrekt mit open bzw. closed gesetzt. Wenn ich jetzt das Fenster öffne, fährt der Rolladen jedoch nicht in die unter ASC_Ventilate_Pos definierte Position. ASC_Ventilate_Window_Open ist definiert als on.
ASC ist Version 0.4.0.9.

Was mache ich falsch oder geht da derzeit nicht?

Gruß
eurofinder
RPI3+; Raspbian Buster Lite; RPI-RF-MOD; piVCCU3, HMIP-eTRV-2, HmIP-SWDO, HmIP-SRH, HmIP-STHO, HmIP-SLO

CoolTux

Zitat von: eurofinder am 20 März 2019, 19:41:45
Hallo CoolTux,

ich habe für einen Rolladen im Attribut ASC_WindowRec ein Fensterkontakt hinterlegt. Die readings des Fensterkontaktes werden im state auch korrekt mit open bzw. closed gesetzt. Wenn ich jetzt das Fenster öffne, fährt der Rolladen jedoch nicht in die unter ASC_Ventilate_Pos definierte Position. ASC_Ventilate_Window_Open ist definiert als on.
ASC ist Version 0.4.0.9.

Was mache ich falsch oder geht da derzeit nicht?

Gruß
eurofinder

Doch doch das sollte gehen.
Gib mal bitte ein list vom ASC Device und ein list von einem Rollladen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net