
    i                         S r SSKrSSK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  SSKJr  SSK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   SSK!J"r"J#r#J$r$J%r%J&r&J'r'  \\\
\/r(\\/r)\RT                  " \+5      r,\RZ                  R]                  \&5       " S S\R^                  5      5       r0 " S S\Rb                  5      r2g)z+Config flow to configure esphome component.    N)gateway_chooser)HTTPXMPP)EASYCONTROL)IVT	IVT_MBLAN)NEFIT)DeviceExceptionEncryptionExceptionFirmwareExceptionUnknownDevice)config_entries)callback)CONF_ACCESS_TOKENCONF_ADDRESSCONF_PASSWORD)async_get_clientsession   )create_notification_firmware)
ACCESS_KEYACCESS_TOKENCONF_DEVICE_TYPECONF_PROTOCOLDOMAINUUIDc                       \ rS rSrSrSr\R                  rS r	SS jr
SS jrSS jrSS	 jrSS
 jr SS jrSS jr\\S\R&                  4S j5       5       rSrg)BoschFlowHandler'   zHandle a bosch config flow.r   c                 X    SU l         SU l        SU l        SU l        SU l        SU l        g)zInitialize Bosch flow.N)_choose_type_host_access_token	_password	_protocol_device_type)selfs    ./config/custom_components/bosch/config_flow.py__init__BoschFlowHandler.__init__.   s/     
!     Nc                 @   #    U R                  U5      I Sh  vN $  N7f)zHandle flow initiated by user.N)async_step_choose_typer&   
user_inputs     r'   async_step_user BoschFlowHandler.async_step_user7   s     00<<<<s   c                   #    0 nUb  U[            U l        U R                  [        :X  az  U R                  S[        R
                  " [        R                  " [        5      [        R                  " [        R                  [        R                  " [        5      5      05      US9$ U R                  [        [        [        4;   a#  U R                  [        [         05      I Sh  vN $ U R                  S[        R
                  " [        R                  " [         5      [        R                  " [        R                  [        R                  " ["        5      5      05      US9$  N~7f)z<Choose if setup is for IVT, IVT/MBLAN, NEFIT or EASYCONTROL.Nprotocolstep_iddata_schemaerrorschoose_type)r   r    r   async_show_formvolSchemaRequiredr   AllUpperIn	PROTOCOLSr	   r   r   async_step_protocolr   DEVICE_TYPEr&   r.   r6   s      r'   r,   'BoschFlowHandler.async_step_choose_type;   s    ! *+; <D  C'++& #

LL7 #		366)+<:! " , 
 
 ""uk9&EE!55}d6KLLL##!

LL!12CGG		366+#65  $ 

 
	
 Ms   CE"!E "A?E"c                 X  #    0 nUb  U[            U l        U R                  U R                  R                  5        S3[        R
                  " [        R                  " [        5      [        [        R                  " [        5      [        [        R                  " [        5      [        05      US9$ U R                  S[        R
                  " [        R                  " [         5      [        R                  " [        R                  [        R                  " [        5      5      05      US9$ 7f)N_configr3   r2   )r   r$   r8   lowerr9   r:   r;   r   strr   Optionalr   r<   r=   r>   r?   rB   s      r'   r@   $BoschFlowHandler.async_step_protocolZ   s     !'6DN''>>//12':JJ\2C%67]3S  ( 
 
 ##

LL/CFF9DU1V
  $ 
 	
s   D(D*c           	      B  #    Ub  U[            U l        U[           U l        UR	                  [
        5      U l        U R                  U R                  [        U R                  SS9U R                  U R                  U R                  U R                  S9I S h  vN $ g  N7f)NF
verify_ssldevice_typesessionsession_typehostaccess_tokenpassword)r   r!   r   r"   getr   r#   configure_gatewayr    r   hassr$   r-   s     r'   async_step_http_config'BoschFlowHandler.async_step_http_configs   s     !#L1DJ!+,=!>D'^^M:DN// --/		eL!^^ZZ!// 0   	 "s   BBBBc           	        #    Ub  U[            U l        U[           U l        UR	                  [
        5      U l        SU[            ;   aZ  U R                  U R                  [        U R                  SS9[        U R                  U R                  U R                  S9I S h  vN $ U R                  U R                  U R                  U R                  U R                  U R                  S9I S h  vN $ g  NR N7f)Nz	127.0.0.1FrK   rM   )rN   rP   rQ   rR   rS   )r   r!   r   r"   rT   r   r#   rU   r    r   rV   r   r$   r-   s     r'   async_step_xmpp_config'BoschFlowHandler.async_step_xmpp_config   s     !#L1DJ!+,=!>D'^^M:DNj66!33 $ 1 13DII%P!%!%!3!3!^^ 4    // --!^^ZZ!// 0    "
s%   BC5C1AC5+C3,C53C5c                 &  #     [        U5      nU" UUUUUS9n UR                  5       I S h  vN n	U	(       a)  U R                  U	5      I S h  vN   U R                  5         [        R                  S5        U R                  UR                  =(       d    S[        UR                  [        U	[         UR"                  [$        UR&                  [(        U R*                  [,        U0S9$  N! [        [        4 a*  n
[	        U R
                  U
S9  UR                  n	 S n
A
NS n
A
ff = f N! [.        [0        4 a/  n
[        R3                  SX:5        U R5                  SS9s S n
A
$ S n
A
f[6         a   n
[        R3                  S	X:5         S n
A
g S n
A
ff = f7f)
N)rP   rQ   rR   rS   rO   )rV   msgzAdding Bosch entry.zUnknown modeltitledataz"Wrong IP or credentials at %s - %sfaulty_credentials)reasonz!Error connecting Bosch at %s - %s)r   check_connectionr   r   r   rV   uuidasync_set_unique_id_abort_if_unique_id_configured_LOGGERdebugasync_create_entrydevice_namer   rQ   r   r   
access_keyr   rR   r   r    r   r
   r   errorasync_abort	Exception)r&   rN   rP   rQ   rR   rS   rO   BoschGatewaydevicerd   errs              r'   rU   "BoschFlowHandler.configure_gateway   sc    "	*;7L!))!F##4466 ..t444335 MM/0**((;O &++$ 1 1 &"5"5$d&7&7!< + 
 
 7%}5 #,$))E{{# 5!45 	AMM>J##+?#@@ 	JMM=tII	Js   FD' C( C&C( D' D%D' "BF&C( (D"8 DD' D""D' 'F7$E!FF!F.F	F	FFc                 8   #    [         R                  SU5        g7f)zHandle a flow discovery.zDiscovered Bosch unit : %sN)rg   rh   )r&   discovery_infos     r'   async_step_discovery%BoschFlowHandler.async_step_discovery   s     2NCs   entryc                     [        U 5      $ )zGet option flow.)OptionsFlowHandlerrw   s    r'   async_get_options_flow'BoschFlowHandler.async_get_options_flow   s     "%((r*   )r"   r    r%   r!   r#   r$   N)NN)__name__
__module____qualname____firstlineno____doc__VERSIONr   CONN_CLASS_LOCAL_POLLCONNECTION_CLASSr(   r/   r,   r@   rW   rZ   rU   ru   staticmethodr   ConfigEntryr{   __static_attributes__ r*   r'   r   r   '   sp    %G%;;!=
>
2. UY%ND )n&@&@ )  )r*   r   c                   D    \ rS rSrSrS\R                  4S jrSS jrSr	g)	ry      z!Options flow handler for new API.rw   c                     Xl         g)zInitialize option.Nrz   )r&   rw   s     r'   r(   OptionsFlowHandler.__init__   s    
r*   Nc                 t  #    Ub  U R                  SUS9$ U R                  R                  R                  SS5      nU R                  R                  R                  SS5      nU R	                  S[
        R                  " [
        R                  " SUS9[        [
        R                  " SUS9[        05      S9$ 7f)	zDisplay option dialog. r^   new_stats_apiFoptimistic_modeinit)default)r4   r5   )	ri   rw   optionsrT   r8   r9   r:   rH   bool)r&   r.   r   r   s       r'   async_step_init"OptionsFlowHandler.async_step_init   s     !****EE

**..F**,,001BEJ##

LL-H$LL!2OLd $ 
 	
s   B6B8rz   r}   )
r~   r   r   r   r   r   r   r(   r   r   r   r*   r'   ry   ry      s    +n88 
r*   ry   )3r   logging
voluptuousr9   bosch_thermostat_clientr   bosch_thermostat_client.constr   r   )bosch_thermostat_client.const.easycontrolr   !bosch_thermostat_client.const.ivtr   r   #bosch_thermostat_client.const.nefitr	   "bosch_thermostat_client.exceptionsr
   r   r   r   homeassistantr   homeassistant.corer   homeassistant.constr   r   r   $homeassistant.helpers.aiohttp_clientr   r   r   constr   r   r   r   r   r   rA   r?   	getLoggerr~   rg   HANDLERSregister
ConfigFlowr   OptionsFlowry   r   r*   r'   <module>r      s    1   3 4 A < 5  ) ' N N H *  c;	24L	 

H
% !!&)^)~00 ^) *^)B
33 
r*   