[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

stefan-dd

Zitatsoweit ok. Un nun gib mir mal bitte ein list vom ASC Device und von diesem Rollladen.

Anbei die List, über Nacht hatte ich auf Astro gestellt, da hat es funktioniert. Nur die Helligkeit will nicht.


Internals:
   CFGFN      ./FHEM/fhem_rollo.cfg
   FUUID      5c4392d8-f33f-804b-22e0-55f23eb62a7ec3cc
   NAME       Rollo_OG_O_Ankleide
   NR         34
   STATE      auf
   TYPE       ROLLO
   stoptime   1551592524
   READINGS:
     2019-03-03 06:55:24   ASC_ShuttersLastDrive manual
     2019-03-03 09:25:08   ASC_Time_DriveDown  3.03.2019 - 22:30
     2019-03-03 09:25:08   ASC_Time_DriveUp  4.03.2019 - 09:00
     2019-03-03 06:55:07   command         open
     2019-03-03 06:55:07   desired_pct     0
     2019-03-03 06:55:07   drive-type      modul
     2019-03-03 06:55:07   last_drive      drive-up
     2019-03-03 06:55:24   pct             0
     2019-03-03 09:25:08   position        0
     2019-03-03 06:55:24   state           open
Attributes:
   ASC        1
   ASC_Antifreeze off
   ASC_Antifreeze_Pos 90
   ASC_AutoAstroModeEvening none
   ASC_AutoAstroModeEveningHorizon none
   ASC_AutoAstroModeMorning none
   ASC_AutoAstroModeMorningHorizon none
   ASC_BlockingTime_afterManual 12
   ASC_BlockingTime_beforDayOpen 36
   ASC_BlockingTime_beforNightClose 36
   ASC_BrightnessMaxVal 40
   ASC_BrightnessMinVal 30
   ASC_Brightness_Reading helligkeit
   ASC_Brightness_Sensor Helligkeit
   ASC_Closed_Pos 100
   ASC_ComfortOpen_Pos 20
   ASC_Down   brightness
   ASC_Drive_Offset -1
   ASC_Drive_OffsetStart -1
   ASC_GuestRoom none
   ASC_LockOut off
   ASC_LockOut_Cmd none
   ASC_Mode_Down always
   ASC_Mode_Up always
   ASC_Open_Pos 0
   ASC_Partymode off
   ASC_Pos_Reading position
   ASC_PrivacyDownTime_beforNightClose -1
   ASC_PrivacyDown_Pos 50
   ASC_Roommate_Device none
   ASC_Roommate_Reading state
   ASC_Self_Defense_Exclude off
   ASC_Shading_Angle_Left 75
   ASC_Shading_Angle_Right 75
   ASC_Shading_Direction 90
   ASC_Shading_Min_Elevation 25
   ASC_Shading_Min_OutsideTemperature 18
   ASC_Shading_Mode off
   ASC_Shading_Pos 100
   ASC_Shading_StateChange_Cloudy 20000
   ASC_Shading_StateChange_Sunny 35000
   ASC_Shading_WaitingPeriod 1200
   ASC_ShuttersPlace window
   ASC_Time_Down_Early 15:30
   ASC_Time_Down_Late 22:30
   ASC_Time_Up_Early 04:30
   ASC_Time_Up_Late 09:00
   ASC_Time_Up_WE_Holiday 08:30
   ASC_Up     brightness
   ASC_Ventilate_Pos 70
   ASC_Ventilate_Window_Open on
   ASC_WiggleValue 5
   ASC_WindowRec none
   ASC_WindowRec_subType twostate
   Rollo_alle Rollo_alle
   Rollo_alle_EG Rollo_alle_EG
   alias      Ankleide
   cmdIcon    -
   devStateIcon open:fts_shutter_10:closed closed:fts_shutter_100:open half:fts_shutter_50:closed drive-up:fts_shutter_up@red:stop drive-down:fts_shutter_down@red:stop pct-100:fts_shutter_100:open pct-90:fts_shutter_80:closed pct-80:fts_shutter_80:closed pct-70:fts_shutter_70:closed pct-60:fts_shutter_60:closed pct-50:fts_shutter_50:closed pct-40:fts_shutter_40:open pct-30:fts_shutter_30:open pct-20:fts_shutter_20:open pct-10:fts_shutter_10:open pct-0:fts_shutter_10:closed halb:fts_shutter_50:closed auf:fts_shutter_10:closed zu:fts_shutter_100:open
   eventMap   open:auf closed:zu half:halb
   group      Rollo
   rl_autoStop 0
   rl_commandDown set Rollo_Ankleide_zu on
   rl_commandStopDown set Rollo_Ankleide_zu off
   rl_commandStopUp set Rollo_Ankleide_auf off
   rl_commandUp set Rollo_Ankleide_auf on
   rl_excessBottom 4
   rl_excessTop 1
   rl_forceDrive 1
   rl_resetTime 0
   rl_secondsDown 15
   rl_secondsUp 16
   rl_switchTime 1
   rl_type    normal
   room       Beschattung,Schlafzimmer
   userReadings position { int ( 0.1 * ReadingsVal("$NAME","pct",0) + 0.5 ) / 0.1}
   userattr   ASC_Antifreeze:off,soft,hard,am,pm ASC_Antifreeze_Pos:5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100 ASC_AutoAstroModeEvening:REAL,CIVIL,NAUTIC,ASTRONOMIC,HORIZON ASC_AutoAstroModeEveningHorizon:-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9 ASC_AutoAstroModeMorning:REAL,CIVIL,NAUTIC,ASTRONOMIC,HORIZON ASC_AutoAstroModeMorningHorizon:-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9 ASC_BlockingTime_afterManual ASC_BlockingTime_beforDayOpen ASC_BlockingTime_beforNightClose ASC_BrightnessMaxVal ASC_BrightnessMinVal ASC_Brightness_Reading ASC_Brightness_Sensor ASC_Closed_Pos:0,10,20,30,40,50,60,70,80,90,100 ASC_ComfortOpen_Pos:0,10,20,30,40,50,60,70,80,90,100 ASC_Down:time,astro,brightness ASC_Drive_Offset ASC_Drive_OffsetStart ASC_GuestRoom:on,off ASC_LockOut:soft,hard,off ASC_LockOut_Cmd:inhibit,blocked,protection ASC_Mode_Down:absent,always,off,home ASC_Mode_Up:absent,always,off,home ASC_Open_Pos:0,10,20,30,40,50,60,70,80,90,100 ASC_Partymode:on,off ASC_Pos_Reading ASC_PrivacyDownTime_beforNightClose ASC_PrivacyDown_Pos ASC_Roommate_Device ASC_Roommate_Reading ASC_Self_Defense_Exclude:on,off ASC_Shading_Angle_Left ASC_Shading_Angle_Right ASC_Shading_Direction ASC_Shading_Min_Elevation ASC_Shading_Min_OutsideTemperature ASC_Shading_Mode:absent,always,off,home ASC_Shading_Pos:10,20,30,40,50,60,70,80,90,100 ASC_Shading_StateChange_Cloudy ASC_Shading_StateChange_Sunny ASC_Shading_WaitingPeriod ASC_ShuttersPlace:window,terrace ASC_Time_Down_Early ASC_Time_Down_Late ASC_Time_Up_Early ASC_Time_Up_Late ASC_Time_Up_WE_Holiday ASC_Up:time,astro,brightness ASC_Ventilate_Pos:10,20,30,40,50,60,70,80,90,100 ASC_Ventilate_Window_Open:on,off ASC_WiggleValue ASC_WindowRec ASC_WindowRec_subType:twostate,threestate Rollo_alle Rollo_alle_EG Rollo_alle_EG_map Rollo_alle_map structexclude
   webCmd     zu:auf:halb:stop:pct


Internals:
   FUUID      5c796586-f33f-804b-5f53-365b835b544eae73
   MID        da39a3ee5e6b4b0d3255bfef95601890afd80709
   NAME       myASControl
   NOTIFYDEV  Beleuchtung_Schreibtisch,Helligkeit,Rollo_OG_O_Ankleide,TC_TWILIGHT,global,myASControl
   NR         1308
   NTFY_ORDER 51-myASControl
   STATE      created new drive timer
   TYPE       AutoShuttersControl
   VERSION    0.4.0.9
   OLDREADINGS:
   READINGS:
     2019-03-03 06:55:24   Rollo_OG_O_Ankleide_PosValue 0
     2019-03-03 06:16:43   Rollo_OG_O_Ankleide_lastPosValue 100
     2019-03-03 09:25:08   Rollo_OG_O_Ankleide_nextAstroTimeEvent  3.03.2019 - 22:30
     2019-03-01 18:01:59   hardLockOut     off
     2019-03-01 18:01:59   partyMode       off
     2019-03-02 21:15:07   room_Beschattung_Schlafzimmer Rollo_OG_O_Ankleide
     2019-03-01 18:01:59   selfDefense     off
     2019-03-03 09:25:08   state           created new drive timer
     2019-03-01 18:01:59   sunriseTimeWeHoliday off
     2019-03-02 21:15:07   userAttrList    rolled out
   helper:
     shuttersList:
       Rollo_OG_O_Ankleide
   monitoredDevs:
     Beleuchtung_Schreibtisch:
       Rollo_OG_O_Ankleide ASC_Brightness_Sensor
     Helligkeit:
       Rollo_OG_O_Ankleide ASC_Brightness_Sensor
     TC_TWILIGHT:
       myASControl ASC_twilightDevice
Attributes:
   ASC_autoAstroModeEvening CIVIL
   ASC_autoAstroModeMorning CIVIL
   ASC_autoShuttersControlEvening on
   ASC_autoShuttersControlMorning on
   ASC_temperatureReading temperature
   ASC_twilightDevice TC_TWILIGHT
   devStateIcon selfeDefense.terrace:fts_door_tilt created.new.drive.timer:clock .*asleep:scene_sleeping roommate.(awoken|home):user_available residents.(home|awoken):status_available manual:fts_shutter_manual selfeDefense.active:status_locked selfeDefense.inactive:status_open day.open:scene_day night.close:scene_night shading.in:weather_sun shading.out:weather_cloudy


CoolTux

Zitat von: stefanpf am 03 März 2019, 09:08:19
Ich hätte da gerne noch einmal ein Problem mit der Anwesenheit  :D

ASC_Mode_Down = absent
ASC_Mode_Up = always

- Rollladen ist gestern Abend automatisch heruntergefahren, da RM abwesend
- Als ich nach Hause gekommen bin wurde die Anwesenheit nicht erkannt (Wifi am Handy hat herumgespackt) und ich habe den Rollladen von Hand geöffnet
- Heute um 06:34 habe ich das Handy in die Hand genommen, die Anwesenheit wurde erkannt und der Rollladen ist automatisch heruntergefahren (was er ja eigentlich nicht soll)

Wenn du dir mal das (zugegeben schlechte - aber ich kann es nicht besser) Flussdiagramm im Anhang anschauen möchtest.
Der orange markierte Zweig beinhaltet meines Erachtens nach die Ursache:
Durch das ODER zwischen getModeUp und getModeDown im IF in Zeile 914ff huschen beide in die nächste Ebene.

In den nachgelagerten Geschichten fehlen dann die entsprechenden Abbruchbedingungen.

Beim Herunterfahren so um Zeile 933: if ( not $shutters->getModeDown eq 'absent')
Beim Hochfahren so um Zeile 946:   .... and ( not $shutters->getModeUp eq 'absent')
Beim Lüften Zeile 938:  elseif ( not $shutters->getModeUp eq 'absent')  {
* letzteres hängt natürlich von der eigentlichen Definition der  Komfortfunktion ab. Wenn Komfort höher priorisiert ist als getModeUp/-Down ist es meiner Meinung nach aktuell ok)


2019.03.03 06:34:28.449 4: AutoShuttersControl (Rollladensteuerung) - Devname: rr_Stefan Name: Rollladensteuerung Notify: [
  'durTimerAbsence_cr: 789',
  'durTimerAbsence: 13:09:01'
]

2019.03.03 06:34:28.458 4: AutoShuttersControl (Rollladensteuerung) - Devname: DiePflugs Name: Rollladensteuerung Notify: [
  'durTimerAbsence_cr: 789',
  'durTimerAbsence: 13:09:01'
]

2019.03.03 06:34:29.658 4: AutoShuttersControl (Rollladensteuerung) - Devname: DiePflugs Name: Rollladensteuerung Notify: [
  'residentsTotalRoommatesPresent: 1',
  'residentsTotalRoommatesPresentDevs: rr_Stefan',
  'residentsTotalRoommatesPresentNames: Stefan',
  'residentsTotalRoommatesAbsent: 1',
  'residentsTotalRoommatesAbsentDevs: rr_Vanessa',
  'residentsTotalRoommatesAbsentNames: Vanessa',
  'residentsTotalPresent: 1',
  'residentsTotalPresentDevs: rr_Stefan',
  'residentsTotalPresentNames: Stefan',
  'residentsTotalAbsent: 1',
  'residentsTotalAbsentDevs: rr_Vanessa',
  'residentsTotalAbsentNames: Vanessa',
  'residentsHome: 1',
  'residentsHomeDevs: rr_Stefan',
  'residentsHomeNames: Stefan',
  'residentsAbsent: 0',
  'residentsAbsentDevs: -',
  'residentsAbsentNames: -',
  'lastState: absent',
  'state: home',
  'presence: present',
  'lastArrival: 2019-03-03 06:34:29',
  'lastDurAbsence: 13:09:02',
  'lastDurAbsence_cr: 789',
  'durTimerAbsence_cr: 0',
  'durTimerAbsence: 00:00:00',
  'lastActivity: home',
  'lastActivityBy: Stefan',
  'lastActivityByDev: rr_Stefan'
]

2019.03.03 06:34:29.672 4: AutoShuttersControl (Rollladensteuerung) - Devname: rr_Stefan Name: Rollladensteuerung Notify: [
  'lastState: absent',
  'state: home',
  'mood: calm',
  'presence: present',
  'location: home',
  'lastArrival: 2019-03-03 06:34:29',
  'lastDurAbsence: 13:09:02',
  'lastDurAbsence_cr: 789',
  'durTimerAbsence_cr: 0',
  'durTimerAbsence: 00:00:00'
]

2019.03.03 06:34:29.672 4: AutoShuttersControl (Rollladensteuerung) - EventProcessingRoommate: state
2019.03.03 06:34:29.672 4: AutoShuttersControl (Rollladensteuerung) - EventProcessingRoommate: wz_Rollladen_TuerLI und Events lastState: absent state: home mood: calm presence: present location: home lastArrival: 2019-03-03 06:34:29 lastDurAbsence: 13:09:02 lastDurAbsence_cr: 789 durTimerAbsence_cr: 0 durTimerAbsence: 00:00:00
2019.03.03 06:34:29.672 4: AutoShuttersControl (Rollladensteuerung) - EventProcessingRoommate_1: wz_Rollladen_TuerLI und Events lastState: absent state: home mood: calm presence: present location: home lastArrival: 2019-03-03 06:34:29 lastDurAbsence: 13:09:02 lastDurAbsence_cr: 789 durTimerAbsence_cr: 0 durTimerAbsence: 00:00:00
2019.03.03 06:34:29.677 4: AutoShuttersControl (Rollladensteuerung) - Devname: Rollladensteuerung Name: Rollladensteuerung Notify: [
  'wz_Rollladen_TuerLI_lastPosValue: 100'
]

2019.03.03 06:34:29.678 4: AutoShuttersControl (Rollladensteuerung) - ShuttersCommandSet setDriveCmd wird aufgerufen
2019.03.03 06:34:32.679 4: AutoShuttersControl (Rollladensteuerung) - Devname: Rollladensteuerung Name: Rollladensteuerung Notify: [
  'state: roommate home'
]

2019.03.03 06:34:32.910 4: AutoShuttersControl (Rollladensteuerung) - Devname: wz_Rollladen_TuerLI Name: Rollladensteuerung Notify: [
  'motor: down:open'
]

2019.03.03 06:34:47.255 4: AutoShuttersControl (Rollladensteuerung) - Devname: srv.astro Name: Rollladensteuerung Notify: [
  'MoonAlt: 3.2',
  'SunDistance: 148301544',
  'ObsTime: 06:34:47',
  'MoonDistanceObserver: 404124',
  'SunAlt: -5.8',
  'SunDistanceObserver: 148302202',
  'SunAz: 93.7',
  'ObsLMST: 16:51:49',
  'MoonAz: 129.8',
  'MoonDistance: 404386',
  'ObsGMST: 16:17:38'
]

2019.03.03 06:34:58.417 4: AutoShuttersControl (Rollladensteuerung) - Devname: wz_Rollladen_TuerLI Name: Rollladensteuerung Notify: [
  'motor: stop:close',
  'pct: 0'
]

2019.03.03 06:34:58.419 4: AutoShuttersControl (Rollladensteuerung) - Devname: Rollladensteuerung Name: Rollladensteuerung Notify: [
  'wz_Rollladen_TuerLI_PosValue: 0'
]


Super. Ich danke Dir. Schaue ich mir die Tage an. Kann mir durch aus vorstellen daß da ein Bug drin steckt.
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

kpl

Hallo,

ich bin dabei die Rollo Steuerung auf das ASC Modul umzustellen und habe dabei das Problem, das ich gerne ein anderen set Befehl zum Fahren verwenden würde.
Ich verwende SOMFY Rollos wegen Homkit Kompatibilität mit ,,positionInverse 1" Attribut. Wenn dieses Attribut gesetzt ist funktioniert das für SOMFY Rollos standardmäßig verwendeten Befehl zum fahren ,,Position" nicht richtig. Deshalb würde ich gerne den funktionierenden Befehl zum fahren ,,pos" verwenden.
Ich habe das Attribut ,,ASC_Pos_Reading pos" gesetzt. Was bei bekannten Rollos anscheinend aber keine Auswirkung auf den set Befehl zum Fahren hat. Könnte dies eventuell geändert werden?

Gruß,
Peter

Wuppi68

Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

CoolTux

Zitat von: Wuppi68 am 03 März 2019, 12:41:04
@CoolTux:

et lüppt ;-) Perfect job

Dann Dir. Freut mich das es läuft. Die kleinen Bugs bekommen wir auch noch weg.


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

CoolTux

Zitat von: kpl am 03 März 2019, 11:40:41
Hallo,

ich bin dabei die Rollo Steuerung auf das ASC Modul umzustellen und habe dabei das Problem, das ich gerne ein anderen set Befehl zum Fahren verwenden würde.
Ich verwende SOMFY Rollos wegen Homkit Kompatibilität mit ,,positionInverse 1" Attribut. Wenn dieses Attribut gesetzt ist funktioniert das für SOMFY Rollos standardmäßig verwendeten Befehl zum fahren ,,Position" nicht richtig. Deshalb würde ich gerne den funktionierenden Befehl zum fahren ,,pos" verwenden.
Ich habe das Attribut ,,ASC_Pos_Reading pos" gesetzt. Was bei bekannten Rollos anscheinend aber keine Auswirkung auf den set Befehl zum Fahren hat. Könnte dies eventuell geändert werden?

Gruß,
Peter

Hallo Peter,

Leider lässt sich das nicht ändern. Ich denke die Tage mal drüber nach.
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

stefanpf

Zitat von: CoolTux am 03 März 2019, 10:03:41
Super. Ich danke Dir. Schaue ich mir die Tage an. Kann mir durch aus vorstellen daß da ein Bug drin steckt.

Danke für die Beachtung  8)
ich hätte da noch 1-2 Dinge, die vielleicht nicht ganz stimmen

Auswertung von ASC_autoShuttersControlEvening (...and $ascDev->getAutoShuttersControlEvening eq 'on'...) müsste meiner Meinung nach konsequenter Weise auch an folgenden Stellen geprüft werden:
- "Schließen, wenn RM nachts nach Hause kommt und getDownMode='home|always' " [/b] (Um Zeile 933)
- "Lüften, wenn RM nachts nach Hause kommt und getDownMode='home|always' " [/b] (Um Zeile 938)
- "Schließen, wenn RM geht und getDownMode='absent'" [/b] (Um Zeile 984)

Auswertung von ASC_autoShuttersControlMorning eq 'on' in Zeile 888 schränkt das vorhin erwähnte Schließen (und je nach Definition Lüften)  unnötig ein. Ein Schließen wird verhindert wenn global das automatische Öffnen deaktiviert ist.
Das Gleiche gilt für den Filter and (  $shutters->getModeUp eq 'always' or $shutters->getModeUp eq 'home' )[/b] in Zeile 890.
Das Schließen wird hier abhängig von ASC_Mode_Up gemacht.

Auswertung von isday() könnte auch an folgenden Stellen geprüft werden:
- Schließen, wenn RM schlafen geht
- Lüften, wenn RM schlafen geht
Beides Zeile 971 ff.
Auch dies ist natürlich eine Definitionssache.
Wenn beim erneuten Zubettgehen "befohlene Nacht" ist, ist das natürlich richtig (ist vermutlich ganz nett für jemand mit Nachtschicht).


P.S.
Nur zur Sicherheit: ich will hier nicht unkonstruktiv an eurer Arbeit rum mosern und vielleicht sind meine Einschätzungen / Interpretationen (keine Ahnung von PERL) auch falsch.
Wenn ich gleich noch Langeweile habe, versuche ich einmal die EventProcessingRoommate grafisch umzustellen.
Eventuell bekommt man den gewachsenen Code ja etwas übersichtlicher dargestellt.

CoolTux

Zitat von: stefanpf am 03 März 2019, 12:55:29
Danke für die Beachtung  8)
ich hätte da noch 1-2 Dinge, die vielleicht nicht ganz stimmen

Auswertung von ASC_autoShuttersControlEvening (...and $ascDev->getAutoShuttersControlEvening eq 'on'...) müsste meiner Meinung nach konsequenter Weise auch an folgenden Stellen geprüft werden:
- "Schließen, wenn RM nachts nach Hause kommt und getDownMode='home|always' " [/b] (Um Zeile 933)
- "Lüften, wenn RM nachts nach Hause kommt und getDownMode='home|always' " [/b] (Um Zeile 938)
- "Schließen, wenn RM geht und getDownMode='absent'" [/b] (Um Zeile 984)

Auswertung von ASC_autoShuttersControlMorning eq 'on' in Zeile 888 schränkt das vorhin erwähnte Schließen (und je nach Definition Lüften)  unnötig ein. Ein Schließen wird verhindert wenn global das automatische Öffnen deaktiviert ist.
Das Gleiche gilt für den Filter and (  $shutters->getModeUp eq 'always' or $shutters->getModeUp eq 'home' )[/b] in Zeile 890.
Das Schließen wird hier abhängig von ASC_Mode_Up gemacht.

Auswertung von isday() könnte auch an folgenden Stellen geprüft werden:
- Schließen, wenn RM schlafen geht
- Lüften, wenn RM schlafen geht
Beides Zeile 971 ff.
Auch dies ist natürlich eine Definitionssache.
Wenn beim erneuten Zubettgehen "befohlene Nacht" ist, ist das natürlich richtig (ist vermutlich ganz nett für jemand mit Nachtschicht).


P.S.
Nur zur Sicherheit: ich will hier nicht unkonstruktiv an eurer Arbeit rum mosern und vielleicht sind meine Einschätzungen / Interpretationen (keine Ahnung von PERL) auch falsch.
Wenn ich gleich noch Langeweile habe, versuche ich einmal die EventProcessingRoommate grafisch umzustellen.
Eventuell bekommt man den gewachsenen Code ja etwas übersichtlicher dargestellt.

Ich finde die Idee super. Das ist noch das was den Usern glaube fehlt. Ist schwer zu schreiben wie was reagiert wen jener oder solcher Event kommt.
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

stefanpf

Anbei mal ein Vorschlag für EventProcessingRoommate zur Prüfung.

Ich war mal so mutig es in meine Liveumgebung aufzunehmen, es schmeißt erst einmal keine Fehler, getestet habe ich natürlich noch nicht jede Konstellation  8)


## Sub zum steuern der Rolladen bei einem Bewohner/Roommate Event

sub EventProcessingRoommate($@) {
    my ( $hash, $shuttersDev, $events ) = @_;
    my $name = $hash->{NAME};

    $shutters->setShuttersDev($shuttersDev);
    my $reading = $shutters->getRoommatesReading;


    if ( $events =~ m#$reading:\s(absent|gotosleep|asleep|awoken|home)# ) {

my $position;

        Log3( $name, 4,
            "AutoShuttersControl ($name) - EventProcessingRoommate: "
              . $shutters->getRoommatesReading );
        Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate: $shuttersDev und Events $events"
        );

if (
IsDay( $hash, $shuttersDev )
and $ascDev->getAutoShuttersControlMorning eq 'on'
)
{
if (
( $1 eq 'home' or $1 eq 'awoken' )
and (  $shutters->getRoommatesStatus eq 'home'
or $shutters->getRoommatesStatus eq 'awoken' )
and (  $shutters->getModeUp eq 'always'
or $shutters->getModeUp eq 'home' )
and IsAfterShuttersTimeBlocking( $hash, $shuttersDev )
)
{
if (
(
   $shutters->getRoommatesLastStatus eq 'asleep'
or $shutters->getRoommatesLastStatus eq 'awoken'
)
)
{
Log3( $name, 4,
"AutoShuttersControl ($name) - EventProcessingRoommate_2: $shuttersDev und Events $events"
);
$shutters->setLastDrive('roommate awoken');
ShuttersCommandSet( $hash, $shuttersDev,
$shutters->getOpenPos );
}
elsif (
(
   $shutters->getRoommatesLastStatus eq 'absent'
or $shutters->getRoommatesLastStatus eq 'gone'
or $shutters->getRoommatesLastStatus eq 'home'
)
and $shutters->getStatus == $shutters->getClosedPos
)
{
                    $shutters->setLastDrive('roommate home');
                    ShuttersCommandSet( $hash, $shuttersDev,
                        $shutters->getOpenPos );
}

}
}
elsif (
not IsDay(  $hash, $shuttersDev )
and $ascDev->getAutoShuttersControlEvening eq 'on'
)
{
if (
   $shutters->getRoommatesStatus eq 'home'
or $shutters->getRoommatesStatus eq 'awoken' )
and (  $shutters->getModeDown eq 'always'
or $shutters->getModeDown eq 'home' )
and IsAfterShuttersTimeBlocking( $hash, $shuttersDev )
)
{
if (    CheckIfShuttersWindowRecOpen($shuttersDev) == 0
                        or $shutters->getVentilateOpen eq 'off' )
                {
                    $position = $shutters->getClosedPos;
                }
else {
                    $position = $shutters->getVentilatePos;
                    $shutters->setLastDrive(
                        $shutters->getLastDrive . ' - ventilate mode' );
                }
                ShuttersCommandSet( $hash, $shuttersDev, $position );

}
elsif (
   $shutters->getRoommatesStatus eq 'gotosleep'
or $shutters->getRoommatesStatus eq 'asleep' )
and (  $shutters->getModeDown eq 'always'
or $shutters->getModeDown eq 'home' )
and IsAfterShuttersTimeBlocking( $hash, $shuttersDev )
)
{
if (    CheckIfShuttersWindowRecOpen($shuttersDev) == 0
                        or $shutters->getVentilateOpen eq 'off' )
                {
                    $position = $shutters->getClosedPos;
                }
else {
                    $position = $shutters->getVentilatePos;
                    $shutters->setLastDrive(
                        $shutters->getLastDrive . ' - ventilate mode' );
                }
                ShuttersCommandSet( $hash, $shuttersDev, $position );

}
elsif (
    $shutters->getRoommatesStatus eq 'absent'
and $shutters->getModeDown eq 'absent'
and IsAfterShuttersTimeBlocking( $hash, $shuttersDev )
)
{
$shutters->setLastDrive('roommate absent');
ShuttersCommandSet( $hash, $shuttersDev, $shutters->getClosedPos );
}
}
}
}


CoolTux

Ich habe den Code jetzt etwas umgeschrieben. Teste ihn nun noch. Außerdem habe ich pah seine Empfehlungen angefangen um zu setzen.


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

no_Legend

@CoolTux

Ma ne frage zu Unwetter Warnungen.
Ist dazu schon etwas eingebaut oder in Planung?
Also bei meinen Dachfenster rolladen wäre es zum Beispiel gut wenn diese bei zum Beispiel wegen einer  Hagelmedung zu fahren würden.
Und dann auch solange die Unwetter Warnung besteht keine fahrbefehle mehr ausführen würden.

Nur so als idee

Danke und Gruß Robert



Gesendet von iPhone mit Tapatalk Pro
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

CoolTux

Zitat von: no_Legend am 04 März 2019, 16:27:53
@CoolTux

Ma ne frage zu Unwetter Warnungen.
Ist dazu schon etwas eingebaut oder in Planung?
Also bei meinen Dachfenster rolladen wäre es zum Beispiel gut wenn diese bei zum Beispiel wegen einer  Hagelmedung zu fahren würden.
Und dann auch solange die Unwetter Warnung besteht keine fahrbefehle mehr ausführen würden.

Nur so als idee

Danke und Gruß Robert



Gesendet von iPhone mit Tapatalk Pro

Hallo Robert,

Direkt Warnungsmeldungen sind nicht eingebaut. Es gibt aktuell das reagieren auf einen Regensensor und in Entwicklung und Testen ist eine Version mit Windsensor.
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

mobiljoe123

Zitat von: CoolTux am 04 März 2019, 16:30:53
Es gibt aktuell das reagieren auf einen Regensensor ...
Hierfür benötige ich nochmal Deine Unterstützung.

list ASC Device:
Internals:
   FUUID      5c76dc55-f33f-95bd-09d2-b3679e6c324f0ce1
   MID        da39a3ee5e6b4b0d3255bfef95601890afd80709
   NAME       Rollladenautomatik
   NOTIFYDEV  EG_Bad_Fenster,Rollladenautomatik,global,myTwilight,netatmo_M05_00_00_02_9d_cc,zuHause,Bad_Rollladen
   NR         407
   NTFY_ORDER 51-Rollladenautomatik
   STATE      created new drive timer
   TYPE       AutoShuttersControl
   VERSION    0.4.0.9
   OLDREADINGS:
   READINGS:
     2019-03-04 18:46:20   Bad_Rollladen_PosValue 0
     2019-03-04 18:46:00   Bad_Rollladen_lastPosValue 100
     2019-03-04 18:46:00   Bad_Rollladen_nextAstroTimeEvent  5.03.2019 - 06:34
     2019-02-27 19:52:06   hardLockOut     off
     2019-02-27 19:52:06   partyMode       off
     2019-02-28 10:07:47   room_Bad        Bad_Rollladen
     2019-02-27 19:52:06   selfDefense     off
     2019-03-04 18:46:00   state           created new drive timer
     2019-02-27 19:52:06   sunriseTimeWeHoliday off
     2019-02-28 10:07:47   userAttrList    rolled out
   helper:
     shuttersList:
       Bad_Rollladen
   monitoredDevs:
     Bad_Rollladen:
     EG_Bad_Fenster:
       Bad_Rollladen ASC_WindowRec
     myTwilight:
       Rollladenautomatik ASC_twilightDevice
     netatmo_M05_00_00_02_9d_cc:
       Rollladenautomatik ASC_rainSensorDevice
     zuHause:
       Rollladenautomatik ASC_residentsDevice
Attributes:
   ASC_autoAstroModeEvening CIVIL
   ASC_autoAstroModeMorning CIVIL
   ASC_autoShuttersControlEvening on
   ASC_autoShuttersControlMorning on
   ASC_autoShuttersControlShading off
   ASC_expert 1
   ASC_rainSensorDevice netatmo_M05_00_00_02_9d_cc
   ASC_rainSensorReading rain
   ASC_rainSensorShuttersClosedPos 50
   ASC_residentsDevice zuHause
   ASC_temperatureReading temperature
   ASC_temperatureSensor netatmo_M02_00_00_17_87_e4
   ASC_twilightDevice myTwilight
   devStateIcon selfeDefense.terrace:fts_door_tilt created.new.drive.timer:clock .*asleep:scene_sleeping roommate.(awoken|home):user_available residents.(home|awoken):status_available manual:fts_shutter_manual selfeDefense.active:status_locked selfeDefense.inactive:status_open day.open:scene_day night.close:scene_night shading.in:weather_sun shading.out:weather_cloudy
   icon       fts_shutter_automatic
   room       Rollladenautomatik
   verbose    0


list Regensensor:
Internals:
   CHANGED   
   DEF        MODULE 70:ee:50:17:8f:ca 05:00:00:02:9d:cc
   Device     70:ee:50:17:8f:ca
   FUUID      5c442fa3-f33f-95bd-0579-1d5e55ff01fbf1ef
   IODev      Wetter
   LAST_POLL  2019-03-04 18:50:09
   Module     05:00:00:02:9d:cc
   NAME       netatmo_M05_00_00_02_9d_cc
   NOTIFYDEV  global
   NR         61
   NTFY_ORDER 50-netatmo_M05_00_00_02_9d_cc
   STATE      Niederschlag aktuell: 0 l/qm - Niederschlag Tagesmenge: 35.7 l/qm
   SUBTYPE    MODULE
   TYPE       netatmo
   dataTypes  Rain
   firmware   8
   last_message 2019-03-04 18:08:56
   last_seen  2019-03-04 18:08:56
   last_setup 2016-10-25 15:24:00
   model      NAModule3
   moduleName Garten_Regenmesser
   openRequests 0
   rf_status  54
   status     ok
   CHANGETIME:
     2019-03-04 18:49:06
   READINGS:
     2019-03-04 18:50:09   active          ok
     2019-03-04 18:09:18   batteryPercent  60
     2019-03-04 18:09:18   batteryState    ok
     2019-03-04 18:09:18   batteryVoltage  5.046
     2019-03-04 18:49:06   rain            0
     2019-03-04 18:08:44   rain_day        35.7
     2019-03-04 18:08:44   rain_hour       0.303
     2018-09-06 07:43:09   rain_sum        235.329999999999
     2018-10-03 00:21:18   rain_total      308.907
   helper:
     INTERVAL   900
     NEXT_POLL  1551722414
     last_status_store 1551721746
     readingNames:
       rain
Attributes:
   IODev      Wetter
   alias      Regenmesser im Garten
   devStateIcon .*:no-icon
   event-on-change-reading .*
   group      Haus
   icon       netatmo.rain
   room       Haus
   stateFormat Niederschlag aktuell: rain l/qm - Niederschlag Tagesmenge: rain_day l/qm
   uiDeviceType LABEL-VALUE-LIST
   uiDeviceTypeParameter aktuelle Regenmenge;Tagesregenmenge;Vorhersage
   uiDisplayName Regenmesser
   uiDisplayOrder 3
   uiDisplayRoom Allg. Hausinformation
   uiGet      [[DEVICE:%D%:rain|TEXT:%1% mm]];[[DEVICE:%D%:rain_day|TEXT:%1% mm]];[[DEVICE:Garten_forecast:fc0_rain|TEXT:%1% mm]]
   uiShow     1
   verbose    0


Heute hat es mehrfach geregnet und unter rain (Regensensor) stand bswp. 0.202 oder auch 0.907
Dann sollte doch der Rolladen auf pct 50 fahren. Muss ich noch etwas einstellen?

Siehst Du ggf. warum der Rolladen nicht gefahren ist?
Raspi 2; HM; MAX!; RFXtrx

CoolTux

Jepp sehe ich.
Da ich keinen Regensensor habe und nicht wusste was man da für Werte einstellen kann, habe ich pauschal > 100 genommen.

Du wirst also vorerst nicht drum rum kommen ein userReading zu machen mit anscheinend * 100


userReadings rainASC:rain:.* { RadingsVal($name,'rain',0) * 100 }


So sollte er Dir entsprechende Werte geben. Und im ASC gibst als rain Reading einfach rainASC an.

Ich bin eh gerade dabei die Dinge um zu bauen. Ich werde also dafür sorgen das man einen rain Wert setzen kann.
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

stefanpf

Wäre da nicht eventuell ein universelles Interface zum Eingreifen mit externer Logik / Sensoren sinnvoller ?
Angenommen es gäbe einen Warndienst für Zugvögelschwärme und ich möchte die Rollläden entsprechend absenken  :D

Eventuell würden da ja bereits 1-2 Readings pro Rollladen reichen, mit denen man die anzufahrende Position  und ein paar Rahmenbedinungen wie "Sperre für weitere Automatisierung durch ASC" oder so  setzen kann. Wenn man zusätzlich den aktuellen ASC-Zustand eines Devices im Reading abgreifen kann, wäre man doch super flexibel aufgestellt.