diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 127cd86..713fe25 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -7,14 +7,11 @@ on: branches: - "**" tags: - - "v*.*.*" + - "v*" pull_request: branches: - "main" -env: - RELEASE: 3.0.2 - jobs: docker: runs-on: ubuntu-latest @@ -33,9 +30,7 @@ jobs: type=ref,event=branch type=ref,event=pr type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}} - type=sha + type=raw,value=latest,enable={{is_default_branch}} - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx diff --git a/README.md b/README.md index 23b0289..24e3708 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ # Sofar2MQTT - Python +[![Build Docker Image](https://github.com/rjpearce/sofar2mqtt-python/actions/workflows/docker-image.yml/badge.svg)](https://github.com/rjpearce/sofar2mqtt-python/actions/workflows/docker-image.yml) +[![CodeQL](https://github.com/rjpearce/sofar2mqtt-python/actions/workflows/github-code-scanning/codeql/badge.svg)](https://github.com/rjpearce/sofar2mqtt-python/actions/workflows/github-code-scanning/codeql) + ## Overview This project provides an integration between Sofar inverters over RS485 and MQTT using Python diff --git a/requirements.txt b/requirements.txt index 2e45b74..33f3086 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ certifi==2023.7.22 charset-normalizer==2.1.1 click==8.1.3 -idna==3.3 +idna==3.7 minimalmodbus==2.1.1 paho-mqtt==1.6.1 pyserial==3.5 diff --git a/sofar-hyd-ep.json b/sofar-hyd-ep.json index e84e738..2554438 100644 --- a/sofar-hyd-ep.json +++ b/sofar-hyd-ep.json @@ -276,7 +276,7 @@ "name": "Desired Power", "min": -5000, "max": 5000, - "step": 50, + "step": 500, "initial": 0, "mode": "slider", "value_template": "{{ value_json.desired_power }}", @@ -762,7 +762,9 @@ "state_class": "measurement", "entity_category": "diagnostic", "value_template": "{{ value_json.battery_soc }}" - } + }, + "min": 0, + "max": 100 }, { "name": "battery_soh", diff --git a/sofar2mqtt-v2.py b/sofar2mqtt-v2.py index d85bc58..203330a 100644 --- a/sofar2mqtt-v2.py +++ b/sofar2mqtt-v2.py @@ -225,6 +225,14 @@ def read_and_publish(self): # Inverter will return maximum 16-bit integer value when data not available (eg. grid usage when grid down) if value == 65535: value = 0 + if 'min' in register: + if value < register['min']: + logging.error(f"Value for {register['name']}: {str(value)} is lower than min allowed value: {register['min']}. Ignoring value") + continue + if 'max' in register: + if value > register['max']: + logging.error(f"Value for {register['name']}: {str(value)} is greater than max allowed value: {register['max']}. Ignoring value") + continue if 'function' in register: if register['function'] == 'multiply': value = value * register['factor'] @@ -283,6 +291,10 @@ def publish_state(self): time.sleep(self.refresh_interval) def publish_mqtt_discovery(self): + if 'serial_number' not in self.data: + logging.error("Serial number could not be determined, skipping publish") + return False + sn = self.data['serial_number'] payload = { "device": { @@ -290,7 +302,7 @@ def publish_mqtt_discovery(self): "manufacturer": "Sofar2Mqtt-Python", "model": "Bridge", "name": "Sofar2Mqtt Python Bridge", - "sw_version": "1.35.3" + "sw_version": "3.0.3" }, "device_class": "connectivity", "entity_category": "diagnostic",