
    8iq9                        S r SSKJrJrJr  SSKJrJrJrJ	r	J
r
JrJr  SSKJr  SSKJr  SSKJrJrJr  SSKJr  SSKJrJrJrJrJrJrJr  SS	KJ r   SS
K!J"r"  SSK#J$r$J%r%  SSK&J'r'  SSK(J)r)J*r*J+r+  SSK,J-r-  S\ S\S\SS4S jr. " S S\\'5      r/ " S S\$\/5      r0 " S S\/5      r1 " S S\/5      r2 " S S\/5      r3 " S  S!\/5      r4 " S" S#\/5      r5 " S$ S%\/5      r6 " S& S'\/5      r7 " S( S)\05      r8 " S* S+\05      r9 " S, S-\05      r: " S. S/\05      r; " S0 S1\05      r< " S2 S3\05      r= " S4 S5\05      r> " S6 S7\05      r? " S8 S9\05      r@g):zSensor platform for dyson.    )CallableUnionOptional)Dyson360EyeDyson360HeuristDyson360VisNavDysonDeviceDysonPureCoolLinkDysonPurifierHumidifyCoolDysonBigQuiet)MessageType)DysonFanDevice)SensorDeviceClassSensorStateClassSensorEntity)ConfigEntry)(CONCENTRATION_MICROGRAMS_PER_CUBIC_METER(CONCENTRATION_MILLIGRAMS_PER_CUBIC_METERCONCENTRATION_PARTS_PER_MILLION	CONF_NAME
PERCENTAGEUnitOfTemperature
UnitOfTime)HomeAssistant)EntityCategory)CoordinatorEntityDataUpdateCoordinator   )DysonEntity)DATA_COORDINATORSDATA_DEVICESDOMAIN)environmental_propertyhassconfig_entryasync_add_entitiesreturnNc           	        #    U R                   [           [           UR                     nUR                   [           n[        U[        5      (       d*  [        U[        5      (       d  [        U[        5      (       a  [        X45      /nGOU R                   [           [           UR                     n[        XcU5      [        XcU5      [        XcU5      /n[        U[        5      (       a1  UR                  [!        X45      [#        X45      [%        XcU5      /5        O[        U[&        5      (       a9  [)        US5      (       a(  UR*                  b  UR-                  [/        XcU5      5        UR                  [1        XcU5      [3        XcU5      [5        XcU5      /5        UR6                  c  UR-                  [9        X45      5        O%UR                  [;        X45      [=        X45      /5        [        U[>        5      (       a  UR-                  [A        X45      5        [)        US5      (       a(  URB                  b  UR-                  [E        XcU5      5        U" U5        g7f)z(Set up Dyson sensor from a config entry.carbon_dioxideNformaldehyde)#datar"   r!   entry_idr   
isinstancer   r   r   DysonBatterySensorr    DysonHumiditySensorDysonTemperatureSensorDysonVOCSensorr
   extendDysonFilterLifeSensorDysonFilterLifeSensorPercentageDysonParticulatesSensorr   hasattrr)   appendDysonCarbonDioxideSensorDysonPM25SensorDysonPM10SensorDysonNO2Sensorcarbon_filter_lifeDysonCombinedFilterLifeSensorDysonCarbonFilterLifeSensorDysonHEPAFilterLifeSensorr   DysonNextDeepCleanSensorr*   DysonHCHOSensor)r$   r%   r&   devicenameentitiescoordinators          //config/custom_components/dyson_local/sensor.pyasync_setup_entryrG   *   s     YYv|,\-B-BCFY'D&+&&*V_*M*MQ[\bdrQsQs&v45ii'(9:<;P;PQT:";=;5
 f/00OO)&73FA+KF &-006#3449N9N9ZOO$<[RV$WXOO#K>#K>";= ((0 =f KL3FA1&? f788OO4VBC6>**v/B/B/NOOOKFGx s   IIc                      ^  \ rS rSr% Sr\R                  rSr\	\
   \S'   Sr\	\
   \S'   S\S\
4U 4S jjr\S	 5       r\S
 5       rSrU =r$ )DysonSensor^   zBase class for a Dyson sensor.N_SENSOR_TYPE_SENSOR_NAMErB   rC   c                 $   > [         TU ]  X5        g)zInitialize the sensor.N)super__init__)selfrB   rC   	__class__s      rF   rO   DysonSensor.__init__e   s    &    c                     U R                   $ )z$Return the name of the Dyson sensor.)rL   rP   s    rF   sub_nameDysonSensor.sub_namei           rS   c                     U R                   $ )zReturn the sensor's unique id.)rK   rU   s    rF   sub_unique_idDysonSensor.sub_unique_idn   rX   rS    )__name__
__module____qualname____firstlineno____doc__r   STATE_MESSAGE_TYPErK   r   str__annotations__rL   r	   rO   propertyrV   rZ   __static_attributes____classcell__)rQ   s   @rF   rI   rI   ^   sh    (%%M"&L(3-&"&L(3-&'{ '# ' ! ! ! !rS   rI   c                   J    \ rS rSrSr\R                  rS\S\	S\
SS4S jrS	rg)
DysonSensorEnvironmentalt   zDyson environmental sensor.rE   rB   rC   r'   Nc                 \    [         R                  " X5        [        R                  XU5        g)z$Initialize the environmental sensor.N)r   rO   rI   )rP   rE   rB   rC   s       rF   rO   !DysonSensorEnvironmental.__init__y   s"     	""45T40rS   r\   )r]   r^   r_   r`   ra   r   ENVIRONMENTALrc   r   r	   rd   rO   rg   r\   rS   rF   rj   rj   t   s5    %--M101:E1MP1	1rS   rj   c                   T    \ rS rSrSrSrSr\R                  r	\
r\S\4S j5       rSrg)	r.      zDyson battery sensor.battery_levelzBattery Levelr'   c                 .    U R                   R                  $ Return the state of the sensor.)_devicerq   rU   s    rF   native_valueDysonBatterySensor.native_value   s     ||)))rS   r\   N)r]   r^   r_   r`   ra   rK   rL   r   BATTERY_attr_device_classr    _attr_native_unit_of_measurementrf   intrv   rg   r\   rS   rF   r.   r.      s:    "L"L*22'1$*c * *rS   r.   c                   l    \ rS rSrSrSrSr\R                  r	Sr
\R                  r\S\4S j5       rSrg	)
r3      z7Dyson filter life sensor (in hours) for Pure Cool Link.filter_lifeFilter Lifemdi:filter-outliner'   c                 .    U R                   R                  $ rs   ru   r~   rU   s    rF   rv   "DysonFilterLifeSensor.native_value   s     ||'''rS   r\   N)r]   r^   r_   r`   ra   rK   rL   r   
DIAGNOSTIC_attr_entity_category
_attr_iconr   HOURSrz   rf   r{   rv   rg   r\   rS   rF   r3   r3      sE    A L L*55%J'1'7'7$(c ( (rS   r3   c                   \    \ rS rSrSrSrSr\R                  r	Sr
\rSr\S\4S j5       rS	rg
)r4      z<Dyson filter life sensor (in percentage) for Pure Cool Link.filter_life_percentagezFilter Life Percentager   r   r'   c                 :    U R                   R                  S-  S-  $ )z1Return the state of the sensor calculated to a %.i  d   r   rU   s    rF   rv   ,DysonFilterLifeSensorPercentage.native_value   s     ((4/366rS   r\   N)r]   r^   r_   r`   ra   rK   rL   r   r   r   r   r   rz   !_attr_suggested_display_precisionrf   floatrv   rg   r\   rS   rF   r4   r4      sE    F+L+L*55%J'1$()%7e 7 7rS   r4   c                   X    \ rS rSrSrSrSr\R                  r	Sr
\r\S\4S j5       rSrg	)
r>      z>Dyson carbon filter life sensor (in percentage) for Pure Cool.r<   zCarbon Filter Lifer   r'   c                 .    U R                   R                  $ rs   )ru   r<   rU   s    rF   rv   (DysonCarbonFilterLifeSensor.native_value   s     ||...rS   r\   Nr]   r^   r_   r`   ra   rK   rL   r   r   r   r   r   rz   rf   r{   rv   rg   r\   rS   rF   r>   r>      s?    H'L'L*55%J'1$/c / /rS   r>   c                   X    \ rS rSrSrSrSr\R                  r	Sr
\r\S\4S j5       rSrg	)
r?      z<Dyson HEPA filter life sensor (in percentage) for Pure Cool.hepa_filter_lifezHEPA Filter Lifer   r'   c                 .    U R                   R                  $ rs   ru   r   rU   s    rF   rv   &DysonHEPAFilterLifeSensor.native_value        ||,,,rS   r\   Nr   r\   rS   rF   r?   r?      s?    F%L%L*55%J'1$-c - -rS   r?   c                   X    \ rS rSrSrSrSr\R                  r	Sr
\r\S\4S j5       rSrg	)
r=      z@Dyson combined filter life sensor (in percentage) for Pure Cool.combined_filter_lifer   r   r'   c                 .    U R                   R                  $ rs   r   rU   s    rF   rv   *DysonCombinedFilterLifeSensor.native_value   r   rS   r\   Nr   r\   rS   rF   r=   r=      s?    J)L L*55%J'1$-c - -rS   r=   c                       \ rS rSrSrSrSr\R                  r	Sr
\R                  r\S\\   4S j5       r\S\4S j5       rS	rg
)r@      zMSensor of time until next deep clean (in hours) for Dyson Pure Humidify+Cool.next_deep_cleanzNext Deep Cleanr   r'   c                 @    U R                   R                  =nS:  a  U$ grt   r   N)ru   time_until_next_cleanrP   values     rF   rv   %DysonNextDeepCleanSensor.native_value   #     \\777EA=LrS   c                 V    [        U R                  R                  [        [        45      $ zBReturn available only if device not in off, init or failed states.)r-   ru   r   r{   r   rU   s    rF   	available"DysonNextDeepCleanSensor.available        $,,<<sElKKrS   r\   N)r]   r^   r_   r`   ra   rK   rL   r   r   r   r   r   r   rz   rf   r   r{   rv   boolr   rg   r\   rS   rF   r@   r@      sg    W$L$L*55%J'1'7'7$hsm   L4 L LrS   r@   c                       \ rS rSrSrSrSr\R                  r	\
r\R                  r\S\\   4S j5       r\S\4S j5       rSrg	)
r/      zDyson humidity sensor.humidityHumidityr'   c                 @    U R                   R                  =nS:  a  U$ gr   )ru   r   r   s     rF   rv    DysonHumiditySensor.native_value   s#     \\***Eq0LrS   c                 V    [        U R                  R                  [        [        45      $ r   )r-   ru   r   r{   r   rU   s    rF   r   DysonHumiditySensor.available   s     $,,//#u>>rS   r\   N)r]   r^   r_   r`   ra   rK   rL   r   HUMIDITYry   r   rz   r   MEASUREMENT_attr_state_classrf   r   r{   rv   r   r   rg   r\   rS   rF   r/   r/      se     LL*33'1$(44hsm   ?4 ? ?rS   r/   c                       \ rS rSrSrSrSr\R                  r	\
R                  r\R                  r\S\\   4S j5       r\S\4S j5       rSrg	)
r0   i  zDyson temperature sensor.temperatureTemperaturer'   c                 F    U R                   R                  =nS:  a  US-
  $ g)zReturn the "native" value for this sensor.
Note that as of 2021-10-28, Home Assistant does not support converting
from Kelvin native unit to Celsius/Fahrenheit. So we return the Celsius
value as it's the easiest to calculate.
r   gfffffq@N)ru   r   r   s     rF   rv   #DysonTemperatureSensor.native_value  s(     \\---E!36>!rS   c                 V    [        U R                  R                  [        [        45      $ r   )r-   ru   r   r{   r   rU   s    rF   r    DysonTemperatureSensor.available  s     $,,22S%LAArS   r\   N)r]   r^   r_   r`   ra   rK   rL   r   TEMPERATUREry   r   CELSIUSrz   r   r   r   rf   r   r   rv   r   r   rg   r\   rS   rF   r0   r0     sn    # L L*66'8'@'@$(44huo   B4 B BrS   r0   c                       \ rS rSrSrSrSr\R                  r	\
r\R                  r\S\\   4S j5       r\S\4S j5       rSrg	)
r9   i   z1Dyson sensor for PM 2.5 fine particulate matters.pm25zPM 2.5r'   c                 @    U R                   R                  =nS:  a  U$ gr   )ru   particulate_matter_2_5r   s     rF   rv   DysonPM25Sensor.native_value)  s#     \\888EQ>LrS   c                 V    [        U R                  R                  [        [        45      $ r   )r-   ru   r   r{   r   rU   s    rF   r   DysonPM25Sensor.available0  s     $,,==U|LLrS   r\   N)r]   r^   r_   r`   ra   rK   rL   r   PM25ry   r   rz   r   r   r   rf   r   r   rv   r   r   rg   r\   rS   rF   r9   r9      sh    ;LL*//'O$(44huo   M4 M MrS   r9   c                       \ rS rSrSrSrSr\R                  r	\
r\R                  r\S\\   4S j5       r\S\4S j5       rSrg	)
r:   i6  z+Dyson sensor for PM 10 particulate matters.pm10zPM 10r'   c                 @    U R                   R                  =nS:  a  U$ gr   )ru   particulate_matter_10r   s     rF   rv   DysonPM10Sensor.native_value?  r   rS   c                 V    [        U R                  R                  [        [        45      $ r   )r-   ru   r   r{   r   rU   s    rF   r   DysonPM10Sensor.availableF  r   rS   r\   N)r]   r^   r_   r`   ra   rK   rL   r   PM10ry   r   rz   r   r   r   rf   r   r{   rv   r   r   rg   r\   rS   rF   r:   r:   6  sh    5LL*//'O$(44hsm   L4 L LrS   r:   c                       \ rS rSrSrSrSr\R                  r	\
R                  r\S\\   4S j5       r\S\4S j5       rSrg	)
r5   iL  z8Dyson sensor for particulate matters for "Link" devices.aqizAir Quality Indexr'   c                 @    U R                   R                  =nS:  a  U$ gr   )ru   particulatesr   s     rF   rv   $DysonParticulatesSensor.native_valueS  #     \\...E14LrS   c                 V    [        U R                  R                  [        [        45      $ r   )r-   ru   r   r{   r   rU   s    rF   r   !DysonParticulatesSensor.availableZ       $,,33c5\BBrS   r\   Nr]   r^   r_   r`   ra   rK   rL   r   AQIry   r   r   r   rf   r   r{   rv   r   r   rg   r\   rS   rF   r5   r5   L  sb    BL&L*..(44hsm   C4 C CrS   r5   c                       \ rS rSrSrSrSr\R                  r	\
R                  r\S\\   4S j5       r\S\4S j5       rSrg	)
r1   i`  z,Dyson sensor for volatile organic compounds.z	voc-indexz Volatile Organic Compounds Indexr'   c                 @    U R                   R                  =nS:  a  U$ gr   )ru   volatile_organic_compoundsr   s     rF   rv   DysonVOCSensor.native_valueh  s#     \\<<<EBLrS   c                 V    [        U R                  R                  [        [        45      $ r   )r-   ru   r   r{   r   rU   s    rF   r   DysonVOCSensor.availableo  s     $,,AAC<PPrS   r\   Nr   r\   rS   rF   r1   r1   `  sb    6L5L*..(44hsm   Q4 Q QrS   r1   c                       \ rS rSrSrSrSr\R                  r	\
R                  r\S\\   4S j5       r\S\4S j5       rSrg	)
r;   iu  z"Dyson sensor for Nitrogen Dioxide.z	no2-indexzNitrogen Dioxide Indexr'   c                 @    U R                   R                  =nS:  a  U$ gr   )ru   nitrogen_dioxider   s     rF   rv   DysonNO2Sensor.native_value}  s#     \\222Eq8LrS   c                 V    [        U R                  R                  [        [        45      $ r   )r-   ru   r   r{   r   rU   s    rF   r   DysonNO2Sensor.available  s     $,,77#uFFrS   r\   Nr   r\   rS   rF   r;   r;   u  sb    ,L+L*..(44hsm   G4 G GrS   r;   c                   r    \ rS rSrSrSrSr\r\	R                  r\S\\   4S j5       r\S\4S j5       rSrg	)
rA   i  zDyson sensor for Formaldehyde.zhcho-mgHCHOr'   c                 @    U R                   R                  =nS:  a  U$ gr   )ru   r*   r   s     rF   rv   DysonHCHOSensor.native_value  r   rS   c                 V    [        U R                  R                  [        [        45      $ r   )r-   ru   r*   r{   r   rU   s    rF   r   DysonHCHOSensor.available  r   rS   r\   N)r]   r^   r_   r`   ra   rK   rL   r   rz   r   r   r   rf   r   r   rv   r   r   rg   r\   rS   rF   rA   rA     s\    (LL'O$(44huo   C4 C CrS   rA   c                       \ rS rSrSrSrSr\R                  r	\
r\R                  r\S\\   4S j5       r\S\4S j5       rSrg	)
r8   i  z Dyson sensor for Carbon Dioxide.c02zCarbon Dioxider'   c                 @    U R                   R                  =nS:  a  U$ gr   )ru   r)   r   s     rF   rv   %DysonCarbonDioxideSensor.native_value  s#     \\000EQ6LrS   c                 V    [        U R                  R                  [        [        45      $ r   )r-   ru   r)   r{   r   rU   s    rF   r   "DysonCarbonDioxideSensor.available  s     $,,55U|DDrS   r\   N)r]   r^   r_   r`   ra   rK   rL   r   CO2ry   r   rz   r   r   r   rf   r   r   rv   r   r   rg   r\   rS   rF   r8   r8     sh    *L#L*..'F$(44huo   E4 E ErS   r8   )Ara   typingr   r   r   libdysonr   r   r   r	   r
   r   r   libdyson.constr   libdyson.dyson_devicer   homeassistant.components.sensorr   r   r   homeassistant.config_entriesr   homeassistant.constr   r   r   r   r   r   r   homeassistant.corer   homeassistant.helpers.entityr   (homeassistant.helpers.update_coordinatorr   r    r   constr    r!   r"   utilsr#   rG   rI   rj   r.   r3   r4   r>   r?   r=   r@   r/   r0   r9   r:   r5   r1   r;   rA   r8   r\   rS   rF   <module>r     sv     , ,   ' 0 ] ] 4   - 7
  : : )1!
1!'21!HP1!	1!h!, !,
10+ 
1* *(K (7k 7 /+ /- --K -L{ L*?2 ?,B5 B4M. M,L. L,C6 C(Q- Q*G- G*C. C,E7 ErS   