
    j                     2    d Z ddlmZmZmZ  G d de      Zy)a  
 Python module to interface with Tuya Electric Heating Blanket

 Author: Leo Denham (https://github.com/leodenham)
 Tested: Goldair Platinum Electric Blanket GPFAEB-Q

 Local Control Classes
    BlanketDevice(...)
        See OutletDevice() for constructor arguments

 Functions
    BlanketDevice:
        get_feet_level()
        get_body_level()
        set_feet_level()
        set_body_level()
        get_feet_time()
        get_body_time()
        set_feet_time()
        set_body_time()
        get_feet_countdown()
        get_body_countdown()


    Inherited
        json = status()                    # returns json payload
        set_version(version)               # 3.1 [default] or 3.3
        set_socketPersistent(False/True)   # False [default] or True
        set_socketNODELAY(False/True)      # False or True [default]
        set_socketRetryLimit(integer)      # retry count limit [default 5]
        set_socketTimeout(timeout)         # set connection timeout in seconds [default 5]
        set_dpsUsed(dps_to_request)        # add data points (DPS) to request
        add_dps_to_request(index)          # add data point (DPS) index set to None
        set_retry(retry=True)              # retry if response payload is truncated
        set_status(on, switch=1, nowait)   # Set status of switch to 'on' or 'off' (bool)
        set_value(index, value, nowait)    # Set int value of any index.
        heartbeat(nowait)                  # Send heartbeat to device
        updatedps(index=[1], nowait)       # Send updatedps command to device
        turn_on(switch=1, nowait)          # Turn on device / switch #
        turn_off(switch=1, nowait)         # Turn off
        set_timer(num_secs, nowait)        # Set timer for num_secs
        set_debug(toggle, color)           # Activate verbose debugging output
        set_sendWait(num_secs)             # Time to wait after sending commands before pulling response
        detect_available_dps()             # Return list of DPS available from device
        generate_payload(command, data)    # Generate TuyaMessage payload for command with data
        send(payload)                      # Send payload to device (do not wait for response)
        receive()
   )Device
error_json	ERR_RANGEc                       e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
 Zd ZddZddZd Zd ZddZddZd Zd ZddZddZy)BlanketDevicez9
    Represents a Tuya based Electric Blanket Device
    dps141516171819level_c                 (    | j                    |dz    S N   )LEVEL_PREFIXselfnums     K/DATA/.local/lib/python3.12/site-packages/tinytuya/Contrib/BlanketDevice.py_number_to_levelzBlanketDevice._number_to_levelD   s    ##$SUG,,    c                 V    t        |j                  | j                        d         dz
  S r   )intsplitr   )r   levels     r   _level_to_numberzBlanketDevice._level_to_numberG   s&    5;;t001!4599r   Nc                     || j                         }| j                  || j                     | j                           }|S N)statusr   DPSDPS_FEET_LEVELr   status_datacurrents      r   get_feet_levelzBlanketDevice.get_feet_levelJ   <    ++-K''DHH(=d>Q>Q(RSr   c                     || j                         }| j                  || j                     | j                           }|S r    )r!   r   r"   DPS_BODY_LEVELr$   s      r   get_body_levelzBlanketDevice.get_body_levelQ   r(   r   c                     |dk  s|dkD  rt        t        d      S | j                  | j                  | j	                  |            S )N       zDset_feet_level: The value for the level needs to be between 0 and 6.)r   r   	set_valuer#   r   r   s     r   set_feet_levelzBlanketDevice.set_feet_levelX   F    !GsQwa  ~~d1143H3H3MNNr   c                     |dk  s|dkD  rt        t        d      S | j                  | j                  | j	                  |            S )Nr-   r.   zDset_body_level: The value for the level needs to be between 0 and 6.)r   r   r/   r*   r   r   s     r   set_body_levelzBlanketDevice.set_body_level_   r1   r   c                     || j                         }|| j                     | j                     }|j                  dd      S Nh )r!   r"   DPS_FEET_TIMEreplacer$   s      r   get_feet_timezBlanketDevice.get_feet_timef   =    ++-Kdhh'(:(:;sB''r   c                     || j                         }|| j                     | j                     }|j                  dd      S r5   )r!   r"   DPS_BODY_TIMEr9   r$   s      r   get_body_timezBlanketDevice.get_body_timem   r;   r   c                 t    |dk  s|dkD  rt        t        d      S | j                  | j                  | d      S )Nr      zCset_feet_time: The value for the time needs to be between 1 and 12.r6   )r   r   r/   r8   r   s     r   set_feet_timezBlanketDevice.set_feet_timet   A    !GsRx`  ~~d00SE)<<r   c                 t    |dk  s|dkD  rt        t        d      S | j                  | j                  | d      S )Nr   r@   zCset_body_time: The value for the time needs to be between 1 and 12.r6   )r   r   r/   r=   r   s     r   set_body_timezBlanketDevice.set_body_time{   rB   r   c                 b    || j                         }|| j                     | j                     }|S r    )r!   r"   DPS_FEET_COUNTDOWNr$   s      r   get_feet_countdownz BlanketDevice.get_feet_countdown   1    ++-Kdhh'(?(?@r   c                 b    || j                         }|| j                     | j                     }|S r    )r!   r"   DPS_BODY_COUNTDOWNr$   s      r   get_body_countdownz BlanketDevice.get_body_countdown   rH   r   r    )__name__
__module____qualname____doc__r"   r*   r#   r=   r8   rJ   rF   r   r   r   r'   r+   r0   r3   r:   r>   rA   rD   rG   rK    r   r   r   r   7   sq     CNNMML-:OO((==r   r   N)rO   corer   r   r   r   rP   r   r   <module>rR      s!   /b 1 0WF Wr   