Ë
    :F´jY@  ã            	       ó¶  — d dl Z d dlZd dlZd dlZd dlmZmZmZmZm	Z	  ee
«      Zej                  d„ «       Z e j                  dd«      j                  d«      a e j                  dd«      a e e j                  d	d
«      «      ad„ Zd„ Zd„ Zd„ Zej1                  d«      d„ «       Zej1                  d«      d„ «       Zej1                  d«      d„ «       ZdddddddddœZej;                  «       D � �ci c]  \  } }|| “Œ
 c}} Zd„ Zej1                  d«      d„ «       Z ej1                  d «      d!„ «       Z!ej1                  d"d#g¬$«      d%„ «       Z"ej1                  d&d#g¬$«      d'„ «       Z#ej1                  d(d#g¬$«      d)„ «       Z$ej1                  d*d+d#g¬$«      d,„ «       Z%e
d-k(  r. e e j                  d.d/«      «      Z&ejO                  d0e&d1¬2«       yyc c}} w )3é    N)ÚFlaskÚrequestÚjsonifyÚrender_templateÚabortc                 óœ   — d| j                   d<   d| j                   d<   d| j                   d<   d| j                   d<   d| j                   d	<   | S )
NÚ*zAccess-Control-Allow-OriginzGET, POST, OPTIONS, PUT, DELETEzAccess-Control-Allow-MethodszAccess-Control-Allow-HeadersÚALLOWALLzX-Frame-Optionszframe-ancestors *zContent-Security-Policy)Úheaders)Úresponses    ú//var/www/html/ioplay-suite/ioplay-acs/server.pyÚadd_security_headersr   	   s\   € à69€H×ÑÐ2Ñ3Ø7X€H×ÑÐ3Ñ4Ø7:€H×ÑÐ3Ñ4Ø*4€H×ÑÐ&Ñ'Ø2E€H×ÑÐ.Ñ/Ø€Oó    ÚIOACS_SERVER_URLzhttp://15.235.32.113:5502ú/ÚIOACS_API_TOKENÚ6ioacs_1d969611748e4694da15804eb12c6049d1deca9d85943dfcÚIOACS_TIMEOUTÚ30c                  ó   — dt         › �dddœS )uC   Genera las cabeceras de autorizaciÃ³n Bearer para el servidor IoACSzBearer zapplication/json)ÚAuthorizationzContent-TypeÚAccept)r   © r   r   Úget_headersr      s   € ð #¤?Ð"3Ð4Ø*Ø$ñð r   c                 ó²   — 	 t        | «      }|dz  }|dz  dz  }|dz  dz  }|dkD  r|› d|› d|› d�S |dkD  r|› d|› d�S |› d�S # t        t        f$ r Y yw xY w)	u>   Convierte segundos en formato amigable (dÃ­as, horas, minutos)i€Q i  é<   r   zd zh ÚmzN/D)ÚintÚ
ValueErrorÚ	TypeError)ÚsecondsÚsecÚdaysÚhoursÚminutess        r   Úformat_uptimer&      s’   € ðÜ�'‹lˆØ�e‰|ˆØ�u‘ Ñ%ˆØ˜‘: "Ñ$ˆØ�!Š8Ø�V˜2˜e˜W B w i¨qÐ1Ð1Ø�1Š9Ø�W˜B˜w˜i qÐ)Ð)Ø�˜!ˆ}ÐøÜœ	Ð"ò Ùðús   ‚/A ²A ¿A ÁAÁAc                 óÞ   — 	 t        t        | «      j                  dd«      j                  «       «      }|dk\  rddd|dœS |dk\  rd	d
d|dœS ddd|dœS # t        t
        f$ r
 dddddœcY S w xY w)u=   EvalÃºa la calidad del enlace Ã³ptico en base al valor en dBmÚdBmÚ g      8ÀÚoptimalÚ	Excelentez#10b981)ÚlevelÚlabelÚcolorÚvalg      ;ÀÚwarningÚ	Aceptablez#f59e0bÚcriticalu   CrÃ­tica / DÃ©bilz#ef4444ÚunknownÚNormalz#60a5faN)ÚfloatÚstrÚreplaceÚstripr   r    )Úrx_power_strr/   s     r   Úevaluate_signal_qualityr:   .   s“   € ð	XÜ”C˜Ó%×-Ñ-¨e°RÓ8×>Ñ>Ó@ÓAˆØ�%Š<Ø&°ÀyÐY\Ñ]Ð]Ø�EŠ\Ø&°ÀyÐY\Ñ]Ð]à'Ð2EÐPYÐbeÑfÐføÜœ	Ð"ò XØ"¨XÀ	ÐRVÑWÒWðXús   ‚=A Á A ÁA ÁA,Á+A,c                 óž  — t         › d�}	 t        j                  |t        «       d| it        ¬«      }|j
                  dk(  rC|j                  «       }|j                  d«      r"|j                  d«      r|j                  d«      S d| v sd| v r¤	 | j                  d	d
«      j                  dd
«      }|| k7  r{t        j                  |› d|› �t        «       t        ¬«      }|j
                  dk(  rC|j                  «       }|j                  d«      r"|j                  d«      r|j                  d«      S yy# t        $ r Y Œ¸w xY w# t        $ r Y yw xY w)zY
    Consulta get-device-detail.php manejando codificaciones especiales de device_id
    z/api/get-device-detail.phpÚ	device_id©r   ÚparamsÚtimeoutéÈ   ÚsuccessÚdeviceú%ú-z%2Dz%252Dz%2dz?device_id=©r   r?   N)	r   ÚrequestsÚgetr   r   Ústatus_codeÚjsonÚ	Exceptionr7   )r<   ÚurlÚrespÚdataÚ
encoded_ids        r   Úfetch_device_detail_from_acsrO   <   s=  € ô ÐÐ8Ð
9€CðÜ�|‰|˜C¬«ÀÈYÐ?WÔanÔoˆØ×Ñ˜sÒ"Ø—9‘9“;ˆDØ�x‰x˜	Ô" t§x¡x°Ô'9Ø—x‘x Ó)Ð)ð
 ˆiÑ˜3 )Ñ+ð
	à"×*Ñ*¨5°'Ó:×BÑBÀ5È'ÓRˆJØ˜YÒ&Ü—|‘| s e¨;°z°lÐ$CÌ[Ë]ÔdqÔr�Ø×#Ñ# sÒ*ØŸ9™9›;�DØ—x‘x 	Ô*¨t¯x©x¸Ô/AØ#Ÿx™x¨Ó1Ð1ñ øô# ò Ùðûô ò 	Øàð	ús%   ‹A8D1 ÂB!E  Ä1	D=Ä<D=Å 	EÅEc                  óL  — t         j                  j                  d«      xs# t         j                  j                  d«      xs d} t         j                  j                  d«      xs# t         j                  j                  d«      xs d}t         j                  j                  d«      xs# t         j                  j                  d«      xs d}t         j                  j                  d«      xs# t         j                  j                  d	«      xs d}t        d
| |||t        ¬«      S )u;   PÃ¡gina principal del visor IoPlay-ACS (embebida o directa)r<   Úidr)   ÚserialÚonu_idÚowner_idÚcustomer_idÚnameÚsubscriber_namezviewer.html)r<   rR   rT   rW   Úioacs_server)r   ÚargsrG   r   r   )r<   rR   rT   rW   s       r   ÚindexrZ   `   sÚ   € ô —‘× Ñ  Ó-ÒM´·±×1AÑ1AÀ$Ó1GÒMÈ2€IÜ�\‰\×Ñ˜hÓ'ÒK¬7¯<©<×+;Ñ+;¸HÓ+EÒKÈ€FÜ�|‰|×Ñ 
Ó+ÒT¬w¯|©|×/?Ñ/?ÀÓ/NÒTÐRT€HÜ—l‘l×&Ñ& vÓ.Ò[´'·,±,×2BÑ2BÐCTÓ2UÒ[ÐY[€OäØØØØØ'Ü%ôð r   z/api/statusc            
      ó`  — t        j                   «       } 	 t        › d�}t        j                  |t	        «       d¬«      }t        t        j                   «       | z
  dz  d«      }|j                  dk(  r5|j                  «       }t        dd|t        |j                  d	i «      d
œ«      S t        dd|j                  |t        d|j                  › �dœ«      dfS # t        $ rN}t        t        j                   «       | z
  dz  d«      }t        dd|t        t        |«      dœ«      dfcY d}~S d}~ww xY w)u>   Verifica la salud de la conexiÃ³n con el servidor IoACS remotoz/api/dashboard-stats.phpé
   rE   iè  é   r@   rA   TÚstats)ÚstatusÚ	connectedÚ
latency_msÚ
server_urlr^   ÚerrorFu%   Servidor respondiÃ³ con cÃ³digo HTTP )r_   r`   rH   ra   rb   Úmessageiö  )r_   r`   ra   rb   rd   éô  N)Útimer   rF   rG   r   ÚroundrH   rI   r   rJ   r6   )Ústart_trK   rL   ÚelapsedrM   Úes         r   Ú
api_statusrk   v   s8  € ô �i‰i‹k€GðÜ!Ð"Ð":Ð;ˆÜ�|‰|˜C¬«ÀÔCˆÜœŸ™› wÑ.°$Ñ6¸Ó:ˆà×Ñ˜sÒ"Ø—9‘9“;ˆDÜØ#Ø!Ø%Ü.ØŸ™ '¨2Ó.ñó ð ô Ø!Ø"Ø#×/Ñ/Ø%Ü.ØBÀ4×CSÑCSÐBTÐUñó ð ðð øô ò ÜœŸ™› wÑ.°$Ñ6¸Ó:ˆÜØØØ!Ü*Ü˜1“vñ
ó ð ðõ 	ûðús%   –BC Â'.C Ã	D-ÃAD(Ä"D-Ä(D-z/api/devicesc                  óà  — t         j                  j                  ddt        ¬«      } t         j                  j                  ddt        ¬«      }t         j                  j                  dd«      }	 t        › d�}| ||d	œ}t        j                  |t        «       |t        ¬
«      }t        |j                  «       «      |j                  fS # t        $ r}t        dd|› �dœ«      dfcY d}~S d}~ww xY w)u:   Lista dispositivos registrados en GenieACS con paginaciÃ³nÚlimité   )ÚtypeÚskipr   ÚparserÚfastú/api/get-devices.php)rm   rp   rq   r=   FzError conectando a IoACS: ©rA   rd   re   N)r   rY   rG   r   r   rF   r   r   r   rI   rH   rJ   )rm   rp   rq   rK   r>   rL   rj   s          r   Úapi_devicesru   œ   sÔ   € ô �L‰L×Ñ˜W b¬sÐÓ3€EÜ�<‰<×Ñ˜F A¬CÐÓ0€DÜ�\‰\×Ñ˜h¨Ó/€Fð]Ü!Ð"Ð"6Ð7ˆØ ¨$¸&ÑAˆÜ�|‰|˜C¬«¸vÌ}Ô]ˆÜ�t—y‘y“{Ó# T×%5Ñ%5Ð5Ð5øÜò ]Ü 5Ð7QÐRSÐQTÐ5UÑVÓWÐY\Ð\Õ\ûð]ús   Á.AC Ã	C-ÃC(Ã"C-Ã(C-Ú4f505449Ú48575443Ú43445443Ú5a544547Ú52544547Ú5a584943Ú414c434cÚ56534f4c)ÚoptiÚhwtcÚcdtcÚztegÚrtegÚzxicÚalclÚvsolc                 óL  — | j                  dd«      j                  dd«      j                  dd«      j                  «       }|h}t        j                  «       D ]Y  \  }}|j	                  |«      sŒ|t        |«      d }|j                  ||z   «       t        |«      dk\  sŒI|j                  |«       Œ[ t        j                  «       D ]Y  \  }}|j	                  |«      sŒ|t        |«      d }|j                  ||z   «       t        |«      dk\  sŒI|j                  |«       Œ[ |S )uQ   Genera variantes de bÃºsqueda para nÃºmeros de serie de ONUs (Hex, ASCII, sufijo)ú:r)   rD   ú Né   )r7   ÚlowerÚ
VENDOR_MAPÚitemsÚ
startswithÚlenÚaddÚHEX_VENDOR_MAP)ÚqÚcleanÚvariantsÚvendorÚhex_codeÚsuffixs         r   Úgenerate_serial_variantsr—   ¸   s  € à�I‰I�c˜2Ó×&Ñ& s¨BÓ/×7Ñ7¸¸RÓ@×FÑFÓH€EØˆw€Hô '×,Ñ,Ó.ò %Ñˆ�Ø×Ñ˜FÕ#Øœ3˜v›;˜<Ð(ˆFØ�L‰L˜ FÑ*Ô+Ü�6‹{˜aÓØ—‘˜VÕ$ð%ô +×0Ñ0Ó2ò %Ñˆ�&Ø×Ñ˜HÕ%Øœ3˜x›=˜>Ð*ˆFØ�L‰L˜ &™Ô)Ü�6‹{˜aÓØ—‘˜VÕ$ð%ð €Or   z/api/device/lookupc                  ó”  — t         j                  j                  d«      xsD t         j                  j                  d«      xs# t         j                  j                  d«      xs dj                  «       } | st	        dddœ«      dfS t        | «      }	 t        › d	�}t        j                  |t        «       d
dit        ¬«      }|j                  dk7  r%t	        |j                  «       «      |j                  fS |j                  «       }|j                  dg «      }d}|D ]ñ  }t        |j                  dd«      «      j                  «       }t        |j                  dd«      «      j                  «       }	t        |j                  dd«      «      j                  dd«      j                  dd«      j                  «       }
t        |j                  dd«      «      j                  «       }|D ]"  }||v s||	v s||
v s||v s||v s	|	|v s||v sŒ |} n |sŒñ n |rz|j                  d«      }t        |«      }|r|j!                  |«       |j                  d«      }t#        |«      |d<   t%        |j                  dd«      «      |d<   t	        d|dœ«      S t	        dd| › d�| dœ«      d fS # t&        $ r}t	        dd!|› �dœ«      d"fcY d}~S d}~ww xY w)#uL   Busca un equipo por Serial Number o DirecciÃ³n MAC con soporte multi-formator‘   rR   Úmacr)   Fu#   ParÃ¡metro 'q' o 'serial' requeridort   é�  rs   rm   éd   r=   r@   ÚdevicesNÚserial_numberÚserial_number_2Úmac_addressr‡   rD   r<   Úrx_powerÚsignal_evalÚuptimer   Úuptime_formattedT©rA   rB   u   El mÃ³dem con serial 'z>' no se encuentra registrado en el servidor TR-069 (GenieACS).)rA   rd   Úsearched_serialé”  u   Error en bÃºsqueda: re   )r   rY   rG   r8   r   r—   r   rF   r   r   rH   rI   r6   rŠ   r7   rO   Úupdater:   r&   rJ   )r‘   r“   rK   rL   rM   rœ   ÚmatchedÚdÚsnÚsn2r™   Údev_idÚvarÚreal_idÚdetailÚrxrj   s                    r   Úapi_device_lookupr±   Ð   s¯  € ô 
�‰×	Ñ	˜#Ó	Ò	]¤'§,¡,×"2Ñ"2°8Ó"<Ò	]ÄÇÁ×@PÑ@PÐQVÓ@WÒ	]Ð[]×dÑdÓf€AÙÜ 5Ð5ZÑ[Ó\Ð^aÐaÐaä'¨Ó*€Hð,WÜ!Ð"Ð"6Ð7ˆÜ�|‰|˜C¬«ÀÈ¸~ÔWdÔeˆØ×Ñ˜sÒ"Ü˜4Ÿ9™9›;Ó'¨×)9Ñ)9Ð9Ð9à�y‰y‹{ˆØ—(‘(˜9 bÓ)ˆØˆàò 	ˆAÜ�Q—U‘U˜?¨BÓ/Ó0×6Ñ6Ó8ˆBÜ�a—e‘eÐ-¨rÓ2Ó3×9Ñ9Ó;ˆCÜ�a—e‘e˜M¨2Ó.Ó/×7Ñ7¸¸RÓ@×HÑHÈÈbÓQ×WÑWÓYˆCÜ˜Ÿ™˜{¨BÓ/Ó0×6Ñ6Ó8ˆFàò �Ø˜2‘I ¨¡¨s°c©z¸SÀF¹]Ø˜#‘I ¨¡¨v¸ª}Ø�GÙð	ò
 Ùð	ñ à—k‘k +Ó.ˆGÜ1°'Ó:ˆFÙØ—‘˜vÔ&à—‘˜ZÓ(ˆBÜ%<¸RÓ%@ˆG�MÑ"Ü*7¸¿¹ÀHÈaÓ8PÓ*QˆGÐ&Ñ'ä t°wÑ?Ó@Ð@äØ Ø3°A°3Ð6tÐuØ#$ñó ð ð	ð øô ò WÜ 5Ð7KÈAÈ3Ð5OÑPÓQÐSVÐVÕVûðWús9   ÂA#J! Ã6DJ! ÈJ! ÈA>J! ÊJ! Ê!	KÊ*KÊ<KËKz/api/device/<path:device_id>c                 ót  — 	 t        | «      }|�s t        j                  t        › d�t	        «       ddit
        ¬«      }|j                  dk(  �rb|j                  «       j                  dg «      }| j                  dd«      j                  d	d«      j                  «       }|D �]  }t        |j                  d
d«      «      j                  «       }t        |j                  dd«      «      j                  «       }t        |j                  dd«      «      j                  dd«      j                  d	d«      j                  «       }t        |j                  dd«      «      j                  «       }	||v s||v s||v s||	v s| j                  «       |	v sŒë|j                  d«      }
t        |
«      }|r|n|} n |st        dd| › d�dœ«      dfS |j                  d«      }t        |«      |d<   t        |j                  dd«      «      |d<   t        d|dœ«      S # t        $ r}t        dd|› �dœ«      dfcY d}~S d}~ww xY w)u8   Obtiene el detalle completo y telemetrÃ­a de una ONU/CPErs   rm   r›   r=   r@   rœ   r‡   r)   rD   r�   rž   rŸ   r<   FzDispositivo 'z' no encontradort   r¦   r    r¡   r¢   r   r£   Tr¤   u   Error obteniendo telemetrÃ­a: re   N)rO   rF   rG   r   r   r   rH   rI   r7   rŠ   r6   r   r:   r&   rJ   )r<   rB   Ú	devs_resprœ   Úclean_qr©   rª   r«   r™   r¬   r®   r¯   r°   rj   s                 r   Úapi_device_detailrµ     s7  € ð#aä-¨iÓ8ˆò Ü Ÿ™Ô(8Ð'9Ð9MÐ%NÔXcÓXeÐovÐx{Ðn|ô  GTô  UˆIØ×$Ñ$¨Ó+Ø#Ÿ.™.Ó*×.Ñ.¨y¸"Ó=�Ø#×+Ñ+¨C°Ó4×<Ñ<¸SÀ"ÓE×KÑKÓM�Ø ó 
�AÜ˜QŸU™U ?°BÓ7Ó8×>Ñ>Ó@�BÜ˜aŸe™eÐ$5°rÓ:Ó;×AÑAÓC�CÜ˜aŸe™e M°2Ó6Ó7×?Ñ?ÀÀRÓH×PÑPÐQTÐVXÓY×_Ñ_Óa�CÜ  §¡ {°BÓ!7Ó8×>Ñ>Ó@�Fà "‘}¨°3©¸'ÀS¹.ÈGÐW]ÑL]Ðaj×apÑapÓarÐv|Òa|Ø"#§%¡%¨Ó"4˜Ü!=¸gÓ!F˜Ù+1¡°q˜Ùð
ñ Ü u¸=ÈÈÐSbÐ9cÑdÓeÐgjÐjÐjð �Z‰Z˜
Ó#ˆÜ 7¸Ó ;ˆˆ}ÑÜ%2°6·:±:¸hÈÓ3JÓ%KˆÐ!Ñ"äØØñ
ó ð 	øô ò aÜ 5Ð7UÐVWÐUXÐ5YÑZÓ[Ð]`Ð`Õ`ûðaús+   ‚FH Æ:H ÇA
H È	H7ÈH2È,H7È2H7z!/api/device/<path:device_id>/wifiÚPOST)Úmethodsc           	      óŒ  — t        j                  d¬«      xs t         j                  xs i }|j                  dd«      j	                  «       }|j                  dd«      j	                  «       }t        |j                  dd«      «      j	                  «       }|j                  dd	«      j	                  «       }|st        d
ddœ«      dfS |dk7  r,t        |«      dk  st        |«      dkD  rt        d
ddœ«      dfS | ||||dœ}	 t        › d�}t        j                  |t        «       |t        ¬«      }|j                  r|j                  «       ni }	|	j                  dd«      }
d|
v rd}
t        |	j                  dd«      |
| |||dk(  rdnddœdœ«      |j                  fS # t         $ r}t        d
d|› �dœ«      dfcY d }~S d }~ww xY w)!u?   Actualiza SSID y contraseÃ±a de WiFi para banda 2.4 GHz o 5 GHzT©ÚsilentÚ	wifi_ssidr)   Úwifi_passwordÚ
wlan_indexÚ1Úsecurity_modeÚWPA2PSKFu5   El nombre de la red WiFi (SSID) no puede estar vacÃ­ort   rš   ÚNoneé   é   u9   La contraseÃ±a de WiFi debe tener entre 8 y 12 caracteres)r<   r½   r»   r¼   r¿   z/api/update-wifi-config.php©r   rI   r?   rd   u(   ConfiguraciÃ³n de WiFi enviada al equipoz&Invalid virtual parameter return valueu@   La orden fue recibida por el router y se aplicarÃ¡ de inmediato.rA   z2.4 GHzz5 GHz)r<   r½   r»   Úband)rA   rd   rM   u%   Error aplicando configuraciÃ³n WiFi: re   N)r   Úget_jsonÚformrG   r8   r6   r   rŽ   r   rF   Úpostr   r   ÚcontentrI   rH   rJ   )r<   Úpayloadr»   r¼   r½   r¿   ÚbodyrK   rL   Úres_dataÚmsgrj   s               r   Úapi_update_wifirÎ   1  sÓ  € ô ×Ñ dÔ+ÒA¬w¯|©|ÒA¸r€Gà—‘˜K¨Ó,×2Ñ2Ó4€IØ—K‘K °Ó4×:Ñ:Ó<€MÜ�W—[‘[ ¨sÓ3Ó4×:Ñ:Ó<€JØ—K‘K °Ó;×AÑAÓC€MáÜ 5Ð5lÑmÓnÐpsÐsÐsà˜Ò¤C¨Ó$6¸Ò$:¼cÀ-Ó>PÐSUÒ>UÜ 5Ð5pÑqÓrÐtwÐwÐwð Ø ØØ&Ø&ñ€DðhÜ!Ð"Ð"=Ð>ˆÜ�}‰}˜S¬+«-¸dÌMÔZˆØ"&§,¢,�4—9‘9”;°Bˆð �l‰l˜9Ð&PÓQˆØ3°sÑ:ØTˆCäØ—|‘| I¨tÓ4Øà&Ø(Ø&Ø%/°3Ò%6™	¸Gñ	ñ	
ó 	ð ×Ñð	ð 		øô ò hÜ 5Ð7\Ð]^Ð\_Ð5`ÑaÓbÐdgÐgÕgûðhús   ÄBF Æ	GÆ&F>Æ8GÆ>Gz#/api/device/<path:device_id>/rebootc                 óŽ  — | ddœ}	 t         › d�}t        j                  |t        «       |t        ¬«      }|j
                  r|j                  «       ni }t        |j                  dd«      |j                  dd«      |j                  d	d
«      dœ«      |j                  fS # t        $ r}t        dd|› �dœ«      dfcY d}~S d}~ww xY w)u+   EnvÃ­a la orden de reinicio remoto a la ONUÚreboot)r<   Úactionz/api/device-action.phprÄ   rA   Trd   uW   Orden de reinicio enviada correctamente al router. EstarÃ¡ disponible en 1 a 2 minutos.Útask_statusÚapplied)rA   rd   rÒ   Fz"Error enviando orden de reinicio: rt   re   N)r   rF   rÈ   r   r   rÉ   rI   r   rG   rH   rJ   ©r<   rË   rK   rL   rÌ   rj   s         r   Úapi_reboot_devicerÕ   b  sÕ   € ð Øñ€Dð
eÜ!Ð"Ð"8Ð9ˆÜ�}‰}˜S¬+«-¸dÌMÔZˆØ"&§,¢,�4—9‘9”;°BˆäØ—|‘| I¨tÓ4Ø—|‘| Ið  0Ió  JØ#Ÿ<™<¨°yÓAñ
ó ð ×Ñð	ð 	øô
 ò eÜ 5Ð7YÐZ[ÐY\Ð5]Ñ^Ó_ÐadÐdÕdûðeús   ‡BB Â	CÂ'B?Â9CÂ?Cz#/api/device/<path:device_id>/summonc                 ó$  — d| i}	 t         › d�}t        j                  |t        «       |t        ¬«      }|j
                  r|j                  «       ni }t        |«      |j                  fS # t        $ r}t        dd|› �dœ«      dfcY d}~S d}~ww xY w)	z;Fuerza un Connection Request inmediato para refrescar datosr<   z/api/summon-device.phprÄ   Fu    Error forzando sincronizaciÃ³n: rt   re   N)
r   rF   rÈ   r   r   rÉ   rI   r   rH   rJ   rÔ   s         r   Úapi_summon_devicer×   x  s“   € ð ˜Ð#€DðcÜ!Ð"Ð"8Ð9ˆÜ�}‰}˜S¬+«-¸dÌMÔZˆØ"&§,¢,�4—9‘9”;°BˆÜ�xÓ  $×"2Ñ"2Ð2Ð2øÜò cÜ 5Ð7WÐXYÐWZÐ5[Ñ\Ó]Ð_bÐbÕbûðcús   †A"A) Á)	BÁ2B
ÂBÂ
Bz/api/configÚGETc                  óÄ  — t         j                  dk(  r}t        j                  d¬«      xs t         j                  xs i } d| v r| d   r| d   j	                  d«      ad| v r| d   r| d   j                  «       ad| v r| d   r	 t        | d   «      a	t        dt
        t        t        «      d	kD  rt        d
d dz   t        dd
 z   ndt        dœdœ«      S # t        $ r Y ŒMw xY w)uE   Consulta o actualiza en caliente la configuraciÃ³n del servidor IoACSr¶   Tr¹   rb   r   Ú	api_tokenr?   rA   é   Nr\   z...iúÿÿÿz***)rb   Útoken_maskedr?   )r_   Úconfig)r   ÚmethodrÆ   rÇ   Úrstripr   r8   r   r   r   r   r   rŽ   )rM   s    r   Ú
api_configrà   …  sø   € ô
 ‡~�~˜ÒÜ×Ñ tÔ,ÒB´·±ÒBÀˆØ˜4Ñ D¨Ò$6Ø# LÑ1×8Ñ8¸Ó=ÐØ˜$Ñ 4¨Ò#4Ø" ;Ñ/×5Ñ5Ó7ˆOØ˜Ñ  i¢ðÜ # D¨¡OÓ 4�ô Øä*ÜSVÔWfÓSgÐjlÒSlœO¨C¨RÐ0°5Ñ8¼?È2È3Ð;OÒOÐrwÜ$ñ
ñó ð øô ò Ùðús   ÂC Ã	CÃCÚ__main__ÚPORTi¦  z0.0.0.0F)ÚhostÚportÚdebug)(ÚosÚrerf   rF   Úflaskr   r   r   r   r   Ú__name__ÚappÚafter_requestr   Úgetenvrß   r   r   r   r   r   r&   r:   rO   ÚrouterZ   rk   ru   r‹   rŒ   r�   r—   r±   rµ   rÎ   rÕ   r×   rà   rä   Úrun)ÚkÚvs   00r   ú<module>rñ      sY  ðÛ 	Û 	Û Û ß AÕ AáˆHƒo€à×Ññó ðð �2—9‘9Ð/Ð1LÓM×TÑTÐUXÓYÐ Ø�"—)‘)Ð-Ð/gÓh€Ù�I�B—I‘I˜o¨tÓ4Ó5€òòòXòðH ‡�ˆ3ƒñó ðð* ‡�ˆ=Óñ"ó ð"ðJ ‡�ˆ>Óñ]ó ð]ð  ØØØØØØØñ	€
ð $.×#3Ñ#3Ó#5×6™4˜1˜a�!�Q‘$Ó6€òð0 ‡�ÐÓ ñ4Wó !ð4Wðn ‡�Ð)Ó*ñ%aó +ð%aðP ‡�Ð.¸¸€ÓAñ-hó Bð-hð` ‡�Ð0¸6¸(€ÓCñeó Dðeð* ‡�Ð0¸6¸(€ÓCñ	có Dð	cð ‡�ˆ= 5¨& /€Ó2ñó 3ðð4 ˆzÒÙˆyˆr�y‰y˜ Ó&Ó'€DØ‡G�G� ¨U€GÕ3ð ùóU 7s   Ã6G