
    j-                     *    d Z ddlmZ  G d de      Zy)a+	  
 Python module to interface with Tuya WiFi Dual Meter Devices

 Author: Guillaume Gardet

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

 Functions
    WiFiDualMeterDevice:
        get_current_b()
        get_total_power()
        get_voltage_calibration()
        get_current_calibration_a()
        get_power_calibration_a()
        get_energy_calibration_a()
        get_power_factor_b()
        get_current_calibration_b()
        get_power_calibration_b()
        get_energy_calibration_b()
        get_energy_reverse_calibration_a()
        get_energy_reverse_calibration_b()
        get_report_rate()
    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()
   )Devicec                      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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ZdZdZdZi edddd ed!ddd ed"d#d$d ed%d&d'gd(ed)d&d'gd(ed*d#d$d e	d+ddd e
d,ddd ed-ddd ed.ddd ed/dd0ed1d2dd ed3d4d$d ed5d6d7ed8d6d7ed9d#d$d ed:d;d0ed<d;d0ed=d;d0ed>d;d0ed?dd0ed@d;d0edAd;d0edBd;d0edCd;d0edDd;d0edEdFd7i
ZdedHZ dedIZ!dedJZ"dedKZ#dedLZ$dedMZ%dedNZ&dedOZ'dedPZ(dedQZ)dedRZ*dedSZ+dedTZ,dedUZ-dedVZ.dedWZ/dedXZ0dedYZ1dedZZ2ded[Z3ded\Z4ded]Z5ded^Z6ded_Z7ded`Z8dedaZ9dedbZ:dedcZ;deddZ<yG)fWiFiDualMeterDevice12101102104105106107108109110111112113114115116117118119121122123124125127128129forward_energy_totalkWhd   )nameunitscalereverse_energy_totalpower_aW
   dir_curent_aFORWARDREVERSE)r%   enumdir_current_bpower_bforward_energy_areverse_energy_aforward_energy_breverse_energy_bpower_factor_a)r%   r'   ac_frequencyHz
ac_voltageV	current_amA)r%   r&   	current_btotal_powervoltage_calibrationi  current_calibration_apower_calibration_aenergy_calibration_apower_factor_bcurrent_calibration_bpower_calibration_benergy_calibration_benergy_calibration_reverse_aenergy_calibration_reverse_breport_ratesNc                 J   || j                         }| j                  |   d   }	 | j                  |   d   }	 | j                  |   d   }|d   |   }t        |t              r||z  }|dz   ||dz   t        |      d	z   |z   iS # t        $ r d}Y Xw xY w# t        $ r d}Y Vw xY w)
Nr%   r'      r&    dps_raw_fmt )statusdps_dataKeyError
isinstanceintstr)selfdps_codestatus_datar%   r'   r&   vals          Q/DATA/.local/lib/python3.12/site-packages/tinytuya/Contrib/WiFiDualMeterDevice.py	get_valuezWiFiDualMeterDevice.get_values   s    ++-K}}X&v.	MM(+G4E	==*62D % *c3+CVSVSX^T13 	3  	E	  	D	s"   B B BBB"!B"c                 :    | j                  | j                        S N)rY   )r]   DPS_FORWARD_ENERGY_TOTALrX   rZ   s     r\   get_forward_energy_totalz,WiFiDualMeterDevice.get_forward_energy_total       ~~t'D'D~EE    c                 :    | j                  | j                        S r_   )r]   DPS_REVERSE_ENERGY_TOTALra   s     r\   get_reverse_energy_totalz,WiFiDualMeterDevice.get_reverse_energy_total   rc   rd   c                 :    | j                  | j                        S r_   )r]   DPS_POWER_Ara   s     r\   get_power_azWiFiDualMeterDevice.get_power_a       ~~t'7'7~88rd   c                 :    | j                  | j                        S r_   )r]   DPS_DIR_CUR_Ara   s     r\   get_dir_cur_az!WiFiDualMeterDevice.get_dir_cur_a       ~~t'9'9~::rd   c                 :    | j                  | j                        S r_   )r]   DPS_DIR_CUR_Bra   s     r\   get_dir_cur_bz!WiFiDualMeterDevice.get_dir_cur_b   ro   rd   c                 :    | j                  | j                        S r_   )r]   DPS_POWER_Bra   s     r\   get_power_bzWiFiDualMeterDevice.get_power_b   rk   rd   c                 :    | j                  | j                        S r_   )r]   DPS_ENERGY_FORWARD_Ara   s     r\   get_energy_forward_az(WiFiDualMeterDevice.get_energy_forward_a       ~~t'@'@~AArd   c                 :    | j                  | j                        S r_   )r]   DPS_ENERGY_REVERSE_Ara   s     r\   get_energy_reverse_az(WiFiDualMeterDevice.get_energy_reverse_a   ry   rd   c                 :    | j                  | j                        S r_   )r]   DPS_ENERGY_FORWARD_Bra   s     r\   get_energy_forward_bz(WiFiDualMeterDevice.get_energy_forward_b   ry   rd   c                 :    | j                  | j                        S r_   )r]   DPS_ENERGY_REVERSE_Bra   s     r\   get_energy_reverse_bz(WiFiDualMeterDevice.get_energy_reverse_b   ry   rd   c                 :    | j                  | j                        S r_   )r]   DPS_POWER_FACTOR_Ara   s     r\   get_power_factor_az&WiFiDualMeterDevice.get_power_factor_a       ~~t'>'>~??rd   c                 :    | j                  | j                        S r_   )r]   DPS_FREQra   s     r\   get_freqzWiFiDualMeterDevice.get_freq   s    ~~t}}~55rd   c                 :    | j                  | j                        S r_   )r]   DPS_VOLTAGEra   s     r\   get_voltagezWiFiDualMeterDevice.get_voltage   rk   rd   c                 :    | j                  | j                        S r_   )r]   DPS_CURRENT_Ara   s     r\   get_current_az!WiFiDualMeterDevice.get_current_a   ro   rd   c                 :    | j                  | j                        S r_   )r]   DPS_CURRENT_Bra   s     r\   get_current_bz!WiFiDualMeterDevice.get_current_b   ro   rd   c                 :    | j                  | j                        S r_   )r]   DPS_TOTAL_POWERra   s     r\   get_total_powerz#WiFiDualMeterDevice.get_total_power       ~~t';';~<<rd   c                 :    | j                  | j                        S r_   )r]   DPS_VOLTAGE_CALIBRATIONra   s     r\   get_voltage_calibrationz+WiFiDualMeterDevice.get_voltage_calibration       ~~t'C'C~DDrd   c                 :    | j                  | j                        S r_   )r]   DPS_CURRENT_CALIBRATION_Ara   s     r\   get_current_calibration_az-WiFiDualMeterDevice.get_current_calibration_a       ~~t'E'E~FFrd   c                 :    | j                  | j                        S r_   )r]   DPS_POWER_CALIBRATION_Ara   s     r\   get_power_calibration_az+WiFiDualMeterDevice.get_power_calibration_a   r   rd   c                 :    | j                  | j                        S r_   )r]   DPS_ENERGY_CALIBRATION_Ara   s     r\   get_energy_calibration_az,WiFiDualMeterDevice.get_energy_calibration_a   rc   rd   c                 :    | j                  | j                        S r_   )r]   DPS_POWER_FACTOR_Bra   s     r\   get_power_factor_bz&WiFiDualMeterDevice.get_power_factor_b   r   rd   c                 :    | j                  | j                        S r_   )r]   DPS_CURRENT_CALIBRATION_Bra   s     r\   get_current_calibration_bz-WiFiDualMeterDevice.get_current_calibration_b   r   rd   c                 :    | j                  | j                        S r_   )r]   DPS_POWER_CALIBRATION_Bra   s     r\   get_power_calibration_bz+WiFiDualMeterDevice.get_power_calibration_b   r   rd   c                 :    | j                  | j                        S r_   )r]   DPS_ENERGY_CALIBRATION_Bra   s     r\   get_energy_calibration_bz,WiFiDualMeterDevice.get_energy_calibration_b   rc   rd   c                 :    | j                  | j                        S r_   )r]    DPS_ENERGY_CALIBRATION_REVERSE_Ara   s     r\    get_energy_reverse_calibration_az4WiFiDualMeterDevice.get_energy_reverse_calibration_a       ~~t'L'L~MMrd   c                 :    | j                  | j                        S r_   )r]    DPS_ENERGY_CALIBRATION_REVERSE_Bra   s     r\    get_energy_reverse_calibration_bz4WiFiDualMeterDevice.get_energy_reverse_calibration_b   r   rd   c                 :    | j                  | j                        S r_   )r]   DPS_REPORT_RATEra   s     r\   get_report_ratez#WiFiDualMeterDevice.get_report_rate   r   rd   c                 p   || j                         }t        | j                  |             t        | j                  |             t        | j	                  |             t        | j                  |             t        | j                  |             t        | j                  |             t        | j                  |             t        | j                  |             t        | j                  |             t        | j                  |             t        | j                  |             t        | j                  |             t        | j                  |             t        | j                  |             t        | j!                  |             t        | j#                  |             t        | j%                  |             t        | j'                  |             t        | j)                  |             t        | j+                  |             t        | j-                  |             t        | j/                  |             t        | j1                  |             t        | j3                  |             t        | j5                  |             t        | j7                  |             y N)rR   printrb   rg   rj   rn   rr   ru   rx   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   s     r\   	print_allzWiFiDualMeterDevice.print_all   s   ++-Kd++K89d++K89d{+,d  -.d  -.d{+,d''45d''45d''45d''45d%%k23dmmK()d{+,d  -.d  -.d"";/0d**;78d,,[9:d**;78d++K89d%%k23d**;78d++K89d33K@Ad33K@Ad"";/0rd   r   )=__name__
__module____qualname__r`   rf   ri   rm   rq   rt   rw   r{   r~   r   r   r   r   r   r   r   r   r   r   r   r   DPS_FREQUENCY_CALIBRATIONr   r   r   r   r   r   rS   r]   rb   rg   rj   rn   rr   ru   rx   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    rd   r\   r   r   6   s   *-*-(-K(-M(-M(-K(-(-(-(-(-(-H(-K(-M(-M(-O(-(-(-(-(-(-(-(-(-(-$(-$(-O 4JTYdg*i 4JTYdg*i 	IsUW*Y 	NYXaLb*d	
 	OiYbMc*e 	IsUW*Y 	4FPU`c*e 	4FPU`c*e 	4FPU`c*e 	4FPU`c*e 	4Ds*T 	ND[^*` 	L#XZ*\ 	K*N 	K*N  	M3Y[*]!" 	 4ITX*Z#$ 	"4KVZ*\4ITX*Z 4JUY*[4Ds*T!4KVZ*\4ITX*Z 4JUY*[(4R]a*c(4R]a*cM3*P7H<3$FF9;;9BBBB@69;;=EGEF@GEFNN=1rd   r   N)__doc__corer   r   r   rd   r\   <module>r      s   /b |1& |1rd   