diff --git a/README.md b/README.md index 1bb1c2ecf502d0e296ec48237fe70b793b4e2b99..fc76521683281695307e24fbe922cd2be06f3aca 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ mqtt_bridge provides a functionality to bridge between ROS and MQTT in bidirecti ## Principle -`mqtt_bridge` uses ROS message as its protocol. Messages from ROS are selialized by json (or messagepack) for MQTT, and messages from MQTT are deselialized for ROS topic. So MQTT messages should be ROS message compatible. (We use `rosbridge_library.internal.message_conversion` for message conversion.) +`mqtt_bridge` uses ROS message as its protocol. Messages from ROS are serialized by json (or messagepack) for MQTT, and messages from MQTT are deserialized for ROS topic. So MQTT messages should be ROS message compatible. (We use `rosbridge_library.internal.message_conversion` for message conversion.) This limitation can be overcome by defining custom bridge class, though. @@ -114,13 +114,13 @@ See `mqtt_bridge.mqtt_client` for detail. If `mqtt/private_path` parameter is set, leading `~/` in MQTT topic path will be replaced by this value. For example, if `mqtt/pivate_path` is set as "device/001", MQTT path "~/value" will be converted to "device/001/value". -### selializer and deselializer +### serializer and deserializer -`mqtt_bridge` uses `json` as a selializer in default. But you can also configure other selializers. For example, if you want to use messagepack for selialization, add following configuration. +`mqtt_bridge` uses `json` as a serializer in default. But you can also configure other serializers. For example, if you want to use messagepack for serialization, add following configuration. ``` yaml -selializer: msgpack:dumps -deselializer: msgpack:loads +serializer: msgpack:dumps +deserializer: msgpack:loads ``` ### bridges diff --git a/config/demo_params.yaml b/config/demo_params.yaml index 6ac90efdfb394134814e38912dd717ba6193263a..bf9943a3a392b1acba3ad25832a08f69844ea458 100644 --- a/config/demo_params.yaml +++ b/config/demo_params.yaml @@ -6,8 +6,8 @@ mqtt: port: 1883 keepalive: 60 private_path: device/001 -selializer: msgpack:dumps -deselializer: msgpack:loads +serializer: msgpack:dumps +deserializer: msgpack:loads bridge: # ping pong - factory: mqtt_bridge.bridge:RosToMqttBridge diff --git a/src/mqtt_bridge/app.py b/src/mqtt_bridge/app.py index 7f5a1dfa52929a73baae0880701dcad56e233ebc..ec9233889fc0e12aa63bff70765441e0c1f24965 100644 --- a/src/mqtt_bridge/app.py +++ b/src/mqtt_bridge/app.py @@ -10,15 +10,15 @@ from .mqtt_client import create_private_path_extractor from .util import lookup_object -def create_config(mqtt_client, selializer, deselializer, mqtt_private_path): - if isinstance(selializer, basestring): - selializer = lookup_object(selializer) - if isinstance(deselializer, basestring): - deselializer = lookup_object(deselializer) +def create_config(mqtt_client, serializer, deserializer, mqtt_private_path): + if isinstance(serializer, basestring): + serializer = lookup_object(serializer) + if isinstance(deserializer, basestring): + deserializer = lookup_object(deserializer) private_path_extractor = create_private_path_extractor(mqtt_private_path) def config(binder): - binder.bind('selializer', selializer) - binder.bind('deselializer', deselializer) + binder.bind('serializer', serializer) + binder.bind('deserializer', deserializer) binder.bind(mqtt.Client, mqtt_client) binder.bind('mqtt_private_path_extractor', private_path_extractor) return config @@ -41,13 +41,13 @@ def mqtt_bridge_node(): mqtt_client_factory = lookup_object(mqtt_client_factory_name) mqtt_client = mqtt_client_factory(mqtt_params) - # load serializer and deselializer - selializer = params.get('selializer', 'json:dumps') - deselializer = params.get('deselializer', 'json:loads') + # load serializer and deserializer + serializer = params.get('serializer', 'json:dumps') + deserializer = params.get('deserializer', 'json:loads') # dependency injection config = create_config( - mqtt_client, selializer, deselializer, mqtt_private_path) + mqtt_client, serializer, deserializer, mqtt_private_path) inject.configure(config) # configure and connect to MQTT broker diff --git a/src/mqtt_bridge/bridge.py b/src/mqtt_bridge/bridge.py index 2aa22d9a3fba8f696b18e19c78ed055fea1f08b8..26c4095e81f964b4e451a1c26c7d9c0a922ba93c 100644 --- a/src/mqtt_bridge/bridge.py +++ b/src/mqtt_bridge/bridge.py @@ -38,14 +38,14 @@ class Bridge(object): u""" Bridge base class :param mqtt.Client _mqtt_client: MQTT client - :param _selialize: message selialize callable - :param _deselialize: message deselialize callable + :param _serialize: message serialize callable + :param _deserialize: message deserialize callable """ __metaclass__ = ABCMeta _mqtt_client = inject.attr(mqtt.Client) - _selialize = inject.attr('selializer') - _deselialize = inject.attr('deselializer') + _serialize = inject.attr('serializer') + _deserialize = inject.attr('deserializer') _extract_private_path = inject.attr('mqtt_private_path_extractor') @@ -73,7 +73,7 @@ class RosToMqttBridge(Bridge): self._last_published = now def _publish(self, msg): - payload = bytearray(self._selialize(extract_values(msg))) + payload = bytearray(self._serialize(extract_values(msg))) self._mqtt_client.publish(topic=self._topic_to, payload=payload) @@ -121,7 +121,7 @@ class MqttToRosBridge(Bridge): :param mqtt.Message mqtt_msg: MQTT Message :return rospy.Message: ROS Message """ - msg_dict = self._deselialize(mqtt_msg.payload) + msg_dict = self._deserialize(mqtt_msg.payload) return populate_instance(msg_dict, self._msg_type())