Skip to content

Commit

Permalink
🎉 Release of add-on Solarflow Control 0.9.0
Browse files Browse the repository at this point in the history
  • Loading branch information
dfigus committed Sep 22, 2024
1 parent 0398ba0 commit 65f31a9
Show file tree
Hide file tree
Showing 8 changed files with 360 additions and 0 deletions.
23 changes: 23 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,19 @@ https://github.com/dfigus/hassio-addons-beta

## Add-ons provided by this repository

### ✓ [Solarflow Control][addon-solarflow-control]

![Latest Version][solarflow-control-version-shield]
![Supports armhf Architecture][solarflow-control-armhf-shield]
![Supports armv7 Architecture][solarflow-control-armv7-shield]
![Supports aarch64 Architecture][solarflow-control-aarch64-shield]
![Supports amd64 Architecture][solarflow-control-amd64-shield]
![Supports i386 Architecture][solarflow-control-i386-shield]

Solarflow Control

[:books: Solarflow Control add-on documentation][addon-doc-solarflow-control]

### ✓ [TVHeadend][addon-tvheadend]

![Latest Version][tvheadend-version-shield]
Expand Down Expand Up @@ -72,6 +85,7 @@ You have several options to get them answered:
separate GitHub repository for each add-on. Please ensure you are creating
the issue on the correct GitHub repository matching the add-on.

- [Open an issue for the add-on: Solarflow Control][solarflow-control-issue]
- [Open an issue for the add-on: TVHeadend][tvheadend-issue]

For a general repository issue or add-on ideas [open an issue here][issue]
Expand Down Expand Up @@ -110,6 +124,15 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

[addon-solarflow-control]: https://github.com/dfigus/addon-solarflow-control/tree/v0.9.0
[addon-doc-solarflow-control]: https://github.com/dfigus/addon-solarflow-control/blob/v0.9.0/README.md
[solarflow-control-issue]: https://github.com/dfigus/addon-solarflow-control/issues
[solarflow-control-version-shield]: https://img.shields.io/badge/version-v0.9.0-blue.svg
[solarflow-control-aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg
[solarflow-control-amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg
[solarflow-control-armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg
[solarflow-control-armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg
[solarflow-control-i386-shield]: https://img.shields.io/badge/i386-yes-green.svg
[addon-tvheadend]: https://github.com/dfigus/addon-tvheadend/tree/v6.0.0
[addon-doc-tvheadend]: https://github.com/dfigus/addon-tvheadend/blob/v6.0.0/README.md
[tvheadend-issue]: https://github.com/dfigus/addon-tvheadend/issues
Expand Down
1 change: 1 addition & 0 deletions solarflow-control/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Initial Release of Solarflow-Control Add-On 🎉
91 changes: 91 additions & 0 deletions solarflow-control/DOCS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# Solarflow Control Home Assistant Add-On

[Solarflow Control][sf-control] is a full local control for Zendure Solarflow Hub components
developed by [Reinhard Weber (Brandstaedter)][reinhard-brandstaedter]. It has the following main
features:

- Read live telemetry data locally without the Zendure app and cloud
- Update the settings locally without the Zendure app and cloud
- Automatically control the charging/discharging and the power output based on the acutal consumption

## Prerequisites

In order to use this addon you need to disconnect your Solarflow Hub from the Zendure cloud and have it
only report to your local MQTT broker. You can disconnect it via the [Solarflow Bluetooth Manager][sf-bt-manager].

## Installation

The installation of this add-on is pretty straightforward and not different in
comparison to installing any other Home Assistant add-on.

1. Add this repository to have addons by Daniel Figus:
[![Home Assistant with repository URL pre-filled][my-ha-shield]][my-ha-repo]
1. Search for the "Solarflow Control" add-on in the Supervisor add-on store and install it.
1. Go to the configuration tab and configure the mandatory parameters
1. Start the "Solarflow Control" add-on.
1. Check the logs of the "Solarflow Control" to see if everything went well. Solarflow Control will
output status messages regularily

## Changelog & Releases

This repository keeps a change log using [GitHub's releases][releases]
functionality.

Releases are based on [Semantic Versioning][semver], and use the format
of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
based on the following:

- `MAJOR`: Incompatible or major changes.
- `MINOR`: Backwards-compatible new features and enhancements.
- `PATCH`: Backwards-compatible bugfixes and package updates.

## Support

Got questions?

You have several options to get them answered:

- The Home Assistant [Community Forum][forum].
- You could also [open an issue here][issue] GitHub.

## Authors & contributors

This repository is owned and maintained by [Daniel Figus][dfigus].

This has been possible thanks to the community add-ons initiative by [Frenck][frenck]

## License

MIT License

Copyright (c) 2024 Daniel Figus

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

[reinhard-brandstaedter]: https://github.com/reinhard-brandstaedter
[sf-control]: https://github.com/reinhard-brandstaedter/solarflow-control
[sf-bt-manager]: https://github.com/reinhard-brandstaedter/solarflow-bt-manager
[forum]: https://community.home-assistant.io/
[frenck]: https://github.com/frenck
[dfigus]: https://github.com/dfigus
[my-ha-shield]: https://my.home-assistant.io/badges/supervisor_add_addon_repository.svg
[issue]: https://github.com/dfigus/addon-solarflow-control/issues
[semver]: http://semver.org/spec/v2.0.0.htm
[my-ha-repo]: https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Fdfigus%2Fhassio-addons
[releases]: https://github.com/dfigus/addon-solarflow-control/releases
23 changes: 23 additions & 0 deletions solarflow-control/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Solarflow Control Home Assistant Add-On

[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]

Local control for Zendure Solarflow Hub.

## About

[Solarflow Control][sf-control] is a full local control for Zendure Solarflow Hub components
developed by [Reinhard Weber (Brandstaedter)][reinhard-brandstaedter]. It has the following main
features:

- Read live telemetry data locally without the Zendure app and cloud
- Update the settings locally without the Zendure app and cloud
- Automatically control the charging/discharging and the power output based on the acutal consumption

[reinhard-brandstaedter]: https://github.com/reinhard-brandstaedter
[sf-control]: https://github.com/reinhard-brandstaedter/solarflow-control
[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
[maintenance-shield]: https://img.shields.io/maintenance/yes/2024.svg
[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
[release-shield]: https://img.shields.io/badge/version-v0.9.0-blue.svg
[release]: https://github.com/dfigus/addon-solarflow-control/tree/v0.9.0
79 changes: 79 additions & 0 deletions solarflow-control/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: Solarflow Control
version: 0.9.0
slug: solarflow-control
description: Solarflow Control
url: https://github.com/dfigus/addon-solarflow-control
init: false
panel_icon: mdi:solar-power-variant
arch:
- aarch64
- amd64
- armhf
- armv7
- i386
map:
- addon_config:rw
- share:rw
options:
dtu_type: OpenDTU
smartmeter_type: Smartmeter
full_charge_interval: 32
control_bypass: true
mqtt_host: ''
mqtt_user: ''
mqtt_password: ''
dtu_base_topic: solar
inverter_max_power: 2000
opendtu_inverter_serial: ''
ahoydtu_inverter_id: '0'
sm_generic_base_topic: ''
sm_generic_cur_accessor: ''
sm_generic_total_accessor: ''
sm_rapid_change_diff: 500
sm_zero_offset: 20
sm_scaling_factor: 1
sm_shelly3em_base_topic: shellies/shellyem3/
min_charge_power: 125
max_discharge_power: 150
limit_inverter: true
max_inverter_limit: 800
min_inverter_limit: 10
discharge_during_daytime: false
sunrise_offset: 60
sunset_offset: 60
schema:
dtu_type: list(OpenDTU|AhoyDTU)
smartmeter_type: list(Smartmeter|PowerOpti|ShellyEM3)
product_id: str
device_id: str
full_charge_interval: int
control_bypass: bool
mqtt_host: str
mqtt_port: port?
mqtt_user: str?
mqtt_password: password?
dtu_base_topic: str
sf_inverter_channels: str
inverter_max_power: int?
opendtu_inverter_serial: str?
ahoydtu_inverter_id: int?
sm_rapid_change_diff: int?
sm_zero_offset: int?
sm_scaling_factor: int?
sm_generic_base_topic: str?
sm_generic_cur_accessor: str?
sm_generic_total_accessor: str?
sm_poweropti_user: str?
sm_poweropti_password: password?
sm_shelly3em_base_topic: str?
min_charge_power: int?
max_discharge_power: int?
limit_inverter: bool?
max_inverter_limit: int?
min_inverter_limit: int?
discharge_during_daytime: bool?
latitude: float?
longitude: float?
sunrise_offset: int?
sunset_offset: int?
image: ghcr.io/dfigus/solarflow-control/{arch}
Binary file added solarflow-control/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added solarflow-control/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
143 changes: 143 additions & 0 deletions solarflow-control/translations/en.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
---
configuration:
dtu_type:
name: DTU Type
description: >-
Type of the DTU. Either OpenDTU or AhoyDTU.
smartmeter_type:
name: Smartmeter Type
description: >-
Type of the Smartmeter. Either Smartmeter (generic, Tasmota, Hichi, etc.), PowerOpti or Shelly 3EM.
product_id:
name: Solarflow Product ID
description: >-
The product ID specifies the model of Solarflow hub to use: Hub-1200: "73bkTV" Hub-2000: "A8yh63"
device_id:
name: Solarflow Device ID
description: >-
The device ID of your Solarflow Hub (typically 8 characters).
full_charge_interval:
name: Full Charge Interval
description: >-
The time interval in hours that solarflow-control will try to ensure a full battery (i.e. no discharging if
battery hasn't been at 100% for this long)
control_bypass:
name: Control Bypass
description: >-
Let solarflow-control take over enabling/disabling the bypass of the hub (direct solarinput to hub output when
battery is full) this overrides the automatic switching by the hub's firmware, which is sometimes a bit wierd.
mqtt_host:
name: MQTT Host
description: >-
The hostname or IP address of your MQTT broker.
mqtt_port:
name: MQTT Port
description: >-
The port of your MQTT broker.
mqtt_user:
name: MQTT User
description: >-
The username for your MQTT broker.
mqtt_password:
name: MQTT Password
description: >-
The password for your MQTT broker.
dtu_base_topic:
name: DTU Base Topic
description: >-
The MQTT base topic your OpenDTU/AhoyDTU reports to.
sf_inverter_channels:
name: Solarflow Inverter Channels
description: >-
List of indices of the inverter channels/ports (as reported in the DTU) that the Solarflow Hub is connected to
typically the index starts at 1 as 0 is the output channel of the inverter e.g. 1,3 or 3 or [1,3]
inverter_max_power:
name: Inverter Maximum Power
description: >-
The maximum output power of your inverter, used to calculate correct absolute values.
opendtu_inverter_serial:
name: OpenDTU Inverter Serial
description: >-
The serial number of the inverter connected to the OpenDTU.
ahoydtu_inverter_id:
name: AhoyDTU Inverter ID
description: >-
The ID of the inverter connected to the AhoyDTU.
sm_rapid_change_diff:
name: Smartmeter Rapid Change Difference
description: >-
The rapid change difference defines the difference in W that has to be detected on the smartmeter readings to
consider it a fast drop or rise in demand. This helps a faster adjustment in switching various limits e.g.
when a water boiler is turned on/off
sm_zero_offset:
name: Smartmeter Zero Offset
description: >-
The zero offset defines the minimum power that is considered as a load. This is used to prevent the inverter
from switching on/off when the smartmeter is reading a small amount of power (e.g. standby power)
sm_generic_base_topic:
name: Generic Smartmeter Base Topic
description: >-
The MQTT base topic your generic smartmeter, Hichi, Tasmota, etc. reports to.
sm_generic_cur_accessor:
name: Generic Smartmeter Current Accessor
description: >-
The JSON accessor to the current power reading of your generic smartmeter. If Smartmeter reader posts
{ "Power": {"Power_curr": 120, "Total_in": 12345.6} } then the accessor would be Power.Power_curr
sm_generic_total_accessor:
name: Generic Smartmeter Total Accessor
description: >-
The JSON accessor to the total power reading of your generic smartmeter. If Smartmeter reader posts
{ "Power": {"Power_curr": 120, "Total_in": 12345.6} } then the accessor would be Power.Total_in
sm_poweropti_user:
name: PowerOpti User
description: >-
The username for your Powerfox API of your PowerOpti smartmeter (internet connection required).
sm_poweropti_password:
name: PowerOpti Password
description: >-
The password for your Powerfox API of your PowerOpti smartmeter (internet connection required).
sm_shelly3em_base_topic:
name: Shelly 3EM Base Topic
description: >-
The MQTT base topic your Shelly 3EM reports to (defaults to shellies/shellyem3/). Note: MQTT is disabled by
default on the Shelly 3EM and needs to be enabled first.
min_charge_power:
name: Minimum Charge Power
description: >-
The minimum power that is required to start charging the battery.
max_discharge_power:
name: Maximum Discharge Power
description: >-
The maximum power that is allowed to be discharged from the battery.
limit_inverter:
name: Limit Inverter
description: >-
Limit the output to the inverter.
max_inverter_limit:
name: Maximum Inverter Limit
description: >-
The maximum power that is sent to the inverter.
min_inverter_limit:
name: Minimum Inverter Limit
description: >-
The minimum power that is sent to the inverter.
discharge_during_daytime:
name: Discharge During Daytime
description: >-
Allow discharging the battery during daytime.
latitude:
name: Latitude
description: >-
The latitude of your location. Used to calculate sunrise and sunset times.
longitude:
name: Longitude
description: >-
The longitude of your location. Used to calculate sunrise and sunset times.
sunrise_offset:
name: Sunrise Offset
description: >-
The offset in minutes before sunrise. Can be used to set the duration of what is considered "night".
sunset_offset:
name: Sunset Offset
description: >-
The offset in minutes after sunset. Can be used to set the duration of what is considered "night".

0 comments on commit 65f31a9

Please sign in to comment.