
    ~gi"                        S SK r S SKrS SKrS SKrS SKJr  S SKJrJrJ	r	  \" \R                  R                  SS5      5      r\" \R                  R                  SS5      5      r\" \R                  R                  SS	5      5      r\" \R                  R                  S
S5      5      r\" \R                  R                  SS5      5      r\" \R                  R                  SS5      5      rSS/ SQS./SSSSS/ SQS.SSSSS/ SQS.SSS S!S"/ SQS.S#SS$S%S&/ SQS.S'S(S)S*S+S,/S.S-S(S.S/S0S,/S./S1.r\" \5      rS2\4S3 jrS2\4S4 jrS5\S6\4S7 jrS8 rSUS9\S:\S;\4S< jjrS9\4S= jrS9\S>\4S? jrS@\4SA jr SB r!\R                  SC5      SD 5       r"\R                  SE5      SF 5       r#\R                  SG5      SH 5       r$\R                  SI5      SJ 5       r%\RM                  SG5      SK 5       r'\RM                  SE5      SL 5       r(\R                  SM5      SN 5       r)\RM                  SO5      SP 5       r*\SQ:X  a  \RW                  SRSSST9  gg)V    N)Path)FlaskjsonifyrequestWIFI_PRESENCE_ALIASESz9/home/sebas/runtime/agent-logs/wifi-presence/aliases.jsonWIFI_PRESENCE_ALERT_PREFSz=/home/sebas/runtime/agent-logs/wifi-presence/alert-prefs.jsonWIFI_PRESENCE_SUMMARYz"/var/www/wifi-tracker/summary.jsonWIFI_PRESENCE_LOGz;/home/sebas/runtime/agent-logs/wifi-presence/activity.jsonlWIFI_PRESENCE_STATEz7/home/sebas/runtime/agent-logs/wifi-presence/state.jsonDOMOTICS_CONFIGz4/home/sebas/runtime/agent-logs/domotics/devices.jsonzall-wizzTodas las luces WiZ)wiz-1wiz-2wiz-3wiz-4)idname
device_idsr   wizzLuz WiZz192.168.1.8zcc:40:85:0a:cb:56)power
brightnesscolortemperature)r   typer   ipmaccapabilitiesr   z	Luz WiZ 2z192.168.1.9zcc:40:85:0b:e1:5er   z	Luz WiZ 3z192.168.1.76z98:77:d5:11:c1:car   z	Luz WiZ 4z192.168.1.77z98:77:d5:11:b2:e0ztuya-plug-1tuyazEnchufe smart - Luces balconz192.168.1.48z38:2c:e5:4c:99:b7discovered_onlyz	tuya-ir-1zSmart infrared remotez192.168.1.43zc4:82:e1:b4:d7:ca)groupsdevicespathc                 p     [         R                  " U R                  5       5      $ ! [         a    Us $ f = fN)jsonloads	read_text	Exception)r!   defaults     -/home/sebas/pi-config/bin/wifi-tracker-api.py	load_jsonr*   !   s1    zz$..*++ s   #& 55c                     U R                   R                  SSS9  U R                  S5      nUR                  [        R
                  " USSS9S-   5        UR                  U 5        g )NT)parentsexist_okz.tmp   )indent	sort_keys
)parentmkdirwith_suffix
write_textr$   dumpsreplace)r!   datatmps      r)   write_json_atomicr:   (   sS    KKdT2


6
"CNN4::d1=DEKK    r   returnc                 B    [        [        R                  " SU 5      5      $ )Nz[0-9a-f]{2}(:[0-9a-f]{2}){5})boolre	fullmatch)r   s    r)   	valid_macrA   /   s    <cBCCr;   c                      [        [        [        5      n [        R                  5       (       d  [	        [        U 5        U R                  S/ 5        U R                  S/ 5        U $ )Nr    r   )r*   DOMOTICS_CONFIG_PATHDEFAULT_DOMOTICS_CONFIGexistsr:   
setdefault)r8   s    r)   load_domotics_configrG   3   sK    )+BCD&&((.5OOIr"OOHb!Kr;   r   payloadtimeoutc                    [         R                   " [         R                  [         R                  5      nUR                  U5         UR	                  [
        R                  " U5      R                  5       U S45        UR                  S5      u  pE[
        R                  " UR                  SS95      UR                  5         $ ! UR                  5         f = f)Ni  i  r7   )errors)socketAF_INET
SOCK_DGRAM
settimeoutsendtor$   r6   encoderecvfromr%   decodeclose)r   rH   rI   sockr8   _addrs         r)   wiz_callrW   <   s    ==):):;DOOGDJJw'..02u+>mmE*zz$++Y+78



s   A+C Cc                      [        U S0 S.5      $ )NgetPilotmethodparamsrW   )r   s    r)   wiz_get_stater^   G   s    B:<==r;   r\   c                      [        U SUS.5      $ )NsetPilotrZ   r]   )r   r\   s     r)   wiz_set_statera   K   s    B:@AAr;   r8   c           
         0 nSU ;   a  [        U S   5      US'   SU ;   a%  [        S[        S[        U S   5      5      5      US'   SU ;   a%  [        S[        S[        U S   5      5      5      US'   SU ;   a{  S	U ;   au  S
U ;   ao  [        S[        S[        U S   5      5      5      US'   [        S[        S[        U S	   5      5      5      US	'   [        S[        S[        U S
   5      5      5      US
'   U$ )Nstatedimming
   d   tempi  id  rgbr      )r>   maxminint)r8   r\   s     r)   normalize_wiz_paramsro   O   s    F$tG}-wDCSi-A$BCy~T3tSf->#?@v
d{sd{sd{!Sc$s)n56s!Sc$s)n56s!Sc$s)n56sMr;   c                    U R                  S5      =(       d    / nU Hu  nUR                  S5      =(       d    SR                  5       nUR                  U5      nXSS'   U=(       d)    UR                  S5      =(       d    UR                  S5      US'   Mw     U R                  S5      =(       d    /  H?  nUR                  S5      =(       d    SR                  5       nUR                  U5      US'   MA     U R                  S0 5      n[        UR	                  5        VV	s/ s H  u  pU	(       d  M  UPM     sn	n5      US	'   U $ s  sn	nf )
Nr    r    aliashostnamedisplay_namerecent_eventstotalsaliased_devices)getlowerrF   lenitems)
summaryaliasesr    devr   rr   evrv   kvs
             r)   apply_aliases_to_summaryr   ^   s   kk)$*Gwwu~#**,C G#Lswwz':LcggenN	 
 kk/*0b0vve}"))+kk#&7 1 "-F #7==?$H?41aQ?$H IFN %Is   E
.E
z/api/summaryc                  4    [        [        [        0 5      5      $ r#   )r   r*   SUMMARY_PATH r;   r)   r|   r|   m       9\2.//r;   z/api/aliasesc                  4    [        [        [        0 5      5      $ r#   )r   r*   ALIASES_PATHr   r;   r)   aliases_getr   r   r   r;   z/api/alert-prefsc                  :    [        [        [        S0 S.5      5      $ )NTnew_device_alertsr    )r   r*   ALERT_PREFS_PATHr   r;   r)   alert_prefs_getr   w   s    9-TVX/YZ[[r;   z/api/healthc            
         [        [        0 5      n [        S[        R                  5       [        R                  5       [
        R                  5       U R                  S5      U R                  S5      =(       d    0 R                  S5      S.5      $ )NT
updated_atrv   devices_now)oksummary_existsstate_exists
log_existssummary_updated_atr   )r*   r   r   rE   
STATE_PATHLOG_PATHrx   )r|   s    r)   
health_getr   |   sm    b)G&--/"))+oo'%kk,7H-388G  r;   c                     [         R                  " SSS9=(       d    0 n [        [        S0 S.5      nSU ;   a  [	        U S   5      US'   [        U R                  SS5      5      R                  5       R                  5       nU(       a^  [        U5      (       d  [        SSS	.5      S
4$ [	        U R                  SS5      5      UR                  S0 5      R                  U0 5      S'   [        [        U5        [        SUS.5      $ )NTFforcesilentr   r   r   rq   invalid macr   error  alerts_enabledr    )r   prefs)r   get_jsonr*   r   r>   strrx   stripry   rA   r   rF   r:   )r8   r   r   s      r)   alert_prefs_postr      s    $u5;D&dr(RSEd"%)$/B*C%D!"
dhhub!
"
(
(
*
0
0
2C
~~%-@A3FFPTUYU]U]^nptUuPvB'223;<LM&.$/00r;   c                  T   [         R                  " SSS9=(       d    0 n [        U R                  SS5      5      R	                  5       R                  5       n[        U R                  SS5      5      R	                  5       n[        U5      (       d  [        SSS.5      S	4$ [        [        0 5      nU(       a  X#U'   OUR                  US 5        [        [        U5        [        [        0 5      nU(       a  [        [        [        XC5      5        [        SXR                  U5      S
.5      $ )NTFr   r   rq   rr   r   r   r   )r   r   rr   )r   r   r   rx   r   ry   rA   r   r*   r   popr:   r   r   )r8   r   rr   r}   r|   s        r)   aliases_postr      s    $u5;D
dhhub!
"
(
(
*
0
0
2C"%&,,.ES>>em<=sBBb)GClG,b)G,(@(RS$s[[5EFGGr;   z/api/domotics/devicesc                     [        5       n / nU R                  S/ 5       Hk  n[        U5      nUR                  S5      S:X  a2   [        US   5      nSUS'   UR                  S5      =(       d    0 US'   OS US'   UR                  U5        Mm     [        XR                  S/ 5      S.5      $ ! [         a  nS	US'   [        U5      US
'    S nANTS nAff = f)Nr    r   r   r   TonlineresultpilotFr   r   )r    r   )rG   rx   dictr^   r'   r   appendr   )configr    r~   itemr   excs         r)   domotics_devices_getr      s    !#FGzz)R(Cy776?e#)%c$i0!%X %		( 3 9rW
 "DNt ) w**Xr2JKLL  )!&X #CW)s   0B++
C5CCz/api/domotics/wiz/controlc                  >  ^ [         R                  " SSS9=(       d    0 n [        5       n[        U 5      nU(       d  [	        SSS.5      S4$ U R                  S5      =(       d    / nU R                  S5      m/ nT(       aW  [        U4S	 jUR                  S
/ 5       5       S 5      nU(       d  [	        SSS.5      S4$ UR                  S5      =(       d    / n[        U5      nUR                  S/ 5       HI  nUR                  S5      S:w  a  M  U(       a  UR                  S5      U;  a  M8  UR                  U5        MK     U(       d  [	        SSS.5      S4$ / nU H`  n [        US   U5      n	[        US   5      n
UR                  US   US   US   SU	R                  S5      U
R                  S5      S.5        Mb     [	        [        S U 5       5      X(S.5      $ ! [         a4  nUR                  US   US   US   S[        U5      S.5         S nAM  S nAff = f)NTFr   zno supported paramsr   r   r   group_idc              3   T   >#    U  H  oR                  S 5      T:X  d  M  Uv   M     g7f)r   Nrx   ).0ri   requested_groups     r)   	<genexpr>,domotics_wiz_control_post.<locals>.<genexpr>   s"     \!9AUU4[O=[aa!9s   (	(r   zunknown groupi  r    r   r   r   zno matching wiz devicesr   r   r   )r   r   r   r   r   r   )r   r   r   r   r   c              3   B   #    U  H  oR                  S 5      v   M     g7f)r   Nr   )r   rh   s     r)   r   r      s     ;7aeeDkk7s   )r   r\   results)r   r   rG   ro   r   rx   nextsetr   ra   r^   r'   r   all)r8   r   r\   requested_idsselectedgrouprequested_setr~   r   resverifyr   r   s               @r)   domotics_wiz_control_postr      s   $u5;D!#F!$'Fe.CDEsJJHH\*0bMhhz*OH\Hb!9\^bc%/BCSHH		,/52&Mzz)R(776?e#SWWT]-? ) e.GHI3NNG	tD	62C"3t9-FNN#d)S[D	Y]ilipipqyiz  FL  FP  FP  QY  FZ  [  \	  #;7;;vbcc  	tNN#d)S[D	Y^ilmpiqrss	ts    AG
H()HH__main__z	127.0.0.1iI  )hostport)g       @),r$   osr?   rL   pathlibr   flaskr   r   r   environrx   r   r   r   r   r   rC   rD   __name__appr*   r:   r   r>   rA   rG   r   floatrW   r^   ra   ro   r   r|   r   r   r   postr   r   r   r   runr   r;   r)   <module>r      s5    	 	   ) )BJJNN#:<wxy

'B  ED  E  F BJJNN#:<`ab

24qrs"**..!68qrs
BJJNN+<>tuv  "7Gkl yVi  |k  	l{-Xk  ~m  	n{.Yl  n  	o{.Yl  n  	of6T\j  tG  Zk  Yl  	mF4KSaj}  Qb  Pc  	d	  HoD D D3 D4 D t e >c >Bc B4 Bt  0 0 0 0 	\ \ 	 	 
1 1 .H H$ 	 !M "M& 
%&d 'dD zGG5G) r;   