I try to add shift-register 75hc595 support in domoticz on a Pi.
I tryed this :
Code: Select all
# ShitfRegister Plugin
#
# Author: Neutrino, 2016
#
"""
<plugin key="ShiftPi" name="Shitf Register 74HC595 Raspberry" author="neutrino" version="1.0.0" wikilink="">
<params>
<param field="Mode1" label="SER (DS) Pin" width="30px" required="true" default="25"/>
<param field="Mode2" label="RCLK (ST_CP) Pin" width="30px" required="true" default="24"/>
<param field="Mode3" label="SRCLK (SH_CP) Pin" width="30px" required="true" default="23"/>
<param field="Mode4" label="Number of Shift Registers" width="30px" required="true" default="1"/>
<param field="Mode6" label="Debug" width="75px">
<options>
<option label="True" value="Debug"/>
<option label="False" value="Normal" default="true" />
</options>
</param>
</params>
</plugin>
"""
import Domoticz
import os
#import RPi.GPIO as GPIO
class BasePlugin:
enabled = True
def __init__(self):
#self.var = 123
return
def onStart(self):
Domoticz.Log("onStart called")
if Parameters["Mode6"] == "Debug":
Domoticz.Debugging(1)
Domoticz.Log("On Start SR")
i=len(Devices)
if (len(Devices)<int(Parameters["Mode4"]*8)):
while i< int(Parameters["Mode4"])*8 :
Domoticz.Device(Name="SR Pin "+str(i), Unit=i,Type=17, Switchtype=0).Create()
i += 1
os.system("sudo /usr/local/bin/gpio mode "+Parameters["Mode1"]+" out")
os.system("sudo /usr/local/bin/gpio mode "+Parameters["Mode2"]+" out")
os.system("sudo /usr/local/bin/gpio mode "+Parameters["Mode3"]+" out")
Domoticz.Heartbeat(10)
DumpConfigToLog()
return True
def onStop(self):
Domoticz.Log("onStop called")
def onCommand(self, Unit, Command, Level, Hue):
Domoticz.Log("Unit : "+ str(Unit))
Domoticz.Log("Command : "+ str(Command))
i=0
com = 0
if Command == 'On':
com = 1
Devices[Unit].Update(com,'')
os.system("sudo /usr/local/bin/gpio write "+Parameters["Mode2"]+" 0")
while i< int(Parameters["Mode4"])*8 :
os.system("sudo /usr/local/bin/gpio write "+Parameters["Mode3"]+" 0")
if Unit == i:
os.system("sudo /usr/local/bin/gpio write "+Parameters["Mode1"]+" "+str(com))
Domoticz.Debug("sudo /usr/local/bin/gpio write "+Parameters["Mode1"]+" "+str(com))
else:
os.system("sudo /usr/local/bin/gpio write "+Parameters["Mode1"]+" "+str(Devices[i].nValue))
Domoticz.Debug("sudo /usr/local/bin/gpio write "+Parameters["Mode1"]+" "+str(Devices[i].nValue))
os.system("sudo /usr/local/bin/gpio write "+Parameters["Mode3"]+" 1")
i += 1
os.system("sudo /usr/local/bin/gpio write "+Parameters["Mode2"]+" 1")
return True
def onHeartbeat(self):
Domoticz.Log("onHeartbeat called")
global _plugin
_plugin = BasePlugin()
def onStart():
global _plugin
_plugin.onStart()
def onStop():
global _plugin
_plugin.onStop()
def onCommand(Unit, Command, Level, Hue):
global _plugin
_plugin.onCommand(Unit, Command, Level, Hue)
def onHeartbeat():
global _plugin
_plugin.onHeartbeat()
# Generic helper functions
def DumpConfigToLog():
for x in Parameters:
if Parameters[x] != "":
Domoticz.Debug( "'" + x + "':'" + str(Parameters[x]) + "'")
Domoticz.Debug("Device count: " + str(len(Devices)))
for x in Devices:
Domoticz.Debug("Device: " + str(x) + " - " + str(Devices[x]))
Domoticz.Debug("Device ID: '" + str(Devices[x].ID) + "'")
Domoticz.Debug("Device Name: '" + Devices[x].Name + "'")
Domoticz.Debug("Device nValue: " + str(Devices[x].nValue))
Domoticz.Debug("Device sValue: '" + Devices[x].sValue + "'")
Domoticz.Debug("Device LastLevel: " + str(Devices[x].LastLevel))
return
Also, it could be used to force the 74hc595 states in case of parasites.
Actually, it works. But sometimes, OnCommand is called up very quickly, and sometimes it takes 10 seconds...
I'm unable to use the RPi.GPIO library.
If I add :
Code: Select all
import RPi.GPIO as GPIO
