[英]Hasseb USB DALI Master & python library python-dali
我們有Hasseb USB Dali Master並嘗試使用python庫(github.com/sde1000/python-dali)。 但是“示例”部分中的代碼不起作用。
我們使用了Armbian Linux(基於Ubuntu的操作系統),已安裝了庫https://github.com/onitake/daliserver 。
我們嘗試分別啟動set_single.py。
$sudo python set_single.py
Traceback (most recent call last):
File "set_single.py", line 25, in <module> d.send(cmd)
File "build/bdist.linux-armv7l/egg/dali/driver/daliserver.py", line 43, in send
File "/usr/lib/python2.7/socket.py", line 575, in create_connection raise err
socket.error: [Errno 111] Connection refused
並嘗試在另一個終端中啟動dalliserver。
$ sudo python server.py
('Connection address_:', ('127.0.0.1', 43653))
Traceback (most recent call last):
File "server.py", line 14, in <module>
s.bind((TCP_IP, TCP_PORT))
File "/usr/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 98] Address already in use
(啟動set_single.py時發生此錯誤)
$ sudo python set_single.py
Traceback (most recent call last):
File "set_single.py", line 25, in <module>
d.send(cmd)
File "build/bdist.linux-armv7l/egg/dali/driver/daliserver.py", line 66, in send
File "build/bdist.linux-armv7l/egg/dali/driver/daliserver.py", line 84, in unpack_response
struct.error: unpack requires a string argument of length 4
文件set_single.py
from dali.address import Broadcast
from dali.address import Short
from dali.gear.general import DAPC
from dali.driver.daliserver import DaliServer
import sys
if __name__ == "__main__":
addr = Broadcast()
level = int(150)
d = DaliServer("localhost", 55825 )
cmd = DAPC(addr, level)
d.send(cmd)
文件server.py導入套接字
TCP_IP = '127.0.0.1'
TCP_PORT = 55825
BUFFER_SIZE = 20
while True:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()
try:
print("Connection address_:", addr)
while 1:
conn.setblocking(0)
conn.settimeout(20.0)
data = conn.recv(BUFFER_SIZE)
if not data:
break
stream = ":".join("{:02x}".format(ord(chr(c))) for c in data)
print("received data: [{1}] {0}".format(stream, len(data)))
conn.send(b"\x02\xff\x00\x00")
except:
pass
conn.close()
發生該錯誤是因為DALI響應不包含4個字節。 我將daliserver.py代碼的底部更改為如下所示:
response = None
if struct.calcsize(result) != 4:
ver, status, rval, pad = struct.unpack("BBBB", result)
if command._response:
if status == 0:
response = command._response(None)
elif status == 1:
response = command._response(dali.frame.BackwardFrame(rval))
elif status == 255:
# This is "failure" - daliserver seems to be reporting
# this for a garbled response when several ballasts
# reply. It should be interpreted as "Yes".
response = command._response(dali.frame.BackwardFrameError(255))
else:
raise CommunicationError("status was %d" % status)
return response
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.