
    \gS                        d dl mZmZ d dlmZmZ d dlmZ ddlmZ d dl	Z	d dl
Z
d dlZd dlZd dlmZ d dlmZ d dl mZmZ d dlmZmZ d dlmZ ddlmZ d dl	Z	d dl
Z
d dlZd dlZd dlmZ d dlmZ d	 Zd
 Zd Zd Zd Zed             Zd Zd dlZd dlmZ d Zd dlZd dlZd dlmZ d dl mZmZ d dlmZ d dlmZ d dl m!Z" d dl#m$Z$ d Z%d dl mZ d Z&d dlZd dlZd dlmZ d dl mZmZ d dl'm(Z d dlmZ d Z)d dlZd dlZd dl'm(Z d dl mZmZ ddlmZ d dl*m+Z+ d dl,m-Z- d dlmZ d dlmZ d dl mZmZ d dlmZ d dlmZ d dlZd dlZd dlmZ d dl'm(Z d dlmZ d dl mZmZ d dlmZ d dlmZ d dlZd dlZd dl'm(Z d dlmZ d dl*m+Z+ d dl,m-Z- ddlmZ ddl.m)Z) ed             Z/d dlZd dlZd dlmZ d Z0d dl mZmZ d dlmZ d dlmZ d dlmZ d dlZd dlZed             Z1dS )    )renderget_object_or_404)datetime	timedelta)Projeto   )CondicaoExtN)
connection)login_requiredc                 b    dt          j        d| z  | dz   z            z  }||z  dz  | dz   z  }|S )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      sI    %+*=+PUBU)V W WW),<<vE+X^J^_    c                      t          j                    } | t          d          z
  }|                    d          |                     d          fS )Ni  )days%Y-%m-%d)r   nowr   strftime)data_fimdata_inicios     r   obter_periodo_ultimos_4_anosr      sI    |~~HYD1111K
++X->->z-J-JJJr   c                    | j         }| j        }d}||||ddd}	 t          j        ||          }|                                 |                                }d|vrt          j        d| d| d	           d S t          j	        |d         d
         |d         d         d          }	t          j
        |	d
                   |	d
<   |	S # t          $ r"}
t          j        d|
            Y d }
~
d S d }
~
ww xY w)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@   $   s9   H!I
9C!"' F<F333!!###}}4MdHddXadddeee4\N6*"8n-=>
 
   ^BvJ//6
	   8Q88999ttttts   AC :AC 
C4C//C4c                     | d         j         j        | d<   |                     d          d                                         }|                                }|                                }||fS )Nr.   dater    )dtrB   groupbymaxidxmax)r>   max_temps_por_diadia_mais_quentetemperatura_maxs       r   identificar_dia_mais_quenterJ   F   se    F#BvJ

6**+;<@@BB'..00O'++--OO++r   c                    | j         }| j        }d}|||                    d          |                    d          ddd}	 t          j        ||          }|                                 |                                }d|vrt          j        d| d	| d
           d S t          j
        |d         d         |d         d         |d         d         d          }t          j        |d                   |d<   ||d         j        j        dk    |d         j        j        dk    z           }|S # t          $ r"}	t          j        d|	            Y d }	~	d S d }	~	ww xY w)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   s   H!I
9C%..z::#,,Z887' F<F333!!###}}4MdHddXadddeee4\N6*"8n-=>$(N3I$J
 
  
 ^BvJ//6
F#q(RZ]-?2-EFG	   8Q88999ttttts    AD.  BD. .
E8EEc                 *   | j         j        r/| j         j        r#t          j        | j         j        j                   t          t          |          }|j        r|j	        st          | dddi          S t                      \  }}t          |||          }||j        rt          | dddi          S t          |          \  }}t          j                            ||          }|                                r|                    ddd	d
          }	nlt)          ||          }
|
|
j        rt          | dddi          S |
                    d d          |
d
<   t-          ||
           |
                    d          }	t          | d||||	||d          S )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                 :    t          | d         | d                   S Nr    rL   r   rows    r   <lambda>z,obter_temperaturas_projeto.<locals>.<lambda>   s    1#6F2GMcIdee r   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_existentesr`   df_dia_mais_quentes              r   obter_temperaturas_projetoru   r   s   |$ ?)< ?gl1=>>>J777G u7#4 ug2V=r4sttt 9::K0+xPPO/"7g2V=h4ijjj'B?'S'S$O_ #*11'1XX   F 0 7 7Oacu v v8/RR%);)A%'#6Ax8yzzz1C1I1Ieelm 2J 2
 2
-.
 	 );<<< 2 : :9 E E':**!6%= =   r   c                 *   t          t          |           }t                      \  }}t          |||          }||j        rt          d           d S t          |          \  }}t          j        	                    ||          }|
                                rt          d           d S t          ||          }||j        rt          d           d S |                    d d          |d	<   t          ||           t          d
| d           d S )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                 :    t          | d         | d                   S rX   rY   rZ   s    r   r\   z8registrar_temperaturas_dia_mais_quente.<locals>.<lambda>   s    -c2B.CSI_E`aa r   r   r]   r   z!Temperaturas do dia mais quente (z) registradas com sucesso.)r   r   r   r@   rh   printrJ   r	   ri   rj   rk   rP   rm   rn   )	rq   r:   r   r   rr   rH   rI   rs   rt   s	            r   &registrar_temperaturas_dia_mais_quentery      sL   J777G 9::K 1+xPPO/"7?@@@ (C?'S'S$O_ #*11'1XX   `aaa 5WoNN!%7%=!KLLL .@-E-Eaahi .F . .)*
 G%7888	
Yo
Y
Y
YZZZZZr   )settingsc                 p   |d                              t                    |d<   |                                D ]s\  }}t          j                            | |d                                         |d                                         |d         |d         |d         |d                    tt          j	        
                    t          j        d| j                   }t          j        |d	           t          j	        
                    |d
| j         d          }|                    |ddd           d S )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)rm   calcular_calor_latenteiterrowsr	   ri   createrB   r.   ospathjoinrz   
MEDIA_ROOTnome_projetomakedirsto_csv)r:   rt   _r[   caminho_pasta_projetocaminho_csvs         r   rn   rn      s@   *<=M*N*T*TUk*l*l' %--// 	
 	
3""V!!##V!!##,- !78 !34o. 	# 	
 	
 	
 	
 GLL)<>}gng{>}>}~~ K%5555 ',,46d'J^6d6d6deeK kC'RRRRRr   )
DateFormatc                     t          j                    }|                    t          j        | |d                     |                    |||d           t          j        |d          S )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      sr    
)++CMM"*qAO<<<=== 	     ;se,,,,r   r   c                 (    t          | dddi          S )Ncondicaoext/erro.htmlmensagemu.   Página não encontrada ou outro erro ocorreu.r   )rp   s    r   exibir_error     s    '2ZAq4rsssr   c                 :    dd| z  z
  d| dz  z  z   d| dz  z  z
  }|S )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                 `
   | j         j        r/| j         j        r#t          j        | j         j        j                   t          t          |          }t          j	        
                    |          }|                                st          | dddi          S |                                }t          j	        
                    |                                          }|st          | dddi          S t          j                            t$          j        d|j         d	|j         d
          }t          j                            |          st          | dddi          S t+          j        |dd          }t+          j        |d                   |d<   |j        }t3          |          }	t+          j        |d         |	gt7          |d                   z  d          }
t9          j                    }|                    t9          j        |
d         |
d         dd| d                     |                     d| dddtC          d          dd           |"                    d           }|d!         #                    t2                    |d"<   t9          j                    }|                    t9          j        |d         |d"         dd#                     |                     d$ddtC          d          dd           |"                    d           }t9          j                    }|                    t9          j        |d         |d!         dd%                     |                     d&dd%tC          d          dd           |"                    d           }t9          j                    }|                    t9          j        |d         |d'         dd(                     |                     d)dd(tC          d          dd           |"                    d           }t9          j                    }|                    t9          j        |d         |d*         dd+                     |                     d,dd+tC          d          dd           |"                    d           }|d         j$        d-         }tK          |t*          j&                  r|'                                }n|}|d!         (                                }t          | d.|||||||||d/	          S )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))rc   rd   re   r
   rf   rg   r   r   r   ri   rj   rk   r   firstr   r   r   r   rz   r   r   r6   read_csvr8   r   r   r7   lenr   r   r   r   r   dictr   rm   iloc
isinstance	Timestampto_pydatetimerE   )rp   rq   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    |$ ?)< ?gl1=>>>  J777G  '''88I wg6Et8uvvv   H #*1181DDJJLLN zg6Ew8xyyy ',,aw3aawG[aaa K 7>>+&& lg6Ei8jkkk 
[cG	<	<	<B 6
++BvJ )< 33FGG  "|6
"7!83r&z??!J- -     !#	''

"6
*
"#:
;@':@@@	) ) )    ++S;NSSS+!!! ,    ";!B!BU!B!S!S !!12889OPPBIKK##BJ
V*
 
!,	% % %    ''=+!!! (    3::U:KK y{{Hrz
V*

 	      2'!!!       5 11I ikkObj
V*
#
$#	      !!-*!!! "    '...?? ikkObj
V*

 &	      !!0-!!! "    '...??  Z_Q/(",77 10>>@@0 )*..00O '9**,,"8&@2
< 
< 
 
 
r   c                 Z   t          j        |d                   |d<   t          j                    }| j        gt	          |          z  |d<   |d         j        j        |d<   |d         j                            d          |d<   |d         |d<   t          j	        
                    t          j        d| j                   }t          j        |d	
           t          j	        
                    |d| j         d          }|                    |ddd           t          d|            dS )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   rz   r   r   r   rx   )r:   rr   	df_exportpasta_saidar   s        r   gravar_csv_temperaturasr     sA    !n_V-DEEOF I"/033G3GGIh'/27If'/2;;GDDIf./?@Im ',,5w355 K Kd++++',,3-333 K 	     

1K
1
122222r   c                 f   | j         j        r/| j         j        r#t          j        | j         j        j                   t          t          |          }t                      \  }}t          |||          }||j
        rt          | dddi          S t          ||           t          | dddi          S )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!)rc   rd   re   r
   rf   rg   r   r   r   r@   rh   r   r   )rp   rq   r:   r   r   rr   s         r   salvar_temperaturas_csvr     s     |$ ?)< ?gl1=>>>  J777G 9::K 1+xPPO /"7#gh
 
 	
 G_55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   ru   ry   r   django.confrz   rn   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      s   6 6 6 6 6 6 6 6 ( ( ( ( ( ( ( ( " " " " " "                          9 9 9 9 9 9 6 6 6 6 6 6 6 6 ( ( ( ( ( ( ( ( " " " " " "                          9 9 9 9 9 9  K K K  D, , ,! ! !H , , ,b$[ $[ $[P 
			            
S S S< 
			                 6 6 6 6 6 6 6 6 " " " " " "             . . . . . .- - -  $ # # # # #t t t 
			                 6 6 6 6 6 6 6 6 ! ! ! ! ! ! " " " " " "   
			     ! ! ! ! ! ! 6 6 6 6 6 6 6 6       $ $ $ $ $ $ ) ) ) ) ) )             9 9 9 9 9 9 6 6 6 6 6 6 6 6 9 9 9 9 9 9             				                 ! ! ! ! ! ! 9 9 9 9 9 9 6 6 6 6 6 6 6 6                         				     ! ! ! ! ! ! " " " " " " $ $ $ $ $ $ ) ) ) ) ) )       ) ) ) ) ) )` ` `L 
			                #3 #3 #3J 7 6 6 6 6 6 6 6 9 9 9 9 9 9                         				         r   