I'm trying to use Python-DBus to return an array of integers from one python script to another.
The DBus server looks like this:
def int_to_bytestring(number):
bytestring = number.to_bytes(4,'little')
return bytestring
def bytestring_to_int(bytestring):
return struct.unpack("<i", bytestring)[0]
@dbus.service.method('tld.domain.sub.classyfan', out_signature="ai")
def getTargetTemp(self):
global TargetTemp
print("TempController: getTargetTemp called: %s"%(TargetTemp))
tg = int_to_bytestring(TargetTemp)
toReturn = []
for t in tg:
toReturn.append(t)
return toReturn
The DBus client looks like this:
class TargetTemperatureChrc(Characteristic):
TEMP_UUID = '2c51d80c-b912-4100-bb39-939824930480'
def __init__(self, bus, index, service):
Characteristic.__init__(self, bus, index,self.TEMP_UUID,['read'],service)
self.service = service
def ReadValue(self, options):
try:
currentTarget = self.service.dbus_interface.getTargetTemp()
except Exception as err:
print("Error: %s"%(err))
print("Got Target Temp: %s"%(currentTarget))
return [currentTarget]
The problem is that I get an exception shown here:
Got Target Temp: dbus.Array([dbus.Int32(0), dbus.Int32(2), dbus.Int32(0), dbus.Int32(0)], signature=dbus.Signature('i'))
ERROR:dbus.service:Unable to append ([dbus.Array([dbus.Int32(0), dbus.Int32(2), dbus.Int32(0), dbus.Int32(0)], signature=dbus.Signature('i'))],) to message with signature ay: <class 'TypeError'>: an integer is required (got type dbus.Array)
I defined the out_signature as "ai" - which is DBus speak for array of integers.
What am I doing wrong? Thanks.