def __init__(self, mqtt_server=None, ca_cert=None, user=None, passwd=None, dbus_address=None,
keep_alive_interval=None, init_broker=False):
self._dbus_address = dbus_address
self._dbus_conn = (dbus.SessionBus() if 'DBUS_SESSION_BUS_ADDRESS' in os.environ else dbus.SystemBus()) \
if dbus_address is None \
else dbus.bus.BusConnection(dbus_address)
self._dbus_conn.add_signal_receiver(self._dbus_name_owner_changed, signal_name='NameOwnerChanged')
self._connected_to_cloud = False
# @todo EV Get portal ID from com.victronenergy.system?
self._system_id = get_vrm_portal_id()
# Key: D-BUS Service + path, value: topic
self._topics = {}
# Key: topic, value: last value seen on D-Bus
self._values = {}
# Key: service_type/device_instance, value: D-Bus service name
self._services = {}
# Key: short D-Bus service name (eg. 1:31), value: full D-Bus service name (eg. com.victronenergy.settings)
self._service_ids = {}
if init_broker:
self._registrator = MosquittoBridgeRegistrator(self._system_id)
self._registrator.register()
else:
self._registrator = None
self._dbus_conn.add_signal_receiver(self._on_dbus_value_changed,
dbus_interface='com.victronenergy.BusItem', signal_name='PropertiesChanged', path_keyword='path',
sender_keyword='service_id')
services = self._dbus_conn.list_names()
for service in services:
if service.startswith('com.victronenergy.'):
self._service_ids[self._dbus_conn.get_name_owner(service)] = service
self._scan_dbus_service(service, publish=False)
# Bus scan may take a log time, so start keep alive after scan
self._keep_alive_interval = keep_alive_interval
self._keep_alive_timer = None
MqttGObjectBridge.__init__(self, mqtt_server, "ve-dbus-mqtt-py", ca_cert, user, passwd)
评论列表
文章目录