
    \gS                        S SK JrJr  S SKJrJr  S SKJr  SSKJr  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  S SK JrJr  S SKJrJr  S SKJr  SSKJr  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  S	 rS
 rS rS rS r\S 5       rS rS SKrS SKJr  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  S SK J!r"  S SK#J$r$  S r%S SK Jr  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  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+  S SK,J-r-  S SKJr  S SKJr  S SK JrJr  S SKJr  S SKJr  S SKrS SKrS SKJr  S SK'J(r  S SKJr  S SK JrJr  S SKJr  S SKJr  S SKrS SKrS SK'J(r  S SKJr  S SK*J+r+  S SK,J-r-  SSKJr  SSK.J)r)  \S 5       r/S SKrS SKrS SKJr  S r0S SK JrJr  S SKJr  S SKJr  S SKJr  S SKrS SKr\S 5       r1g)    )renderget_object_or_404)datetime	timedelta)Projeto   )CondicaoExtN)
connection)login_requiredc                 d    S[         R                  " SU -  U S-   -  5      -  nX!-  S-  U S-   -  nU$ )Ng r@gQ1@g     pn@gͪV@gfffffq@)mathexp)temperaturaumidade_relativapressao_saturacaoumidade_absolutas       &/var/www/html/cag/condicaoext/views.pycalcular_umidade_absolutar      sE    %+*=+PUBU)V WW)<vE+X^J^_    c                      [         R                  " 5       n U [        SS9-
  nUR                  S5      U R                  S5      4$ )Ni  )days%Y-%m-%d)r   nowr   strftime)data_fimdata_inicios     r   obter_periodo_ultimos_4_anosr      s=    ||~HYD11K
+X->->z-JJJr   c                    U R                   nU R                  nSnUUUUSSS.n [        R                  " XVS9nUR	                  5         UR                  5       nSU;  a  [        R                  " SU SU S	35        g [        R                  " US   S
   US   S   S.5      n	[        R                  " U	S
   5      U	S
'   U	$ ! [         a#  n
[        R                  " SU
 35         S n
A
g S n
A
ff = f)N-https://archive-api.open-meteo.com/v1/archivetemperature_2mAmerica/Sao_Paulolatitude	longitude
start_dateend_datehourlytimezoneparamsr'   /   Erro: Dados históricos não disponíveis para , .time)r.   r    Erro ao obter dados da API: )r#   r$   requestsgetraise_for_statusjsonloggingerrorpd	DataFrameto_datetime	Exception)projetor   r   r#   r$   urlr*   responsedatadfes              r   obter_temperaturas_periodor@   $   s    H!!I
9C!"'F<<3!!#}}4MMKH:UWXaWbbcde\\N6*"8n-=>
  ^^BvJ/6
	 4QC89s   AC  =AC   
C-
C((C-c                     U S   R                   R                  U S'   U R                  S5      S   R                  5       nUR	                  5       nUR                  5       nX#4$ )Nr.   dater    )dtrB   groupbymaxidxmax)r>   max_temps_por_diadia_mais_quentetemperatura_maxs       r   identificar_dia_mais_quenterJ   F   s\    F##BvJ

6*+;<@@B'..0O'++-O++r   c                    U R                   nU R                  nSnUUUR                  S5      UR                  S5      SSS.n [        R                  " XES9nUR                  5         UR                  5       nSU;  a  [        R                  " SU S	U S
35        g [        R                  " US   S   US   S   US   S   S.5      n[        R                  " US   5      US'   XS   R                  R                  S:  US   R                  R                  S:*  -     nU$ ! [         a#  n	[        R                  " SU	 35         S n	A	g S n	A	ff = f)Nr   r   z#temperature_2m,relative_humidity_2mr!   r"   r)   r'   r+   r,   r-   r.   r    relative_humidity_2m)r.   r    rL         r/   )r#   r$   r   r0   r1   r2   r3   r4   r5   r6   r7   r8   rC   hourr9   )
r:   rH   r#   r$   r;   r*   r<   r=   r>   r?   s
             r   obter_dados_dia_mais_quenterP   N   sQ   H!!I
9C%..z:#,,Z87'F<<3!!#}}4MMKH:UWXaWbbcde\\N6*"8n-=>$(N3I$J
 
 ^^BvJ/6
F##q(RZ]]-?-?2-EFG	 4QC89s    AD  BD   
E*EEc                 V   U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        US9nUR                  (       a  UR                  (       d  [        U SSS05      $ [        5       u  p4[        X#U5      nUb  UR                  (       a  [        U SSS05      $ [        U5      u  pg[        R                   R#                  X&S9nUR%                  5       (       a  UR'                  SSS	S
5      n	O^[)        X&5      n
U
b  U
R                  (       a  [        U SSS05      $ U
R+                  S SS9U
S
'   [-        X*5        U
R/                  S5      n	[        U SUUUU	UUS.5      $ )Nidzprojeto/erro.htmlerrou3   As coordenadas do projeto não estão disponíveis.u)   Não foi possível obter as temperaturas.r:   r=   horar   r   r   u5   Não foi possível obter os dados do dia mais quente.c                 &    [        U S   U S   5      $ Nr    rL   r   rows    r   <lambda>,obter_temperaturas_projeto.<locals>.<lambda>   s    1#6F2GMcIder   r   axisrecordszcondicaoext/temperaturas.html)r:   rH   rI   temperaturas_horariasperiodo_inicioperiodo_fim)useris_authenticatedtenantr
   
set_schemaschema_namer   r   r#   r$   r   r   r@   emptyrJ   r	   objectsfilterexistsvaluesrP   applysalvar_dados_climaticosto_dict)request
projeto_idr:   r   r   df_temperaturasrH   rI   dados_existentesra   df_dia_mais_quentes              r   obter_temperaturas_projetorv   r   s   ||$$)<)<gll11==>J7G7#4#4g2V=r4stt 9:K0xPO/"7"7g2V=h4ijj'B?'S$O #**11'1X   0 7 7Oacu v8R%);)A)A'#6Ax8yzz1C1I1Ielm 2J 2
-.
 	 < 2 : :9 E':**!6%=  r   c                    [        [        U S9n[        5       u  p#[        XU5      nUb  UR                  (       a  [        S5        g [        U5      u  pV[        R                  R                  XS9nUR                  5       (       a  [        S5        g [        X5      nUb  UR                  (       a  [        S5        g UR                  S SS9US	'   [        X5        [        S
U S35        g )NrR   u/   Erro: Não foi possível obter as temperaturas.rU   uP   As temperaturas para o dia mais quente já estão registradas no banco de dados.u;   Erro: Não foi possível obter os dados do dia mais quente.c                 &    [        U S   U S   5      $ rX   rY   rZ   s    r   r\   8registrar_temperaturas_dia_mais_quente.<locals>.<lambda>   s    -c2B.CSI_E`ar   r   r^   r   z!Temperaturas do dia mais quente (z) registradas com sucesso.)r   r   r   r@   ri   printrJ   r	   rj   rk   rl   rP   rn   ro   )	rr   r:   r   r   rs   rH   rI   rt   ru   s	            r   &registrar_temperaturas_dia_mais_quenter{      s    J7G 9:K 1xPO/"7"7?@ (C?'S$O #**11'1X  `a 5WN!%7%=%=KL .@-E-Eahi .F .)*
 G8	-o->>X
YZr   )settingsc                 .   US   R                  [        5      US'   UR                  5        HV  u  p#[        R                  R                  U US   R                  5       US   R                  5       US   US   US   US   S9  MX     [        R                  R                  [        R                  SU R                   35      n[        R                  " USS	9  [        R                  R                  US
U R                   S35      nUR                  USSSS9  g )Nr    calor_latenter.   rL   r   )r:   r=   rV   r   r   r   r~   z&/var/www/html/cag/arquivos_climaticos/Texist_okdados_climaticos_.csvF;utf-8indexsepencoding)rn   calcular_calor_latenteiterrowsr	   rj   createrB   r.   ospathjoinr|   
MEDIA_ROOTnome_projetomakedirsto_csv)r:   ru   _r[   caminho_pasta_projetocaminho_csvs         r   ro   ro      s   *<=M*N*T*TUk*l' %--/""V!!#V!!#,- !78 !34o. 	# 	
 0 GGLL)<)<@fgng{g{f|>}~ KK%5 '',,48I'J^J^I__c6deK kC'Rr   )
DateFormatc                     [         R                  " 5       nUR                  [         R                  " XSS95        UR	                  UUUSS9  [
        R                  " USS9$ )Nzlines+markers)xymodeplotly_white)titlexaxis_titleyaxis_titletemplateF	full_html)goFigure	add_traceScatterupdate_layoutpioto_html)r   r   tituloxlabelylabelfigs         r   gerar_grafico_plotlyr      sX    
))+CMM"**qO<= 	   ;;se,,r   r   c                      [        U SSS05      $ )Ncondicaoext/erro.htmlmensagemu.   Página não encontrada ou outro erro ocorreu.r   )rq   s    r   exibir_error     s    '2ZAq4rssr   c                 :    SSU -  -
  SU S-  -  -   SU S-  -  -
  nU$ )Ng@gzG@g-C6Z?   giUMu?    )tempLs     r   r   r     s1    va//'D!G2CCAHr   )Ambiente)DadosTermicos)r   c                 H	   U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        US9n[        R                  R                  US9nUR                  5       (       d  [        U SSS05      $ UR                  5       n[        R                  R                  US9R                  5       nU(       d  [        U SSS05      $ [        R                   R#                  [$        R&                  SUR(                   S	UR(                   S
35      n[        R                   R                  U5      (       d  [        U SSS05      $ [*        R,                  " USSS9n[*        R.                  " US   5      US'   UR0                  n[3        U5      n	[*        R4                  " US   U	/[7        US   5      -  S.5      n
[8        R:                  " 5       nUR=                  [8        R>                  " U
S   U
S   SSU S3S95        URA                  SU S3SS[C        SS9SSS9  URE                  SS 9nUS!   RG                  [2        5      US"'   [8        R:                  " 5       nUR=                  [8        R>                  " US   US"   SS#S95        URA                  S$SS[C        SS9SSS9  URE                  SS 9n[8        R:                  " 5       nUR=                  [8        R>                  " US   US!   SS%S95        URA                  S&SS%[C        SS9SSS9  URE                  SS 9n[8        R:                  " 5       nUR=                  [8        R>                  " US   US'   SS(S95        URA                  S)SS([C        SS9SSS9  URE                  SS 9n[8        R:                  " 5       nUR=                  [8        R>                  " US   US*   SS+S95        URA                  S,SS+[C        SS9SSS9  URE                  SS 9nUS   RH                  S-   n[K        U[*        RL                  5      (       a  URO                  5       nOUnUS!   RQ                  5       n[        U S.UUUUUUUUUS/.	5      $ )0NrR   )r:   r   r   z-Nenhum ambiente encontrado para este projeto.)ambienteu0   Nenhum dado térmico encontrado para o ambiente.arquivos_climaticos/z/dados_climaticos_r   u"   Nenhum dado climático encontrado.r   r   )r   r   r.   )r.   calor_latente_internar   lineszCalor Latente Interno (u   °C))r   r   r   namez*Calor Latente para Temperatura Interna de u   °Cu   HoráriozCalor Latente (kJ/kg)i6 )dticki  iX  )r   r   r   xaxiswidthheightFr   r    calor_latente_diazCalor Latente Externo (kJ/kg)z-Calor Latente Externo ao Longo do Dia (kJ/kg)u   Temperatura (°C)u"   Temperatura Externa Horária (°C)rL   zUmidade Relativa (%)u   Umidade Relativa Horária (%)r   zUmidade Absoluta (g/kg)u    Umidade Absoluta Horária (g/kg)r   zcondicaoext/registrocsv.html)	r:   rH   rI   	plot_tempplot_umidade_relplot_umidade_absplot_calor_latente_diaplot_calor_latente_internatemperatura_interna))rd   re   rf   r
   rg   rh   r   r   r   rj   rk   rl   r   firstr   r   r   r   r|   r   r   r6   read_csvr8   r   r   r7   lenr   r   r   r   r   dictr   rn   iloc
isinstance	Timestampto_pydatetimerE   )rq   rr   r:   	ambientesr   dados_termicosr   r>   r   r   df_calor_latente_internafig_calor_latente_internar   fig_calor_latente_diar   fig_tempr   fig_umidade_relr   fig_umidade_absr   dia_mais_quente_pandasrH   rI   s                           r   exibir_graficos_csvr   A  s    ||$$)<)<gll11==>  J7G   '''8Ig6Et8uvv  H #**1181DJJLNg6Ew8xyy '',,
w3344FwG[G[F\\`aK 77>>+&&g6Ei8jkk 
[cG	<B 6
+BvJ )<< 33FG  "||6
"7!83r&z?!J-   !#		''


"6
*
"#:
;&':&;4@	)  ++:;N:OsS+! ,  ";!B!BU!B!S !!12889OPBIIK##BJJ
V*
 
!,	%  ''=+! (  3::U:K yy{Hrzz
V*

 	  2'!     5 1I iikObjj
V*
#
$#	  !!-*! "  '...? iikObjj
V*

 &	  !!0-! "  '...?  Z__Q/(",,770>>@0 )*..0O '9**,,"8&@2
< 
 
r   c                 d   [         R                  " US   5      US'   [         R                  " 5       nU R                  /[	        U5      -  US'   US   R
                  R                  US'   US   R
                  R                  S5      US'   US   US'   [        R                  R                  [        R                  SU R                   35      n[        R                  " US	S
9  [        R                  R                  USU R                   S35      nUR                  USSSS9  [        SU 35        g)u   
Grava em CSV as colunas solicitadas: 'cidade', 'data', 'hora', 'temperatura'.
Assim é possível avaliar se as informações retornadas pela API estão corretas.
r.   cidader=   z%H:%MrV   r    r   r   Tr   historico_api_r   Fr   r   r   zArquivo CSV gerado em: N)r6   r8   r7   r   r   rC   rB   r   r   r   r   r|   r   r   r   rz   )r:   rs   	df_exportpasta_saidar   s        r   gravar_csv_temperaturasr     s*    !nn_V-DEOF I"//033GGIh'/2277If'/22;;GDIf./?@Im '',,
w3345K KKd+'',,
--.d3K 	   
#K=
12r   c                    U R                   R                  (       aO  U R                   R                  (       a4  [        R                  " U R                   R                  R
                  5        [        [        US9n[        5       u  p4[        X#U5      nUb  UR                  (       a  [        U SSS05      $ [        X%5        [        U SSS05      $ )NrR   r   r   uL   Não foi possível obter as temperaturas ou nenhuma temperatura disponível.zcondicaoext/sucesso.htmlz+CSV gerado com sucesso e salvo no servidor!)rd   re   rf   r
   rg   rh   r   r   r   r@   ri   r   r   )rq   rr   r:   r   r   rs   s         r   salvar_temperaturas_csvr     s     ||$$)<)<gll11==>  J7G 9:K 1xPO /"7"7#gh
 	
 G5 "	BC r   )2django.shortcutsr   r   r   r   projeto.modelsr   modelsr	   r   r0   pandasr6   r4   	django.dbr
   django.contrib.auth.decoratorsr   r   r   r@   rJ   rP   rv   r{   r   django.confr|   ro   plotly.graph_objs
graph_objsr   	plotly.ioior   django.utils.dateformatr   r   r   plotly.graph_objectsgraph_objectsr   ctermica.modelsr   termicos.modelsr   viewsr   r   r   r   r   r   <module>r      sn   6 ( "        9 6 ( "        9KD,!H , ,b$[P 
  
S< 
    6 "   .-  $t 
    6 ! " 
  ! 6  $ )   9 6 9   	    ! 9 6     	  ! " $ )  )` `L 
   #3J 7 9     	   r   