dbus_mqtt.py 文件源码

python
阅读 86 收藏 0 点赞 0 评论 0

项目:dbus-mqtt 作者: victronenergy 项目源码 文件源码
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)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号