3
Z*eN/                 @   s   d Z ddljZddlZddlT ddlZddlZddlZddljZddl	m
Z
 G dd dZG dd dZG d	d
 d
eZG dd deZG dd deZG dd deZdS )z
Version: 221227

Diverse Shelly-Geraete setzen und abfragen

Shelly
- Geraet
-- Relais
-- ShellyMotion
-- ShellyUni
-- ShellyPlus1PM
    N)*)	errorcodec               @   s>   e Zd ZdddddZdd ZdedddZdd
dZdS )ShellyN)returnc             C   s   || _ || _d S )N)base_iplogger)selfr   r    r	    /var/home/smartHome/libShelly.py__init__   s    zShelly.__init__c             C   s   dj | jS )Nz.base_ip:{})formatr   )r   r	   r	   r
   __str__%   s    zShelly.__str__c             C   s   |d kr|| _ | j S )N)r   )r   r   r	   r	   r
   set*   s    z
Shelly.setFc             C   s  d}d}d}dj | j|}	zfytj|	dd}ddi}
|jd	|d|
 |j }|jd
kr|dk	r|dk	rd||f }ttj	|j
 }d| |
d< |jd	|d|
 |j }|jdkr|j }tj|}d}n*dj |j|j|	|}| jdkr| jj| W n tk
r~ } zht|tjkrBd|	 | }| jdkrn| jj| n,t|}|rn| jdkrn| jjd|	|| W Y dd}~X nX W d|r|j  X ||fS )zSend HTTP GET request FNz{}{}   )timeout
ConnectioncloseGETi  z%s:%szBasic %sAuthorization   Tz)Shelly.http_get: Error, {} {} http://{}{}z.Shelly.http_get: Timeout connecting to http://zError http GET: %s %s %s)r   r   httplibHTTPConnectionrequestgetresponsestatusstrbase64	b64encodeencodereadjsonloadsreasonr   warning	Exceptiontypesocketr   errordebugr   )r   idurlusernamepasswordZ	log_errorressuccessconnhostheadersrespZcomboauthbodyexr	   r	   r
   http_get1   sD    


(
zShelly.http_get)N)N)NNF)__name__
__module____qualname__r   r   r   r   r7   r	   r	   r	   r
   r      s   r   c               @   s6   e Zd ZdddZdd Zdd Zd	d
 Zdd ZdS )Geraetr   Nc             C   s8   || _ || _|| _|| _|| _d | _|d kr4|j| _d S )N)r*   typnameraumshellyr   )r   r*   r<   r=   r>   r?   r	   r	   r
   r   l   s    zGeraet.__init__c             C   s   dj | j| j| j| j| jS )Nz+.shelly:{} .id:{} .typ:{} .name:{} .raum:{})r   r?   r*   r<   r=   r>   )r   r	   r	   r
   r   y   s    zGeraet.__str__c             C   s   t | j| i}|S )N)r   r*   )r   dr	   r	   r
   dict~   s    zGeraet.dictc       
   	   C   s   ddddddddddd	d
dddddid}|j | jj dd }|d krf| jjdj| j| j dS d}xp|j D ]d\}}|j | jj |}|d kr| jjdj| j|| j dS ||| 7 }|d kr|t|7 }d}qtW | jj	| j|\}}	||	fS )Nz/relay/0zturn=onzturn=offzturn=toggleztimer=ison)uriEINAUSUMSTIMERZISONz/light/0zhelligkeit=zwhite=)rC   rD   rE   ZHELLZFARBErF   rG   STATUSr   )zSHSW-1zSHBDUO-1z
SHMOTION-1rC   u(   {}: Kommando uri für {} nicht definiert   ?u'   {}: Kommando {} für {} nicht definiert&rL   )
getr<   r   r(   r   r*   itemsr   r?   r7   )
r   ZkdosZCKDOSrC   cZkdoZparkr/   r.   r	   r	   r
   kommando   s<    zGeraet.kommandoc             C   s(   d}d}d}d }| j j| j|\}}d S )Nr   z/statusF)r?   r7   r*   )r   attrr.   rC   r/   r0   r	   r	   r
   r       s    zGeraet.read)r   r   N)r8   r9   r:   r   r   rA   rQ   r    r	   r	   r	   r
   r;   i   s
   
+r;   c                   sP   e Zd Zddd fddZedddZddd	d
ZdddddZ  ZS )Relaisr   NLager)r   c                s2   |d krdj ||}t j|d||| || _d S )NzShellyRelais{}.{}zSHSW-1)r   superr   lfd)r   r*   rV   r=   r>   r?   )	__class__r	   r
   r      s
    zRelais.__init__c             C   s:   | j j| jd\}}d}|r6|jdd| j jdd	}|S )
Nz/statusrI   Zrelays   rB      rL   )r?   r7   r*   rM   rV   )r   retr.   rB   r	   r	   r
   r      s
    zRelais.statusc             C   s    | j j| jdj| j\}}d S )Nz/relay/{}?turn=on)r?   r7   r*   r   rV   )r   r\   r.   r	   r	   r
   turn_on   s    zRelais.turn_onc             C   s    | j j| jdj| j\}}d S )Nz/relay/{}?turn=off)r?   r7   r*   r   rV   )r   r   r\   r.   r	   r	   r
   turn_off   s    zRelais.turn_off)r   NrT   N)N)	r8   r9   r:   r   intr   r]   r^   __classcell__r	   r	   )rW   r
   rS      s   	
rS   c                   s(   e Zd Zd fdd	ZdddZ  ZS )	ShellyMotionNrT   c                s0   |d krdj |}t j|d||| d | _d S )NzShellyMotion{}z
SHMOTION-2)r   rU   r   state)r   r*   r=   r>   r?   )rW   r	   r
   r      s    
zShellyMotion.__init__c          	   C   s   | j jdj| | jj| jd\}}|d kr|d kr| j d krZ| j jdj||t| y|j|jdd}W q   d	}Y qX n| j jdj| ||fS )
Nz> ShellyMotion.status({})z/statuszstatus {}: {} ({})valuerI   rX   zret: {}rL   rZ   )	r   r)   r   r?   r7   r*   r&   rM   r(   )r   rR   r\   r.   r	   r	   r
   r      s    
zShellyMotion.status)NrT   N)N)r8   r9   r:   r   r   r`   r	   r	   )rW   r
   ra      s   ra   c                   s2   e Zd Zd Zd	 fdd	Zdd Zdd Z  ZS )
	ShellyUniNrT   c                s0   |d krdj |}t j|d||| d | _d S )NzShellyUni{}zSHUNI-1)r   rU   r   rb   )r   r*   r=   r>   r?   )rW   r	   r
   r      s    
zShellyUni.__init__c             C   s@   | j jd | jj| jd\}}|r&n| j jdj| ||fS )Nz> ShellyUni.status()z/statuszShellUni.status.ret: {})r   r)   r?   r7   r*   r(   r   )r   r\   r.   r	   r	   r
   r     s    zShellyUni.statusc          	   C   sJ   | j jd | j \}}d}|rFy|d d d }W n   d}Y nX |S )	Nz> ShellyUni.voltage()rI   Zadcsr   voltagerX   rL   rZ   )r   r)   r   )r   r\   r.   Zvoltr	   r	   r
   re     s    
zShellyUni.voltage)NrT   N)r8   r9   r:   __doc__r   r   re   r`   r	   r	   )rW   r
   rd      s   rd   c                   sJ   e Zd Zd Zd fdd	Zdd Zdd Zd	d
 Zdd Zdd Z	  Z
S )ShellyPlus1PMNrT   c                s0   |d krdj |}t j|d||| d | _d S )NzShellyPlus1PM{}z
SHPLUS-1PM)r   rU   r   rb   )r   r*   r=   r>   r?   )rW   r	   r
   r   *  s    
zShellyPlus1PM.__init__c             C   s   | j j| jd\}}i }|r|jd|d< |jd|d< |jd|d< |jd|d	< |jd
jdd d d |d< |jdjd|d< | jjdj| j| n| jjdj| j| ||fS )uC  
        ret: returncode
        res: {}
            on      :   an?
            aktP    :   aktuelle Leistung [W]
            aktU    :   aktuelle Spannug [V]
            actI    :   aktueller Strom [I]
            minW    :   Arbeit vorletzte Minute [mWh/min] -> W
            devT    :   Gerätetemperatur [°C]
        z/rpc/Switch.GetStatus?id=0outputonZapowerZaktPre   ZaktUcurrentZaktIZaenergyZ	by_minuterI   <   i  minWZtemperatureZtCZdevTz> ShellyPlus1PM.status(): {} {}z  Sh+1PM: {}, status(), ret: {})	r?   r7   r*   rM   r   r)   r   r=   r(   )r   r\   r.   resultr	   r	   r
   r   2  s     zShellyPlus1PM.statusc             C   sN   | j j| jd\}}|r0| jjdj| j| n| jjdj| j| ||fS )Nz/rpc/Switch.Set?id=0&on=truezSh+1PM: {}, on(), ret: {})r?   r7   r*   r   r(   r   r=   )r   r\   r.   r	   r	   r
   ri   Q  s    zShellyPlus1PM.onc             C   s8   | j j| jd\}}|rn| jjdj| j| ||fS )Nz/rpc/Switch.Set?id=0&on=falsezSh+1PM: {}, off(), ret: {})r?   r7   r*   r   r(   r   r=   )r   r\   r.   r	   r	   r
   off]  s
    zShellyPlus1PM.offc             C   s&   | j  \}}|r|d }nd}||fS )Nri   rJ   )r   )r   r\   r.   ri   r	   r	   r
   rB   h  s
    
zShellyPlus1PM.isonc          	   C   s8   | j  \}}d}|r4y|jd}W n   d}Y nX |S )NrI   rl   rX   rL   rZ   )r   rM   )r   r\   r.   Zwattr	   r	   r
   leistungt  s    
zShellyPlus1PM.leistung)NrT   N)r8   r9   r:   rf   r   r   ri   rn   rB   ro   r`   r	   r	   )rW   r
   rg   &  s   rg   )rf   http.clientclientr   loggingmylib2r!   r'   r   mysql.connectorr   r   r;   rS   ra   rd   rg   r	   r	   r	   r
   <module>   s   

MS#*