# -*- coding: utf-8 -*-
from modules import cbpi
from modules.core.props import Property
from modules.core.hardware import ActorBase
from modules.core.hardware import SensorPassive
import httplib2
from flask import request
import time

@cbpi.actor
class TimedRuehrwerk(ActorBase):

    a_url = Property.Text("Controller Address", configurable=True, default_value="http://192.168.178.11", description="Address of the controller. Do not add a trailing slash (ex: http://192.168.0.10)")
    b_on = Property.Text("On Command", configurable=True, default_value="control?cmd=event,TurnOn", description="Command to turn actor on")
    c_off = Property.Text("Off Command", configurable=True, default_value="control?cmd=event,TurnOff", description="Command to turn actor off")
    delay = Property.Number("Nachlaufdauer", configurable=True, default_value="10", description="Vorgabe der Sekunden für die Nachlaufzeit.")
    
    power = 100
    
    def send(self, command):
        try:
            h = httplib2.Http(".cache")
            ## Sending http command ""
            (resp, content) = h.request("%s/%s" % (self.a_url, command), "GET", headers={'cache-control':'no-cache'})
        except Exception as e:
            self.api.app.logger.error("FEHLER: Wlan-Steckdose reagiert nicht: %s/%s" % (self.a_url, command))

    def on(self, power=None):
        self.api.cache.get("actors").get(int(self.id)).timer = None
        self.send(self.b_on)
        if power is not None:
            self.set_power(power)

    def off(self):
        self.api.cache.get("actors").get(int(self.id)).timer = True
        self.api.cache.get("actors").get(int(self.id)).timer = int(time.time()) + int(self.delay) -1
        self.api.notify(headline="Rührwerk läuft nach", message="wenn die Nachlaufzeit abgelaufen ist, schaltet sich das Rührwerk aus.", type="info")
        self.sleep(int(self.delay))
        self.api.cache.get("actors").get(int(self.id)).timer = None
        self.send(self.c_off)

@cbpi.sensor
class SensorDelta(SensorPassive):

    sensordesc1 = "Sensor auswählen, der näher an der Wärmequelle ist."
    sensordesc2= "Sensor auswählen, der weiter von der Wärmequelle entfernt ist."
    sensor01 = Property.Sensor("Sensor 1", description=sensordesc1)
    sensor02 = Property.Sensor("Sensor 2", description=sensordesc2)
    spreizung = Property.Number("zul. Temperaturspreizung", configurable=True, default_value="2", description="Vorgabe des zulässigen Temperaturunterschiedes.")

    def init(self):
        self.sensors = []

        if isinstance(self.sensor01, unicode) and self.sensor01:
            self.sensors.append(int(self.sensor01))
        if isinstance(self.sensor02, unicode) and self.sensor02:
            self.sensors.append(int(self.sensor02))
	
    def stop(self):
        pass

    def read(self):
        self.tempdelta = float(0)
        self.temp1 = float(0)
        self.temp2 = float(0)
        self.temp1 = float(cbpi.cache.get("sensors")[self.sensors[0]].instance.last_value)
        self.temp2 = float(cbpi.cache.get("sensors")[self.sensors[1]].instance.last_value)
        
        if self.temp1 <= 0 or self.temp2 <=0:
            self.tempdelta = 0
        else:
            self.tempdelta = abs(self.temp1-self.temp2)

        if self.tempdelta > float(self.spreizung):
            ######################################
            self.api.switch_actor_on(super(TimedRuehrwerk, self), power=100)   ### HIER RUEHRWERK ANSTEUERN ###
            ######################################
            self.api.notify(headline="Delta-T mit " + str(self.tempdelta) + " K zu gross", message="hier wird das Ruehrwerk aktiviert", type="info")
        else:
            pass

        self.data_received(round(self.tempdelta, 2))

    def get_unit(self):
        if len(self.sensors) > 0:
            return cbpi.cache.get("sensors")[self.sensors[0]].instance.get_unit()
        else:
            return super(SensorBase, self).get_unit()