[ASC] Zufaellige Streuung der Fahrzeiten morgens und abends

Begonnen von elle, 24 August 2023, 11:43:18

Vorheriges Thema - Nächstes Thema

elle

Hallo zusammen,

in einer Testumgebung habe ich mal ASC aktiviert, nachdem ich ueber einige Jahre nun das urspruengliche Skript mit 14 Homematicaktoren (868MHz) weitgehend zufriedenstellend nutze.

Im noch aktiven System wird in die Fahrzeitberechnung eine Zufallskomponente eingestreut, sodass so gut wie nie 2 Rolllaeden gleichzeitig fahren (ausser bei der Abschattung). Dies finde ich sehr gut und wuerde es sehr gerne auch in ASC konfigurieren, kriege es aber iwie nicht hin - wahrscheinlich bin ich zu bloed oder uebersehe etwas; weiss aber auch nicht so recht, wonach ich das Forum durchsuchen soll, um die Info zu finden.

Im Devsystem habe ich die Aktoren als Dummies abgebildet - hier ein Beispiel:
defmod Device.HM.Rollo.EG.AZ dummy
attr Device.HM.Rollo.EG.AZ ASC 2
attr Device.HM.Rollo.EG.AZ ASC_BrightnessSensor Info.Sonne:twilight_weather
attr Device.HM.Rollo.EG.AZ ASC_Down brightness
attr Device.HM.Rollo.EG.AZ ASC_LockOut soft
attr Device.HM.Rollo.EG.AZ ASC_Pos_Reading pct
attr Device.HM.Rollo.EG.AZ ASC_Shading_InOutAzimuth 50:155
attr Device.HM.Rollo.EG.AZ ASC_Shading_MinMax_Elevation 10:100
attr Device.HM.Rollo.EG.AZ ASC_Shading_Mode always
attr Device.HM.Rollo.EG.AZ ASC_Shading_Pos 30
attr Device.HM.Rollo.EG.AZ ASC_Shading_StateChange_SunnyCloudy 90:60
attr Device.HM.Rollo.EG.AZ ASC_TempSensor Info.Proplanta
attr Device.HM.Rollo.EG.AZ ASC_Time_Down_Early 17:30
attr Device.HM.Rollo.EG.AZ ASC_Time_Down_Late 23:00
attr Device.HM.Rollo.EG.AZ ASC_Time_Up_Early 07:00
attr Device.HM.Rollo.EG.AZ ASC_Time_Up_Late 09:00
attr Device.HM.Rollo.EG.AZ ASC_Time_Up_WE_Holiday 08:59
attr Device.HM.Rollo.EG.AZ ASC_Up brightness
attr Device.HM.Rollo.EG.AZ ASC_WindProtection off
attr Device.HM.Rollo.EG.AZ event-on-change-reading pct
attr Device.HM.Rollo.EG.AZ readingList pct
attr Device.HM.Rollo.EG.AZ room Rollladen
attr Device.HM.Rollo.EG.AZ setList pct:slider,0,5,100
attr Device.HM.Rollo.EG.AZ stateFormat ASC_ShadingMessage
attr Device.HM.Rollo.EG.AZ webCmd pct

Die anderen sind entsprechend definiert und weichen primaer nur ab in
attr Device.HM.Rollo.EG.AZ ASC_Shading_InOutAzimuth 50:155
und ASC wie folgt definiert:
defmod Control.ASC AutoShuttersControl
attr Control.ASC ASC_autoAstroModeEvening CIVIL
attr Control.ASC ASC_autoAstroModeMorning CIVIL
attr Control.ASC ASC_autoShuttersControlEvening on
attr Control.ASC ASC_brightnessDriveUpDown 80:80
attr Control.ASC ASC_expert 1
attr Control.ASC ASC_shuttersDriveDelay 900
attr Control.ASC ASC_tempSensor Info.Proplanta:temperature
attr Control.ASC ASC_twilightDevice Info.Sonne
attr Control.ASC ASC_windSensor Info.Proplanta:wind
attr Control.ASC devStateIcon { ShuttersControl_DevStateIcon($name) }
attr Control.ASC icon fts_shutter_automatic
attr Control.ASC room ASC,Rollladen
attr Control.ASC webCmd ascEnable:controlShading:partyMode:renewAllTimer
attr Control.ASC webCmdLabel Enable:Shading:PartyMode: ;

Hiermit fahren alle Rollladen leider gleichzeitig hoch bzw. runter wie hier im Logfile zu sehen ist:
2023-08-24_07:10:01 Device.HM.Rollo.EG.WZ.Garten pct: 100
2023-08-24_07:10:01 Device.HM.Rollo.EG.Kueche.Einfahrt pct: 100
2023-08-24_07:10:01 Device.HM.Rollo.OG.Bad pct: 100
2023-08-24_07:10:01 Device.HM.Rollo.OG.Felix pct: 100
2023-08-24_07:10:01 Device.HM.Rollo.OG.Julian pct: 100
2023-08-24_07:10:01 Device.HM.Rollo.EG.Bad pct: 100
2023-08-24_07:10:01 Device.HM.Rollo.OG.Eltern.links pct: 100
2023-08-24_07:10:01 Device.HM.Rollo.EG.WZ.Strasse pct: 100
2023-08-24_07:10:01 Device.HM.Rollo.OG.Eltern.rechts pct: 100
2023-08-24_07:10:01 Device.HM.Rollo.OG.David pct: 100
2023-08-24_07:10:01 Device.HM.Rollo.EG.Kueche.Strasse pct: 100
2023-08-24_07:10:01 Device.HM.Rollo.EG.Essen pct: 100
2023-08-24_07:10:01 Device.HM.Rollo.EG.AZ pct: 100
2023-08-24_07:10:01 Device.HM.Rollo.EG.WZ.Terrasse pct: 100

Also, um es kurz zu fassen: Wie kriege ich diese Zufallskomponente wieder hin?

Vielen Dank schonmal!

/elle

cwagner

Bei mir funktioniert das Attribut ASC_shuttersDriveDelay mit einer Zufallsveränderung um 180 Sekunden gut. Allerdings ist meine Erwartung, dass dabei bis zu drei Minuten Unterschied entstehen (quasi ein Rundgang durchs Haus simuliert wird) nicht aufgegangen. Die Rollläden fahren nah beieinander, ich würde sagen: Bis zu 10 Sekunden zufällige Verzögerung.

Ansonsten kann ich das Modul wirklich nur empfehlen, es "fasst sich anfangs sperrig an", ist aber superflexibel und anpassbar. Ich möchte es nicht mehr missen.
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

elle

Zitat von: cwagner am 24 August 2023, 11:54:25Bei mir funktioniert das Attribut ASC_shuttersDriveDelay mit einer Zufallsveränderung um 180 Sekunden gut. Allerdings ist meine Erwartung, dass dabei bis zu drei Minuten Unterschied entstehen (quasi ein Rundgang durchs Haus simuliert wird) nicht aufgegangen. Die Rollläden fahren nah beieinander, ich würde sagen: Bis zu 10 Sekunden zufällige Verzögerung.

Ansonsten kann ich das Modul wirklich nur empfehlen, es "fasst sich anfangs sperrig an", ist aber superflexibel und anpassbar. Ich möchte es nicht mehr missen.
Hmm, die Verzoegerung ist mir eigentlich zu wenig - ich kenne kaum jemanden (mich einschliesslich), der durch's Haus geht und alle Rolllaeden nacheinander bedient (rauf oder runter). Daher fand ich diese Verzoegerung so klasse - in der Produktivumgebung sieht es heute so bei mir aus:
Device.HM.Rollo.EG.AZ 2023-08-24 03:05:00    21:30:39
Device.HM.Rollo.EG.Bad 2023-08-24 03:05:00    20:53:59
Device.HM.Rollo.EG.Essen 2023-08-24 03:05:00    21:31:55
Device.HM.Rollo.EG.Kueche.Einfahrt 2023-08-24 03:05:00    21:02:13
Device.HM.Rollo.EG.Kueche.Strasse 2023-08-24 03:05:00    21:30:11
Device.HM.Rollo.EG.WZ.Garten 2023-08-24 03:05:00    21:26:09
Device.HM.Rollo.EG.WZ.Terrasse 2023-08-24 03:05:00    21:29:55
Device.HM.Rollo.OG.Bad 2023-08-24 03:05:00    20:58:11
Device.HM.Rollo.OG.Eltern.links 2023-08-24 03:05:00    21:20:09
Device.HM.Rollo.OG.Eltern.rechts 2023-08-24 03:05:00    21:20:12
Device.HM.Rollo.OG.KindA 2023-08-24 03:05:00    21:16:40
Device.HM.Rollo.OG.KindB 2023-08-24 03:05:00    21:00:11
Also alle unterschiedlich innerhalb ca. einer halben Stunde.

Sowas haette ich gerne, falls ich auf ASC umstellen sollte.

Die Vorzuege habe ich auch schon erkannt, aber das Feature ist mir schon ziemlich wichtig ...


CoolTux

Wie bereits gesagt wurde sollte das Attr ASC_shuttersDriveDelay aus dem ASC Device entfernt werden.

Danach kann man dann für jedes Rollo ASC_Drive_DelayStart entsprechend in Sekunden setzen.

Damit starten dann die Rollofahrten entsprechend der angebenden Verzögerungszeit.
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

elle

Oh, das habe ich wahrscheinlich uebersehen/nicht gefunden.

Sehe ich aus diesem Stueck aus Shutters.pm richtig, dass der hier angegebene Wert als Input fuer rand benutzt wird:
        $offSet = $FHEM::Automation::ShuttersControl::shutters->getDelay
          if ( $FHEM::Automation::ShuttersControl::shutters->getDelay > -1 );
        $offSet = $FHEM::Automation::ShuttersControl::ascDev->getShuttersOffset
          if ( $FHEM::Automation::ShuttersControl::shutters->getDelay < 0 );
        $offSetStart =
          $FHEM::Automation::ShuttersControl::shutters->getDelayStart;

[.... SNIP ....]
        elsif ( $offSetStart > 0
            && !$FHEM::Automation::ShuttersControl::shutters->getNoDelay )
        {
            ::InternalTimer(
                ::gettimeofday() + int(
                    rand($offSet) +
                      $FHEM::Automation::ShuttersControl::shutters
                      ->getDelayStart
                ),
                \&FHEM::Automation::ShuttersControl::SetCmdFn,
                \%h
            );

Wenn ja, dann muesste ich ja mit
attr <ShutterDevice> ASC_Drive_Delay 1800
die gewuenschte Zufallszeit innerhalb von 30 Minuten bekommen. Oder sehe ich das falsch?

Werde ich gleich mal ausprobieren.

Danke!

CoolTux

Mit ASC_Drive_Delay wird noch mal rand(1800) mit draufgehauen. Es muss aber dafür ASC_Drive_DelayStart gegeben werden.
Also sowas wie ASC_Drive_DelayStart 1 und dann noch ASC_Drive_Delay 1800.

Aber wäre es nicht besser einfach die Werte für Sonnenaufgang und Sonnenuntergang etwas zu ändern durch leichte Horizont Verschiebung?

Irgendwie verstehe ich das Anliegen auch nicht so ganz.
Wieso soll ein so großes Delay zwischen die Fahrten? Anwesenheitssimulation?
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

elle

Hallo CoolTux,

nochmals danke. Da bin ich wohl mit ASC_Drive_Delay und ASC_Drive_DelayStart durcheinander gekommen. Da steht ja auch:
        $offSet = $FHEM::Automation::ShuttersControl::shutters->getDelay
          if ( $FHEM::Automation::ShuttersControl::shutters->getDelay > -1 );
        $offSet = $FHEM::Automation::ShuttersControl::ascDev->getShuttersOffset
          if ( $FHEM::Automation::ShuttersControl::shutters->getDelay < 0 );
        $offSetStart =
          $FHEM::Automation::ShuttersControl::shutters->getDelayStart;
[...snip...]
int(
                    rand($offSet) +
                      $FHEM::Automation::ShuttersControl::shutters
                      ->getDelayStart
                ),
Wer lesen (und verstehen!) kann, ist klar im Vorteil.

Der Sinn ist tatsaechlich eine Art Anwesenheitssimulation.

Als die Rolllaeden zwar elektrisch, aber noch nicht automatisiert waren, bin ich ja auch nicht in einer festen Runde durch's Haus gegangen (ausser kurz vor'm Schlafengehen, falls noch etwas offen war), sondern habe die Rolllaeden etwa zum Sonnenuntergang oder danach zugemacht, so wie ich daran vorbeikam. Da war die Reihenfolge, aber auch die Streuung der Fahrtzeiten zufaellig und dieses habe ich mit Bernds Skript auch so gehabt und finde es nett.

Ich finde es immer komisch, wenn z.B. bei unseren Nachbarn alle Rolllaeden im EG gleichzeitig fahren - im OG machen die das alles von Hand und da ist es auch nicht gleichzeitig oder in einer Runde ...

Uebrigens - hat es irgendeinen speziellen Grund, warum Du, obwohl Du schon
$offsetStart = $FHEM::Automation::ShuttersControl::shutters->getDelayStart;
zugewiesen und im if(...) benutzt hast, danach nicht $offsetStart beim Berechnen des Timers nimmst? Es wird (fast?) keinen Unterschied machen, da die Runtime das eh optimieren wird, aber es hat mich ueberrascht ...

Ansonsten gute Arbeit! Danke dafuer!

Gruss

/elle