From 367832330eb8029ca0a7f0a427b5030dbe0223fc Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Thu, 31 Aug 2023 14:31:31 +0000 Subject: [PATCH] Add support for origin info (#462) * Add support for origin info * Fix url and name * Update release drafter gh action --- .github/workflows/release-drafter.yml | 20 ++++++++++++++++- hacs.json | 2 +- python_scripts/shellies_discovery.py | 31 +++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 494d9ac2..e7fae02a 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -8,7 +8,25 @@ on: jobs: update_release_draft: runs-on: ubuntu-latest + name: Release Drafter steps: - - uses: release-drafter/release-drafter@v5.24.0 + - name: Checkout the repository + uses: actions/checkout@v3.5.3 + with: + fetch-depth: 0 + + - name: Find Version + id: version + run: | + declare -i newpost + version=$(cat python_scripts/shellies_discovery.py | grep 'VERSION' | head -1 | sed -n 's/VERSION = "\(.*\)"/\1/p') + echo Version from shellies_discovery.py: $version + echo "::set-output name=version::$version" + + - name: Run Release Drafter + uses: release-drafter/release-drafter@v5.24.0 + with: + tag: ${{ steps.version.outputs.version }} + name: Version ${{ steps.version.outputs.version }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/hacs.json b/hacs.json index 4270f47e..dd9d9909 100644 --- a/hacs.json +++ b/hacs.json @@ -1,6 +1,6 @@ { "name": "Shellies Discovery", - "homeassistant": "2023.8.0", + "homeassistant": "2023.9.0b0", "zip_release": true, "filename": "shellies-discovery.zip" } diff --git a/python_scripts/shellies_discovery.py b/python_scripts/shellies_discovery.py index 8b5c6c2e..b2779225 100644 --- a/python_scripts/shellies_discovery.py +++ b/python_scripts/shellies_discovery.py @@ -1,4 +1,5 @@ """This script adds MQTT discovery support for Shellies devices.""" +VERSION = "4.5.0" ATTR_ICON = "icon" ATTR_MANUFACTURER = "Allterco Robotics" @@ -156,6 +157,7 @@ KEY_OFF_DELAY = "off_dly" KEY_OPTIMISTIC = "opt" KEY_OPTIONS = "options" +KEY_ORIGIN = "o" KEY_PAYLOAD = "pl" KEY_PAYLOAD_AVAILABLE = "pl_avail" KEY_PAYLOAD_CLOSE = "pl_cls" @@ -191,6 +193,7 @@ KEY_STEP = "step" KEY_SUBTYPE = "stype" KEY_SUGGESTED_DISPLAY_PRECISION = "sug_dsp_prc" +KEY_SUPPORT_URL = "url" KEY_SW_VERSION = "sw" KEY_TEMP_STEP = "temp_step" KEY_TEMPERATURE_COMMAND_TEMPLATE = "temp_cmd_tpl" @@ -2413,6 +2416,11 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_MANUFACTURER: ATTR_MANUFACTURER, KEY_CONFIGURATION_URL: f"http://{host}/", } +origin_info = { + KEY_NAME: "Shellies Discovery", + KEY_SW_VERSION: VERSION, + KEY_SUPPORT_URL: "https://github.com/bieniu/ha-shellies-discovery", +} default_topic = f"shellies/{dev_id}/" @@ -2476,6 +2484,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_UNIQUE_ID: f"{dev_id}-{update}".lower(), KEY_QOS: qos, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } if battery_powered and model not in (MODEL_SHELLYDW, MODEL_SHELLYDW2): @@ -2515,6 +2524,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_QOS: qos, KEY_AVAILABILITY: availability, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } if number_options.get(KEY_ENTITY_CATEGORY): @@ -2548,6 +2558,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_QOS: qos, KEY_AVAILABILITY: availability, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } if switch_options.get(KEY_ENTITY_CATEGORY): @@ -2579,6 +2590,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_QOS: qos, KEY_AVAILABILITY: availability, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } if select_options.get(KEY_ENTITY_CATEGORY): @@ -2607,6 +2619,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_QOS: qos, KEY_AVAILABILITY: availability, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } if button_options.get(KEY_ENTITY_CATEGORY): @@ -2666,6 +2679,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_QOS: qos, KEY_AVAILABILITY: availability, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } payload.update(climate_entity_option) @@ -2718,6 +2732,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_OPTIMISTIC: str(optimistic).lower(), KEY_QOS: qos, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } if set_position_template: @@ -2758,6 +2773,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_UNIQUE_ID: f"{dev_id}-relay-{relay_id}".lower(), KEY_QOS: qos, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } else: @@ -2787,6 +2803,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_UNIQUE_ID: f"{dev_id}-relay-{sensor}-{relay_id}".lower(), KEY_QOS: qos, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } if sensor_options.get(KEY_SUGGESTED_DISPLAY_PRECISION): @@ -2836,6 +2853,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_UNIQUE_ID: f"{dev_id}-{make_id(sensor)}-{relay_id}".lower(), KEY_QOS: qos, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } if sensor_options.get(KEY_ENTITY_CATEGORY): @@ -2912,6 +2930,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_UNIQUE_ID: unique_id, KEY_QOS: qos, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } if sensor_options.get(KEY_SUGGESTED_DISPLAY_PRECISION): @@ -3014,6 +3033,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_UNIQUE_ID: unique_id, KEY_QOS: qos, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } @@ -3049,6 +3069,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_UNIQUE_ID: unique_id, KEY_QOS: qos, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } else: @@ -3085,6 +3106,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_UNIQUE_ID: unique_id, KEY_QOS: qos, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } else: @@ -3113,6 +3135,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_UNIQUE_ID: f"{dev_id}-{make_id(sensor)}".lower(), KEY_QOS: qos, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } if sensor_options.get(KEY_ICON): @@ -3197,6 +3220,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_UNIQUE_ID: unique_id, KEY_QOS: qos, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } else: @@ -3221,6 +3245,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_UNIQUE_ID: f"{dev_id}-color-{sensor}-{light_id}".lower(), KEY_QOS: qos, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } if sensor_options.get(KEY_ENTITY_CATEGORY): @@ -3259,6 +3284,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_UNIQUE_ID: f"{dev_id}-color-{sensor}-{light_id}".lower(), KEY_QOS: qos, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } if sensor_options.get(KEY_SUGGESTED_DISPLAY_PRECISION): @@ -3317,6 +3343,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_UNIQUE_ID: unique_id, KEY_QOS: str(qos), KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } @@ -3351,6 +3378,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_UNIQUE_ID: f"{dev_id}-white-{sensor}-{light_id}".lower(), KEY_QOS: qos, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } if sensor_options.get(KEY_ENTITY_CATEGORY): @@ -3389,6 +3417,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_UNIQUE_ID: f"{dev_id}-white-{sensor}-{light_id}".lower(), KEY_QOS: qos, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } if sensor_options.get(KEY_SUGGESTED_DISPLAY_PRECISION): @@ -3439,6 +3468,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_QOS: qos, KEY_AVAILABILITY: availability, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } if number_options.get(KEY_ENTITY_CATEGORY): @@ -3473,6 +3503,7 @@ def mqtt_publish(topic, payload, retain, json=False): KEY_UNIQUE_ID: f"{dev_id}-emeter-{sensor}-{meter_id}".lower(), KEY_QOS: qos, KEY_DEVICE: device_info, + KEY_ORIGIN: origin_info, "~": default_topic, } if sensor_options.get(KEY_SUGGESTED_DISPLAY_PRECISION):