
    0g1;                        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 Zd Zd	 Zd
 Zd Z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 Z*y)    )renderget_object_or_404)datetime	timedelta)Projeto   )CondicaoExtNc                 d    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       $C:\projetos\cag\condicaoext\views.pycalcular_umidade_absolutar      sH    %+*=+PUBU)V WW),<<vE+X^J^_    c                      t        j                         } | t        d      z
  }|j                  d      | j                  d      fS )Ni  )days%Y-%m-%d)r   nowr   strftime)data_fimdata_inicios     r   obter_periodo_ultimos_2_anosr      s=    ||~HYC00K
+X->->z-JJJr   c                    | j                   }| j                  }d}||||ddd}	 t        j                  ||      }|j	                          |j                         }t        j                  |d   d   |d   d   d	      }
t        j                  |
d         |
d<   |
S # t        $ r"}	t        j                  d|	        Y d }	~	y d }	~	ww xY w)
N&https://api.open-meteo.com/v1/forecasttemperature_2mAmerica/Sao_Paulolatitude	longitude
start_dateend_datehourlytimezoneparamsErro ao obter dados da API: r%   time)r*   r   )r!   r"   requestsgetraise_for_statusjson	Exceptionloggingerrorpd	DataFrameto_datetime)projetor   r   r!   r"   urlr(   responsedataedfs              r   obter_temperaturas_periodor;      s    H!!I
2C!"'F<<F3!!#}}
 
Xv&x.)9: 
B 6
+BvJI  4QC89s   7B 	C&CCc                     | d   j                   j                  | d<   | j                  d      d   j                         }|j	                         }|j                         }||fS )Nr*   dater   )dtr=   groupbymaxidxmax)r:   max_temps_por_diadia_mais_quentetemperatura_maxs       r   identificar_dia_mais_quenterE   5   s^    F##BvJ

6*+;<@@B'..0O'++-OO++r   c                 X   | j                   }| j                  }d}|||j                  d      |j                  d      ddd}	 t        j                  ||      }|j                          |j                         }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 }~y d }~ww xY w)Nr   r   z#temperature_2m,relative_humidity_2mr   r    r'   r)   r%   r*   r   relative_humidity_2m)r*   r   rG         )r!   r"   r   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r>   hour)
r5   rC   r!   r"   r6   r(   r7   r8   r9   r:   s
             r   obter_dados_dia_mais_quenterK   =   s.   H!!I
2C%..z:#,,Z87'F<<F3!!#}}
 
Xv&x.)9: $X/E F 
B
 6
+BvJ	RZ]]1$F););r)AB	CBI  4QC89s   7C> >	D)D$$D)c                 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                  j                  ||      }|j                         r|j                  ddd	d
      }	n]t        ||      }
|
|
j                  rt	        | dddi      S |
j                  d d      |
d
<   t!        ||
       |
j#                  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.r5   r8   horar   r   r   u5   Não foi possível obter os dados do dia mais quente.c                 &    t        | d   | d         S Nr   rG   r   rows    r   <lambda>z,obter_temperaturas_projeto.<locals>.<lambda>x   s    1#6F2GMcIder   r   axisrecordszcondicaoext/temperaturas.html)r5   rC   rD   temperaturas_horariasperiodo_inicioperiodo_fim)r   r   r!   r"   r   r   r;   emptyrE   r	   objectsfilterexistsvaluesrK   applysalvar_dados_climaticosto_dict)request
projeto_idr5   r   r   df_temperaturasrC   rD   dados_existentesr[   df_dia_mais_quentes              r   obter_temperaturas_projetork   _   sb   J7G7#4#4g2V=r4stt8: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                    t        t        |       }t               \  }}t        |||      }||j                  rt        d       y t        |      \  }}t        j                  j                  ||      }|j                         rt        d       y t        ||      }||j                  rt        d       y |j                  d d      |d	<   t        ||       t        d
| d       y )NrM   u/   Erro: Não foi possível obter as temperaturas.rP   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 rS   rT   rU   s    r   rW   z8registrar_temperaturas_dia_mais_quente.<locals>.<lambda>   s    -c2B.CSI_E`ar   r   rX   r   z!Temperaturas do dia mais quente (z) registradas com sucesso.)r   r   r   r;   r^   printrE   r	   r_   r`   ra   rK   rc   rd   )	rg   r5   r   r   rh   rC   rD   ri   rj   s	            r   &registrar_temperaturas_dia_mais_quentero      s    J7G 9:K 1+xPO/"7"7?@ (C?'S$O_ #**11'1X `a 5WoN!%7%=%=KL .@-E-Eahi .F .)*
 G%78	-o->>X
YZr   )settingsc                 <   |d   j                  t              |d<   |j                         D ]Y  \  }}t        j                  j                  | |d   j                         |d   j                         |d   |d   |d   |d          [ t        j                  j                  t        j                  d| j                         }t        j                  |d	       t        j                  j                  |d
| j                   d      }|j                  |ddd       y )Nr   calor_latenter*   rG   r   )r5   r8   rQ   r   r   r   rr   arquivos_climaticos/T)exist_okdados_climaticos_.csvF;utf-8)indexsepencoding)rc   calcular_calor_latenteiterrowsr	   r_   creater=   r*   ospathjoinrp   
MEDIA_ROOTnome_projetomakedirsto_csv)r5   rj   _rV   caminho_pasta_projetocaminho_csvs         r   rd   rd      s   *<=M*N*T*TUk*l' %--/3""V!!#V!!#,- !78 !34o. 	# 	
 0 GGLL)<)<@TU\UiUiTj>kl KK%5 '',,48I'J^J^I__c6deK kC'Rr   )
DateFormatc                     t        j                         }|j                  t        j                  | |d             |j	                  |||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      sZ    
))+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   )rf   s    r   exibir_error      s    '2ZAq4r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)DadosTermicosc                 R   t        t        |      }t        t        |      }t        t        |      }t        j
                  j                  t        j                  d|j                   d|j                   d      }t        j
                  j                  |      st        | ddd	i      S t        j                  |d
d      }|j                  }t        |      }t        j                   |d   |gt#        |d         z  d      }	t%        j&                         }
|
j)                  t%        j*                  |	d   |	d   dd| d             |
j-                  d| dddt/        d      dd       |
j1                  d      }|d   j3                  t              |d <   t%        j&                         }|j)                  t%        j*                  |d   |d    dd!             |j-                  d"ddt/        d      dd       |j1                  d      }t%        j&                         }|j)                  t%        j*                  |d   |d   dd#             |j-                  d$dd#t/        d      dd       |j1                  d      }t%        j&                         }|j)                  t%        j*                  |d   |d%   dd&             |j-                  d'dd&t/        d      dd       |j1                  d      }t%        j&                         }|j)                  t%        j*                  |d   |d(   dd)             |j-                  d*dd)t/        d      dd       |j1                  d      }t        | d+||d   j4                  d,   |d   j7                         ||||||d-	      S ).NrM   )r5   )ambienters   z/dados_climaticos_rv   r   r   u"   Nenhum dado climático encontrado.rw   rx   )rz   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)rG   zUmidade Relativa (%)u   Umidade Relativa Horária (%)r   zUmidade Absoluta (g/kg)u    Umidade Absoluta Horária (g/kg)zcondicaoext/registrocsv.htmlr   )	r5   rC   rD   	plot_tempplot_umidade_relplot_umidade_absplot_calor_latente_diaplot_calor_latente_internatemperatura_interna)r   r   r   r   r   r   r   rp   r   r   ra   r   r2   read_csvr   r|   r3   lenr   r   r   r   r   dictr   rc   ilocr@   )rf   rg   r5   r   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   s                       r   exibir_graficos_csvr     s   J7G 7;H&}xHN'',,x226J7K_K_J``rsz  tH  tH  sI  IM  5N  OK77>>+&g6Ei8jkk 
[cG	<B )<< 33FG  "||6
"7!83r&z?!J-   !#		''


"6
*
"#:
;&':&;4@	)  ++:;N:OsS+! ,  ";!B!BU!B!S !!12889OPBIIK##BJJFrBU?V]d  lK  %L  M''=+! (  3::U:K yy{HrzzBvJ"5E2FW[nop2'!     5 1I iikObjj2f:<R9SZah~  A!!-*! "  '...? iikObjj2f:<N9OV]d}~!!0-! "  '...?'9f:??1-./335,,"8&@2
< 
 
r   )+django.shortcutsr   r   r   r   projeto.modelsr   modelsr	   r   r+   pandasr2   r0   r   r   r;   rE   rK   rk   ro   r   django.confrp   rd   plotly.graph_objs
graph_objsr   	plotly.ioior   django.utils.dateformatr   r   r   plotly.graph_objectsgraph_objectsr|   ctermica.modelsr   termicos.modelsr   r   r   r   r   <module>r      s    6 ( "     K<,D(X$[P 
  S< 
    6 "   .-  $t 
    6 ! " 
  ! 6  $ )  jr   