3
2d'                 @   s  d Z ddl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	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 ddlmZ ddlmZ dd	lmZ daed
\ZZZZZ Z!dd Z"dddZ#G dd dZ$G dd dZ%dd Z&dd Z'G dd dZ(dS )uG   
mylib2.py
24.04.2021
- Bibliotheksfunktionen für smartHome-Programme
    N)RotatingFileHandler)gaierror)MIMEMultipart)MIMEBase)MIMEText)
formatdate)encoders   c             C   s^   t jdj| }|j| tdj| d	dd}|j| t jd}|j| |j| |a|S )
Nz{}z/home/smartHome/log/{}.log   i   
   )ZmaxBytesZbackupCountz0%(asctime)s %(name)s %(levelname)-6s %(message)si   i   )	logging	getLoggerformatsetLevelr   	FormattersetFormatter
addHandlerlogger)proglevelZlgZrfhZlfo r   /var/home/smartHome/mylib2.pystartlogging"   s    






r   c             C   s6   y| |S  t tfk
r0   tjdj| |S X d S )Nzcast_error: {})
ValueError	TypeErrorr   debugr   )Zto_typevalZstdr   r   r   cast1   s
    r   c               @   sP   e Zd ZdddZdd Zd	d
 Zdd Zdd Zdd ZdddZ	dd Z
dS )mydbhometm3110H	127.0.0.1Nc             C   s6   d | _ || _|| _|| _|| _|| _| j  d| _d S )NT)dbuserpasswordhostdatabaseoptionsconnectOK)selfr#   r$   r%   r&   r'   r   r   r   __init__;   s    zmydb.__init__c             C   s$  d| _ | jd kr:| jj r:d| _ tjdj| j| j d S xtdD ]}y| j	d krtjdj| j	 t
jj| j	d| _| jj| _| jj| _n t
jj| j| j| j| jdd| _d| _ P tjd	j| j| j W qD t
jjk
r } z(|d
krtjdj| tjd W Y d d }~X qDX qDW | j S )NFTz$DB war verbunden host:{} database:{}   zDB: Parameter:{})Zoption_filesZmysql_native_password)r#   r$   r%   r&   Zauth_pluginz DB verbunden host:{} database:{}   zDB Fehler (connect): {}r
   )r)   r"   is_connectedr   r   r   r%   r&   ranger'   mysql	connectorr(   r#   r$   Errorerrortimesleep)r*   cnterrr   r   r   r(   G   s:    





 zmydb.connectc             C   s   t jd d| _| jj rry| jj  d| _t jd W q | jjk
rn } zt jdj| W Y d d }~X qX nt jd d| _| jS )Nzmydb.close()FTzDB geschlossenzDB Fehler (close): {}zDB war geschlossen)	r   r   r)   r"   r.   closer2   r3   r   )r*   r7   r   r   r   r8   i   s    


$
z
mydb.closec             C   s   t jdj| d| _zpy4| jjdd}|j| |j }d| _t j| |S  tj	j
k
r } zt jdj| W Y d d }~X nX W d y|j  W n   Y nX X d S )Nzmydb.read_one({})FT)bufferedzDB Fehler (read_one): {})r   r   r   r)   r"   cursorexecuteZfetchoner0   r1   r2   r3   r8   )r*   querymycursmyrecr3   r   r   r   read_onez   s    

&zmydb.read_onec             C   s   t jdj| d| _zpy4| jjdd}|j| |j }d| _t j| |S  tj	j
k
r } zt jdj| W Y d d }~X nX W d y|j  W n   Y nX X d S )Nzmydb.read_all({})FT)r9   zDB Fehler (read_all): {})r   r   r   r)   r"   r:   r;   Zfetchallr0   r1   r2   r3   r8   )r*   r<   r=   r>   r3   r   r   r   read_all   s    

&zmydb.read_allc             C   s   t jdj| d| _xtdD ]}z|y8| jjdd}|j| | jj  d| _t jd P W n> t	j
jk
r } z|dkrt jdj| W Y d d }~X nX W d | jj r|j  X q W | jS )	Nzmydb.query({})Fr,   T)r9   Z	committedr-   zDB Fehler (query): {})r   r   r   r)   r/   r"   r:   r;   Zcommitr0   r1   r2   r3   r.   r8   )r*   r<   r6   r=   r3   r   r   r   r<      s     


&
z
mydb.query c          	   C   sf   d}dj |||}xN|dk r`y| j| W n0   |d7 }tjdj | tjd wY qX P qW d S )Nr   zcall log_value('{}', {}, '{}')r,   r
   zSQL Fehler {})r   r<   r   r   r4   r5   )r*   idgrZwerttextr6   qr   r   r   	log_value   s    

zmydb.log_valuec             C   s   dj |}| j|d S )Nz4SELECT wert FROM wt_aktuell WHERE id_groesse = '{}';r   )r   r?   )r*   rB   rD   r   r   r   	get_value   s    
zmydb.get_value)r   r    r!   r   N)rA   )__name__
__module____qualname__r+   r(   r8   r?   r@   r<   rE   rF   r   r   r   r   r   :   s   
"
r   c               @   s*   e Zd ZdddZdddZdd
dZdS )prozess<   TNc             C   sb   || _ || _|| _d| _tj | _|r2tj | _n,|d kr^| jj| j | _t	| jj
| j | _d S )Nr   )namer"   	intervallpidr4   tstartosgetpidZ	readwtaktintZ	readtxakt)r*   rL   rM   Zownr"   r   r   r   r+      s    
zprozess.__init__Fc             C   s&   t j  | _| jd kr"|r"| jj  d S )N)r4   rO   r"   r(   )r*   Z	connectdbr   r   r   start   s    
zprozess.startr   c             C   s   |dkr|| _ ttj | j }td| j | }tjdj| | jd krv| jj	| j
t| jt| j  |rv| jj  tj| d S )Ng        r
   z=== WARTEN === {}s)rM   rR   r4   rO   maxr   r   r   r"   rE   rL   rN   strr8   r5   )r*   rM   ZclosedbZtprozZtsleepr   r   r   r5      s    

zprozess.sleep)rK   TN)F)r   F)rG   rH   rI   r+   rS   r5   r   r   r   r   rJ      s   

rJ   c             C   s   | d dkr| S | d dkr dS | dd dkr8d|  } | dd  d	krh| d d d
krhd| dd  S | dd  d	kr| d d S | dd  dkr| d d d
kr| d d S t t| d d d | dd  S d S )Nr   ?* r
      :0ZAMZ12Z00ZPM   r,   r]   r]   r]   r]   r]   )rU   rR   )Zstr1r   r   r   	convert24   s      r^   c             C   s8  t | dk rdS | d j dkr| d j dkr6|}n| d j dkrL|}ndS t | dk r`|S | d dkr| dd  j r|t| dd   S dS n:| d d	kr| dd  j r|t| dd   S dS n|S nb| jd
}|d j  rt|d d }ndS t |dkr|S |d j r0|t|d  S dS d S )NrY   r
   r   SAU   -+rZ   rK   re   re   re   re   re   )lenupper	isdecimalrR   split)ZhhmmsaZsuZtminZhmr   r   r   convertHHMM  s8    
rk   c               @   s   e Zd Zdd Zdd ZdS )Mailc             C   s(   d| _ d| _d| _d| _|| _|| _d S )NiK  zsmtp.ionos.deztorsten@muehmel-net.deZtm31102)	smtp_portsmtp_serverloginpasswdsenderreceiver)r*   rq   rr   r   r   r   r+   4  s    zMail.__init__c             C   s   t jd}t }| j|d< | j|d< tdd|d< ||d< |jt|d tj	 }t
j| j| j}|j  |j|d	 |j| j| j |j| j| j|j  |j  d S )
Nz
(%d.%m.%Y)ZFromZToT)	localtimeZDateZSubjectZplain)context)r4   strftimer   rq   rr   r   Zattachr   sslZcreate_default_contextsmtplibZSMTPrn   rm   ZehloZstarttlsro   rp   ZsendmailZ	as_stringquit)r*   ZsubjectmessageZtimestrmsgrt   Zsmtpr   r   r   send<  s    


z	Mail.sendN)rG   rH   rI   r+   r{   r   r   r   r   rl   3  s   rl   )N))__doc__r   Zlogging.handlersr   r4   Zmysql.connectorr0   ZdatetimesysrP   ZrequestsZjsonrw   rv   socketr   Zemail.mime.multipartr   Zemail.mime.baser   Zemail.mime.textr   Zemail.utilsr   Zemailr   r   r/   ZST_UNBEKANNTZST_OKZST_INFOZST_WARNZST_ERRORZST_ALARMr   r   r   rJ   r^   rk   rl   r   r   r   r   <module>   s4   
	 %'