From b0da920cf9408ae7516c366e3707495d51968df8 Mon Sep 17 00:00:00 2001 From: Francois JUMELLE Date: Sun, 26 Mar 2023 22:16:47 +0200 Subject: [PATCH] Initial release --- Domoticz.py | 162 ++++++++++++++++++++++++++++++++++++++++++++++++++++ run.py | 29 ++++++++++ 2 files changed, 191 insertions(+) create mode 100644 Domoticz.py create mode 100644 run.py diff --git a/Domoticz.py b/Domoticz.py new file mode 100644 index 0000000..5f07187 --- /dev/null +++ b/Domoticz.py @@ -0,0 +1,162 @@ +from datetime import datetime + +Images = {} +Devices = {} + +################### +class ImageObj(object): + ID = 0 + def __init__(self, obj): + pass + +class DzImage(object): + __name = None + def __init__(self, name): + if name[-4:].lower() != ".zip": + raise ValueError + self.__name = name[:-4] + + def Create(self): + global Images + Images[self.__name] = ImageObj(self) + +################### +class DeviceObj(object): + TimedOut = 0 + sValue = "" + nValue = 0 + Image = None + Name=None + + __unit=None + __type=None + __subtype=None + __switchtype=None + __options=None + __image=None + __used=None + + def __init__(self, Unit=None, Name=None, Type=None, Subtype=None, Switchtype=None, Options=None, Image=None, Used=None): + self.Name = Name + self.Image = Image + + self.__unit = Unit + self.__type = Type + self.__subtype = Subtype + self.__switchtype = Switchtype + self.__options = Options + self.__used = Used + + def __repr__(self): + res = "" + res = res + f"Unit : {self.__unit}" + res = res + f"Name : {self.__name}" + res = res + f"Type : {self.__type}" + res = res + f"Subtype : {self.__subtype}" + res = res + f"Switchtype: {self.__switchtype}" + res = res + f"Image : {self.Image}" + res = res + f"Options : {self.__options}" + res = res + f"Used : {self.__used}" + return res + + def Update(self, nValue=None, sValue=None, TimedOut=None, Image=None): + if nValue is not None and self.nValue != nValue: + self.nValue = nValue + if sValue is not None and self.sValue != sValue: + self.sValue = sValue + if TimedOut is not None and self.TimedOut != TimedOut: + self.TimedOut = TimedOut + if Image is not None and self.Image != Image: + self.Image = Image + + def Touch(self): + pass + +class DzDevice(object): + __data=None + + def __init__(self, **kwargs): + self.__data = kwargs + + def Create(self): + global Devices + Devices[self.__data["Unit"]] = DeviceObj(**self.__data) + +################### +class BaseDomoticz(object): + __debuglevel = 0 + __heartbeat = 30 + + def __init__(self): + pass + + @staticmethod + def __print(message): + print(datetime.now().strftime("%d/%m/%Y %H:%M:%S"), "-", message) + + @staticmethod + def Image(name): + return DzImage(name) + + @staticmethod + def Device(**kwargs): + return DzDevice(**kwargs) + + def Debugging(self, level): + self.__debuglevel = int(level) + + def Debug(self, message): + if self.__debuglevel > 0: + self.__print("[DEBUG] "+message) + + def Log(self, message): + self.__print("[LOG] "+message) + + def Status(self, message): + self.__print("[STATUS] "+message) + + def Error(self, message): + self.__print("[ERROR] "+message) + + def Heartbeat(self, duration): + self.__heartbeat = duration + + def GetHeartbeat(self): + return self.__heartbeat + +domo = BaseDomoticz() + +################### + +def Debugging(level): + """Debugging""" + domo.Debugging(level) + +def Debug(message): + """Debug""" + domo.Debug(message) + +def Log(message): + """Debugging""" + domo.Log(message) + +def Status(message): + """Status""" + domo.Status(message) + +def Error(message): + """Error""" + domo.Error(message) + +def Heartbeat(duration): + """Heartbeat""" + +def DomoticzImage(name): + """Image""" + return domo.Image(name) + +def Device(*args, **kwargs): + """Device""" + return domo.Device(**kwargs) + +################### diff --git a/run.py b/run.py new file mode 100644 index 0000000..2d788e3 --- /dev/null +++ b/run.py @@ -0,0 +1,29 @@ +import time +import Domoticz +import plugin + +Parameters = { + "Address":"localhost", + "Port":"8080", + "Username":"", + "Password":"", + "Mode1":"", + "Mode2":"", + "Mode3":"", + "Mode4":"", + "Mode5":"", + "Mode6":0 +} + +Images = Domoticz.Images +Devices = Domoticz.Devices + +with open("./plugin.py", 'rb') as fileobj: + exec(compile(fileobj.read(), "plugin.py", 'exec'), globals(), globals()) + +onStart() + +while True: + Domoticz.Log("## Plugin Heartbeat ##") + onHeartbeat() + time.sleep(Domoticz.domo.GetHeartbeat())