From 015a370392a49fc43c02564b739f906e0d777150 Mon Sep 17 00:00:00 2001 From: Jamie Townsend Date: Tue, 27 Sep 2022 07:51:10 +0200 Subject: [PATCH] [solarmax] Initial contribution (#10414) * SolarMax Binding Initial implementation Signed-off-by: Jamie Townsend * #10413 camelCaserizeTheChannelNames Signed-off-by: Jamie Townsend * #10413 Delete commented code and Refactor Brute Force Command Discovery into something commitable Signed-off-by: Jamie Townsend * 10413 Delete commented code and Refactor Brute Force Command Discovery into something commitable Signed-off-by: Jamie Townsend * #10413 Codestyle Signed-off-by: Jamie Townsend * 10413 Codestyle Signed-off-by: Jamie Townsend * #10413 corrected sat-plugin errors Signed-off-by: Jamie Townsend * #10413 updates from code reviews in PR #10414 Signed-off-by: Jamie Townsend * 10413 mvn spotless:apply Signed-off-by: Jamie Townsend * 10413 Updated to 3.2.0-SNAPSHOT Signed-off-by: Jamie Townsend * Fixed conflicts introduced by foreign commit. Signed-off-by: Jamie Townsend * Updated copyright years Signed-off-by: Jamie Townsend * Ran mvn spotless:apply to resolve formatting issues Signed-off-by: Jamie Townsend * Updates from review Signed-off-by: Jamie Townsend * Switch to using Units & move softwareVersion & buildNumber to properties Signed-off-by: Jamie Townsend * A couple of review related updates Signed-off-by: Jamie Townsend * A couple more review related changes. Signed-off-by: Jamie Townsend * Added Full Example to README.md Signed-off-by: Jamie Townsend * Update parent pom.xml version Signed-off-by: Jamie Townsend * Update bundles/org.openhab.binding.solarmax/src/main/java/org/openhab/binding/solarmax/internal/SolarMaxHandlerFactory.java Signed-off-by: Fabian Wolter * Update bundles/org.openhab.binding.solarmax/src/main/java/org/openhab/binding/solarmax/internal/SolarMaxHandlerFactory.java Signed-off-by: Fabian Wolter Signed-off-by: Jamie Townsend Signed-off-by: Fabian Wolter Co-authored-by: Fabian Wolter --- CODEOWNERS | 1 + bom/openhab-addons/pom.xml | 5 + bundles/org.openhab.binding.solarmax/NOTICE | 13 + .../org.openhab.binding.solarmax/README.md | 132 ++++++ bundles/org.openhab.binding.solarmax/pom.xml | 17 + .../src/main/feature/feature.xml | 9 + .../internal/SolarMaxBindingConstants.java | 32 ++ .../solarmax/internal/SolarMaxChannel.java | 70 ++++ .../internal/SolarMaxConfiguration.java | 28 ++ .../solarmax/internal/SolarMaxHandler.java | 182 +++++++++ .../internal/SolarMaxHandlerFactory.java | 54 +++ .../solarmax/internal/SolarMaxProperty.java | 39 ++ .../connector/SolarMaxCommandKey.java | 68 ++++ .../SolarMaxConnectionException.java | 35 ++ .../internal/connector/SolarMaxConnector.java | 375 ++++++++++++++++++ .../internal/connector/SolarMaxData.java | 251 ++++++++++++ .../internal/connector/SolarMaxException.java | 39 ++ .../main/resources/OH-INF/binding/binding.xml | 9 + .../resources/OH-INF/thing/thing-types.xml | 186 +++++++++ .../internal/connector/SolarMaxDataTest.java | 74 ++++ .../SolarmaxConnectorFindCommands.java | 352 ++++++++++++++++ bundles/pom.xml | 1 + 22 files changed, 1972 insertions(+) create mode 100644 bundles/org.openhab.binding.solarmax/NOTICE create mode 100644 bundles/org.openhab.binding.solarmax/README.md create mode 100644 bundles/org.openhab.binding.solarmax/pom.xml create mode 100644 bundles/org.openhab.binding.solarmax/src/main/feature/feature.xml create mode 100644 bundles/org.openhab.binding.solarmax/src/main/java/org/openhab/binding/solarmax/internal/SolarMaxBindingConstants.java create mode 100644 bundles/org.openhab.binding.solarmax/src/main/java/org/openhab/binding/solarmax/internal/SolarMaxChannel.java create mode 100644 bundles/org.openhab.binding.solarmax/src/main/java/org/openhab/binding/solarmax/internal/SolarMaxConfiguration.java create mode 100644 bundles/org.openhab.binding.solarmax/src/main/java/org/openhab/binding/solarmax/internal/SolarMaxHandler.java create mode 100644 bundles/org.openhab.binding.solarmax/src/main/java/org/openhab/binding/solarmax/internal/SolarMaxHandlerFactory.java create mode 100644 bundles/org.openhab.binding.solarmax/src/main/java/org/openhab/binding/solarmax/internal/SolarMaxProperty.java create mode 100644 bundles/org.openhab.binding.solarmax/src/main/java/org/openhab/binding/solarmax/internal/connector/SolarMaxCommandKey.java create mode 100644 bundles/org.openhab.binding.solarmax/src/main/java/org/openhab/binding/solarmax/internal/connector/SolarMaxConnectionException.java create mode 100644 bundles/org.openhab.binding.solarmax/src/main/java/org/openhab/binding/solarmax/internal/connector/SolarMaxConnector.java create mode 100644 bundles/org.openhab.binding.solarmax/src/main/java/org/openhab/binding/solarmax/internal/connector/SolarMaxData.java create mode 100644 bundles/org.openhab.binding.solarmax/src/main/java/org/openhab/binding/solarmax/internal/connector/SolarMaxException.java create mode 100644 bundles/org.openhab.binding.solarmax/src/main/resources/OH-INF/binding/binding.xml create mode 100644 bundles/org.openhab.binding.solarmax/src/main/resources/OH-INF/thing/thing-types.xml create mode 100644 bundles/org.openhab.binding.solarmax/src/test/java/org/openhab/binding/solarmax/internal/connector/SolarMaxDataTest.java create mode 100644 bundles/org.openhab.binding.solarmax/src/test/java/org/openhab/binding/solarmax/internal/connector/SolarmaxConnectorFindCommands.java diff --git a/CODEOWNERS b/CODEOWNERS index a083a2b00..32edcbe2c 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -302,6 +302,7 @@ /bundles/org.openhab.binding.snmp/ @openhab/add-ons-maintainers /bundles/org.openhab.binding.solaredge/ @alexf2015 /bundles/org.openhab.binding.solarlog/ @johannrichard +/bundles/org.openhab.binding.solarmax/ @jamietownsend /bundles/org.openhab.binding.solarwatt/ @sven-carstens /bundles/org.openhab.binding.somfymylink/ @loungeflyz /bundles/org.openhab.binding.somfytahoma/ @octa22 diff --git a/bom/openhab-addons/pom.xml b/bom/openhab-addons/pom.xml index 1b76eaccb..73ebdac24 100644 --- a/bom/openhab-addons/pom.xml +++ b/bom/openhab-addons/pom.xml @@ -1516,6 +1516,11 @@ org.openhab.binding.solarlog ${project.version} + + org.openhab.addons.bundles + org.openhab.binding.solarmax + ${project.version} + org.openhab.addons.bundles org.openhab.binding.solarwatt diff --git a/bundles/org.openhab.binding.solarmax/NOTICE b/bundles/org.openhab.binding.solarmax/NOTICE new file mode 100644 index 000000000..38d625e34 --- /dev/null +++ b/bundles/org.openhab.binding.solarmax/NOTICE @@ -0,0 +1,13 @@ +This content is produced and maintained by the openHAB project. + +* Project home: https://www.openhab.org + +== Declared Project Licenses + +This program and the accompanying materials are made available under the terms +of the Eclipse Public License 2.0 which is available at +https://www.eclipse.org/legal/epl-2.0/. + +== Source Code + +https://github.com/openhab/openhab-addons diff --git a/bundles/org.openhab.binding.solarmax/README.md b/bundles/org.openhab.binding.solarmax/README.md new file mode 100644 index 000000000..9af6c406d --- /dev/null +++ b/bundles/org.openhab.binding.solarmax/README.md @@ -0,0 +1,132 @@ +# SolarMax Binding + +This binding supports SolarMax PV inverters. + +## Supported Things + +This binding only has a single `inverter` thing that can be added manually. +The SolarMax MT Series is supported (tested with 8MT2 devices). + +## Discovery + +Auto-discovery is currently not available. + +## Thing Configuration + +Each inverter requires the following configuration parameters: + +| parameter | required | default | description | +| --------------- | -------- | ------- | -------------------------------------------------------------------- | +| host | yes | | hostname or IP address of the inverter | +| port | no | 12345 | Port number to connect to. This should be `12345` for most inverters | +| refreshInterval | no | 15 | Interval (in seconds) to refresh the channel values. | + + +## Properties + +| property | description | +| --------------- | ------------------------------------------------------ | +| softwareVersion | Software Version installed on the SolarMax device | +| buildNumber | Firmware Build Number installed on the SolarMax device | + + +## Channels + +| channel | type | description | +| ------------------------ | ------------------------ | -------------------------------------------- | +| lastUpdated | DateTime | Time when data was last read from the device | +| startups | Number | Number of times the device has started | +| acPhase1Current | Number:ElectricCurrent | Ac Phase 1 Current in Amps | +| acPhase2Current | Number:ElectricCurrent | Ac Phase 2 Current in Amps | +| acPhase3Current | Number:ElectricCurrent | Ac Phase 3 Current in Amps | +| energyGeneratedToday | Number:Energy | Energy Generated Today in Wh | +| energyGeneratedTotal | Number:Energy | Energy Generated since recording began in Wh | +| operatingHours | Number | Operating Hours since recording began in h | +| energyGeneratedYesterday | Number:Energy | Energy Generated Yesterday in Wh | +| energyGeneratedLastMonth | Number:Energy | Energy Generated Last Month in Wh | +| energyGeneratedLastYear | Number:Energy | Energy Generated Last Year in Wh | +| energyGeneratedThisMonth | Number:Energy | Energy Generated This Month in Wh | +| energyGeneratedThisYear | Number:Energy | Energy Generated This Year in Wh | +| currentPowerGenerated | Number:Power | Power currently being generated in W | +| acFrequency | Number:Frequency | AcFrequency in Hz | +| acPhase1Voltage | Number:ElectricPotential | Ac Phase1 Voltage in V | +| acPhase2Voltage | Number:ElectricPotential | Ac Phase2 Voltage in V | +| acPhase3Voltage | Number:ElectricPotential | Ac Phase3 Voltage in V | +| heatSinkTemperature | Number:Temperature | Heat Sink Temperature in degrees celcius | + +### Full Example + +Below you can find some example textual configuration for a solarmax with some basic functionallity. This can be extended/adjusted according to your needs and depending on the required channels (see list above). + +_inverter.things:_ + +``` +Thing solarmax:inverter:solarmax "SolarMax Inverter" [ + host="192.168.1.151", + port="12345", + refresh="15" +] +``` + +_inverter.items:_ + +``` +Group gInverter "SolarMax Inverter" + +DateTime lastUpdated "Last Updated" (gInverter) {channel="solarmax:inverter:solarmax:lastUpdated"} + +Number startups "Startups" (gInverter) { channel="solarmax:inverter:solarmax:startups" } + +Number:ElectricCurrent acPhase1Current "Ac Phase 1 Current in Amps" (gInverter) { channel="solarmax:inverter:solarmax:acPhase1Current" } +Number:ElectricCurrent acPhase2Current "Ac Phase 2 Current in Amps" (gInverter) { channel="solarmax:inverter:solarmax:acPhase2Current" } +Number:ElectricCurrent acPhase3Current "Ac Phase 3 Current in Amps" (gInverter) { channel="solarmax:inverter:solarmax:acPhase3Current" } + +Number:Energy energyGeneratedToday "Energy Generated Today in Wh" (gInverter) { channel="solarmax:inverter:solarmax:energyGeneratedToday" } +Number:Energy energyGeneratedTotal "Energy Generated since recording began in Wh" (gInverter) { channel="solarmax:inverter:solarmax:energyGeneratedTotal" } + +Number operatingHours "Operating Hours since recording began in h"