3

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.

PhilBot
  • 748
  • 18
  • 85
  • 173

0 Answers0