diff --git a/.travis.yml b/.travis.yml index b2d7d34..76c6891 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,8 +25,6 @@ jobs: # push image - > if [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then - docker images - echo $IMAGE_NAME docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" #1.0.0-arch @@ -57,8 +55,6 @@ jobs: # push image - > if [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then - docker images - echo $IMAGE_NAME docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" #1.0.0-arch diff --git a/config/config-sample.yaml b/config/config-sample.yaml index 5ee8909..5db843c 100644 --- a/config/config-sample.yaml +++ b/config/config-sample.yaml @@ -4,6 +4,8 @@ mqtt: username: username password: passw0rd prefix: home + #send report as json + json: False gateway: password: passw0rd diff --git a/docker-compose.yaml b/docker-compose.yaml index 0f04aef..be7edd1 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,6 +1,5 @@ aqara: image: monster1025/aqara-mqtt:1-armhf - dockerfile: Dockerfile-armhf container_name: aqara volumes: - "./config:/app/config" diff --git a/src/mqtt.py b/src/mqtt.py index 328db4b..5684de5 100644 --- a/src/mqtt.py +++ b/src/mqtt.py @@ -8,6 +8,7 @@ import json _LOGGER = logging.getLogger(__name__) class Mqtt: + event_based_sensors = ["switch", "cube"] username = "" password = "" server = "localhost" @@ -38,6 +39,7 @@ class Mqtt: self.server = mqttConfig.get("server", "localhost") self.port = mqttConfig.get("port", 1883) self.prefix = mqttConfig.get("prefix", "home") + self.json = mqttConfig.get("json", False) self._queue = Queue() self._threads = [] @@ -72,8 +74,6 @@ class Mqtt: model = sidprops.get("model",model) sid = sidprops.get("name",sid) - # _LOGGER.info("data is " + format(data)) - PATH_FMT = self.prefix + "/{model}/{sid}/{prop}" for key, value in data.items(): # fix for latest motion value if (model == "motion" and key == "no_motion"): @@ -82,18 +82,29 @@ class Mqtt: if (model == "magnet" and key == "no_close"): key="status" value="open" - # do not retain event-based sensors (like switches and cubes). - if (model in ["switch", "cube"]): + if (model in self.event_based_sensors): retain = False - # fix for rgb format if (key == "rgb" and self._is_int(value)): value = self._color_xiaomi_to_rgb(value) - topic = PATH_FMT.format(model=model, sid=sid, prop=key) - _LOGGER.info("Publishing message to topic " + topic + ": " + str(value) + ".") - self._client.publish(topic, payload=value, qos=0, retain=retain) + if self.json == True: + PATH_FMT = self.prefix + "/{model}/{sid}/json" + topic = PATH_FMT.format(model=model, sid=sid) + values = {} + values['sid'] = sid + for key, value in data.items(): + values[key] = value + jsondata = json.dumps(values) + _LOGGER.info("Publishing message to topic " + topic + ": " + str(jsondata) + ".") + self._client.publish(topic, payload=jsondata, qos=0, retain=retain) + else: + for key, value in data.items(): + PATH_FMT = self.prefix + "/{model}/{sid}/{prop}" + topic = PATH_FMT.format(model=model, sid=sid, prop=key) + _LOGGER.info("Publishing message to topic " + topic + ": " + str(value) + ".") + self._client.publish(topic, payload=value, qos=0, retain=retain) def _mqtt_on_connect(self, client, userdata, rc, unk): _LOGGER.info("Connected to mqtt server.")