Parcourir la source

add: VDMX virtual dimmer as DMXCH-obj (test on MASTER-SPEED)

micha il y a 2 ans
Parent
commit
8b5e64a04a
1 fichiers modifiés avec 118 ajouts et 53 suppressions
  1. 118 53
      _console.py

+ 118 - 53
_console.py

@@ -226,55 +226,6 @@ class _MASTER():
 size_master  = _MASTER("SIZE")
 speed_master = _MASTER("SPEED")
 
-
-class HTP_MASTER():
-    """functional implementation as class for namespace encapsulation
-
-    """
-    def __init__(self):
-        self.data = OrderedDict() 
-        #self.data[1] = {"DMX":[1,2,3],"VALUE":80, "LIMIT":255}
-        #self.data[2] = {"DMX":[12,13,22],"VALUE":70, "LIMIT":255}
-        #self.data[3] = {"DMX":[22,23,24],"VALUE":99, "LIMIT":255}
-
-    def _list_by_dmx(self,_dmx=0):
-        data = OrderedDict()
-        for i,link in self.data.items(): # enumerate(self.data):
-            if _dmx in link["DMX"]:
-                #print( "_list_by_dmx",i,link)
-                data[i] = link
-        return data
-
-
-    def dmx_by_id(self,_id=0):
-        #print("dmx by master-id:",_id)
-
-        if _id in self.data:
-            for i,link in self.data[_id].items():
-                #print("dmx_by_id", i,link)
-                return (i,link)
-
-        return 0,{}
-
-#    def master_by_dmx(self,dmx=0):
-#        #print("master of dmx:",dmx)
-#        val=0
-#        flag = 0
-#        data = self._list_by_dmx(dmx)
-#        for i,link in data.items():
-#
-#            #print("master_by_dmx", i,link)
-#            if link["VALUE"] > val:
-#                #print("master_by_dmx", i,link)
-#                val = link["VALUE"]
-#                flag=1
-#        if flag:
-#            return val/255.
-#        else:
-#            return 1.  # default
-
-htp_master = HTP_MASTER()
-
 exe_master = []
 exe_master.append({"SIZE":100,"SPEED":100,"id":12,"link-ids":[2]})
 
@@ -667,10 +618,7 @@ for i in range(512*3):
     Bdmx.append( DMXCH(i) )
     #print(type(dmx[i]))
 
-Vdmx = OrderedDict() # virtual dmx chanel
 _id = 1
-htp_master.data[_id] = {"DMX":[1,2,3],"VALUE":80, "LIMIT":255}
-Vdmx[_id] = DMXCH(_id) # v-master 1
 
 
 
@@ -685,6 +633,117 @@ def split_cmd(data):
     return cmds
 
 
+class VDMX():
+    """functional implementation as class for namespace encapsulation
+
+    """
+    def __init__(self):
+        self.data = OrderedDict() 
+        self.data[4] = {"DMX":[21,22,23],"VALUE":99, "LIMIT":255} #,"DMXCH":DMXCH("V4")}
+        for k,v in self.data.items():
+            pass
+            #dmxch = v["DMXCH"]
+            #dmxch.fade(10,0)
+            #dmxch.fx(size=200,speed=200,base="-") #self,xtype="sinus",size=40,speed=40,invert=0,width=100,start=0,offset=0,base="", clock=0,master=None):
+
+    def _list_by_dmx(self,_dmx=0):
+        data = OrderedDict()
+        for i,link in self.data.items(): # enumerate(self.data):
+            if _dmx in link["DMX"]:
+                #print( "_list_by_dmx",i,link)
+                data[i] = link
+        return data
+
+
+    def dmx_by_id(self,_id=0):
+        #print("dmx by master-id:",_id)
+
+        if _id in self.data:
+            for i,link in self.data[_id].items():
+                #print("dmx_by_id", i,link)
+                return (i,link)
+
+        return 0,{}
+
+    def by_dmx(self,clock,dmx):
+        #print("master of dmx:",dmx)
+        val=0
+        flag = 0
+        data = self._list_by_dmx(dmx)
+        for i,row in data.items():
+            if "DMXCH" not in row:
+                row["DMXCH"] = DMXCH("V{}".format(i))
+                row["DMXCH"].fade(255,0)
+
+            v = row["DMXCH"].next(clock)
+            #row["DMXCH"].fade(200,20)
+            if v >= val:
+                val = v
+                flag = 1
+        out = 1.
+        if val > 256:
+            val = 256
+        
+        if flag:
+            out = val/256.
+        else: 
+            out = 1
+        return out
+
+vdmx = VDMX()
+
+
+class HTP_MASTER():
+    """functional implementation as class for namespace encapsulation
+
+    """
+    def __init__(self):
+        self.data = OrderedDict() 
+        #self.data[1] = {"DMX":[1,2,3],"VALUE":80, "LIMIT":255}
+        #self.data[2] = {"DMX":[12,13,22],"VALUE":70, "LIMIT":255}
+        #self.data[3] = {"DMX":[22,23,24],"VALUE":99, "LIMIT":255}
+        self.data[4] = {"DMX":[22,23,24],"VALUE":99, "LIMIT":255,"DMXCH":DMXCH(4)}
+
+    def _list_by_dmx(self,_dmx=0):
+        data = OrderedDict()
+        for i,link in self.data.items(): # enumerate(self.data):
+            if _dmx in link["DMX"]:
+                #print( "_list_by_dmx",i,link)
+                data[i] = link
+        return data
+
+
+    def dmx_by_id(self,_id=0):
+        #print("dmx by master-id:",_id)
+
+        if _id in self.data:
+            for i,link in self.data[_id].items():
+                #print("dmx_by_id", i,link)
+                return (i,link)
+
+        return 0,{}
+
+    def val_by_dmx(self,dmx=0):
+        #print("master of dmx:",dmx)
+        val=0
+        flag = 0
+        data = self._list_by_dmx(dmx)
+        for i,link in data.items():
+
+            #print("master_by_dmx", i,link)
+            if link["VALUE"] > val:
+                #print("master_by_dmx", i,link)
+                val = link["VALUE"]
+                flag=1
+        out = 1.
+        if flag:
+            out = val/255.
+        
+        return out
+htp_master = HTP_MASTER()
+
+#htp_master.data[_id] = {"DMX":[1,2,3],"VALUE":80, "LIMIT":255,"DMXCH":DMXCH()}
+
 
 
 class Main():
@@ -726,8 +785,9 @@ class Main():
                     artnet = self.artnet[str(univ)]
                     artnet.dmx = xx
                 
-                htp_master._list_by_dmx(ii)
                 v = dmxch.next(t)
+                vv = vdmx.by_dmx(clock=i,dmx=ii+1)
+                v = v*vv
                 xx[i] = int(v)
             try:    
                 artnet.next()
@@ -768,6 +828,11 @@ def JCB(data): #json client input
                     print("CMD:",x)
                     if "SPEED-MASTER" == x["CMD"]:
                         speed_master.val(x["NR"],x["VALUE"])
+                        if x["NR"] == 2:
+                            vdmx.data[4]["DMXCH"].fade(x["VALUE"],3)#,clock=clock.time())
+                        if x["NR"] == 3:
+                            vdmx.data[4]["DMXCH"].fx(size=255,speed=x["VALUE"],base="-",offset=0)#xtype=xtype,size=size,speed=speed,invert=invert,width=width,start=start,offset=offset,base=base,clock=c,master=master_fx)
+
                     if "SIZE-MASTER" == x["CMD"]:
                         size_master.val(x["NR"],x["VALUE"])
                 else: