Dr. Arne JachensDr. Arne Jachens

Heating and Ventilation Control

HvcWifiRelay

Keine Erläuterungen gefunden.

import  urllib.request
import  os.path

class HvcWifiRelay:
    def  __init__(self, debug=False):
        self.debug = debug
        self.IPs = {}
        #self.IPs["r01"] = "http://192.168.xxx.xxx"
        self.IPs["OG4"] = "http://192.168.178.120" #Kinderzimmer 1
        self.IPs["LC1"] = "http://192.168.178.122" #Aussenbeleuchtung

        self.logPath = "./LogDir/"
        keys = self.IPs.keys()
        for  k in keys:
            HvcWifiRelay.actual[k] = 0
            HvcWifiRelay.last[k] = 0
            
    def  switch(self,state):
        """
        Switch the state of relays according to input,
        'state' is a dictionary with same keys as  'IPs'.
        """
        keys = self.IPs.keys()
        for  k in keys:
            if state[k]=="on" or state[k]==1 or state[k]==True:
                HvcWifiRelay.actual[k] = 1
                url = self.IPs[k] + "/relay/0?turn=on"
            else:
                HvcWifiRelay.actual[k] = 0
                url = self.IPs[k] + "/relay/0?turn=off"
        
            if self.debug:
                print(url)

            try:
                with urllib.request.urlopen(url) as  response:
                    html = response.read()
                if self.debug:
                    print(html)
            except:
                continue
                
        #url["on"]  = "http://192.168.xxx.xxx/relay/0?turn=on"
        #url["off"] = "http://192.168.xxx.xxx/relay/0?turn=off"

    def  writeLog(self, today, hour, minute, relayDict={}, doWrite=False):
        #check for  updated values
        anyChange = False
        keys = self.IPs.keys()

        for  k in keys:
            if HvcWifiRelay.last[k]!=HvcWifiRelay.actual[k]:
                anyChange = True
                HvcWifiRelay.last[k] = HvcWifiRelay.actual[k]

        if anyChange or doWrite:
            file = self.logPath + today + "_relay.dat"
            if os.path.exists(file):
                #append to file
                fp = open(file, 'a', encoding='utf-8')
            else:
                #create file with header
                fp = open(file, 'w', encoding='utf-8')
                myStr = " #"
                for  k in keys:
                    myStr = myStr +  "\t" + k
                fp.write(myStr+"\n")
                try:
                    relayDictInv = {}
                    for  k in keys:
                        relayDictInv[relayDict[k]] = k 
                        myStr = " #"
                        for  k in keys:
                            myStr = myStr +  "\t" + relayDictInv[k]
                            fp.write(myStr+"\n")
                except:
                    print("Warning: relayDict not set")
                    
            myStr = hour +":"+ minute
            for  k in keys:
                myStr = myStr +  "\t" + '{0:1.0f}'.format(HvcWifiRelay.actual[k])

            fp.write(myStr+"\n")
            fp.close()
                
        return anyChange
               
            
#persistant variables
HvcWifiRelay.actual={}
HvcWifiRelay.last={}


if __name__ == "__main__":
    import   time
    from datetime import   datetime
    next_call = time.time()
    myRelay = HvcWifiRelay(True)
    
    #toggle relay 5 times
    for  i in range(0,10):
        if i % 2 ==1:
            state = {"OG4": "off"}
        else:
            state = {"OG4": "on"}
            
        myRelay.switch(state)

        now    = datetime.now()
        today  = now.strftime("%Y-%m-%d")
        hour   = now.strftime("%H")
        minute = now.strftime("%M")
    
        myRelay.writeLog(today, hour, minute)
        #wait 2 seconds to proceed
        next_call = next_call+30;
        time.sleep(next_call - time.time())

Index of Library

1EnergyManager.py
2HvcControl.py
3HvcHCSR04ultrasonic.py
4HvcLightControl.py
5HvcMain.py
6HvcMotorDriver.py
7HvcMqtt.py
8HvcOneWire.py
9HvcOperationMode.py
10HvcRaw2phys.py
11HvcReadSPI.py
12HvcSendI2C.py
13HvcSetGPIO.py
14HvcTables.py
15HvcWeather.py
16HvcWifiRelay.py
17makeDoc.py

Der gesamte Sourcecode darf gemäß GNU General Public License weiterverbreitet werden.