簡體   English   中英

Hasseb USB DALI Master和python庫python-dali

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM