The DS2408 works well with the Raspberry Pi using 1-wire, I am using a 8 port relay from http://denkovi.com.
To turn a relay on all you have to do is set the correct bit in the "/sys/bus/w1/devices/29-xxxxx/output" file, however to ensure you don't change any of the other relays it is best to read "/sys/bus/w1/devices/29-xxxx/state" and OR or XOR to turn a relay on or off.
Here is a VERY basic python script (I am by no means a programmer):
#!/usr/bin/python
import sys
from time import sleep
readfile = "/sys/bus/w1/devices/29-xxxxx/state"
writefile = "/sys/bus/w1/devices/29-xxxxx/output"
def getTheState():
try:
f = open(readfile, 'rb')
while True:
binarycontent = f.read(-1)
if not binarycontent:
break
mynum = int.from_bytes(binarycontent,byteorder=sys.byteorder)
f.close()
except IOError:
print('Error While Opening the file!')
return(mynum)
def turnOnRelay(theRelay,theState):
theTag = theRelay
# Turn On Relay
if theTag == 1 :
tagMask = 0b11111110
elif theTag == 2 :
tagMask = 0b11111101
elif theTag == 3 :
tagMask = 0b11111011
elif theTag == 4 :
tagMask = 0b11110111
elif theTag == 5 :
tagMask = 0b11101111
elif theTag == 6 :
tagMask = 0b11011111
elif theTag == 7 :
tagMask = 0b10111111
elif theTag == 8 :
tagMask = 0b01111111
else:
print("Error")
theNewState = theState & tagMask
print("theNewState",theNewState)
return theNewState
def turnOffRelay(theRelay,theState):
theTag = theRelay
# Turn Off Relay
if theTag == 1 :
tagMask = 0b00000001
elif theTag == 2 :
tagMask = 0b00000010
elif theTag == 3 :
tagMask = 0b00000100
elif theTag == 4 :
tagMask = 0b00001000
elif theTag == 5 :
tagMask = 0b00010000
elif theTag == 6 :
tagMask = 0b00100000
elif theTag == 7 :
tagMask = 0b01000000
elif theTag == 8 :
tagMask = 0b10000000
else:
print("Error")
theNewState = theState ^ tagMask
print("theNewState",theNewState)
return theNewState
def updateTheState(theNewState):
try:
newFileBytes = [theNewState]
newFile = open(writefile, "wb")
# write to file
for byte in newFileBytes:
newFile.write(byte.to_bytes(1, byteorder='big'))
except:
print('Error While Opening the file!')
def main():
print("turn relay 1 on")
x = getTheState()
y = turnOnRelay(1,x)
updateTheState(y)
sleep(5)
print("turn relay 1 off")
x = getTheState()
y = turnOffRelay(1,x)
updateTheState(y)
if __name__ == '__main__':
main()
Good luck hope this helps.
j.