* add dcu_power MQTT topic
* add DCU_COMMAND counter
* test invalid dcu_power values
* handle and test DCU Command responses
* test dcu commands from the TSUN cloud
* cleanup MQTT topic handling
* update changelog
* test MQTT error and exception handling
* increase test coverage
* test dispatcher exceptions
* fix full_topic definition in dispatch test
* setup logger for hypercorn and dashboard
* use logger.ini to setup dashboard logger
* workaround: restore the hypercorn logger config
- quart/hyercorn overwrites the logger config.
as a workaround we restore the config at the
beginning of a request
* fix the hypercorn log handler only once
* change proxy into a ASGI application
- move Quart init from server.py into app.py
- create Server class for config and loggin setup
- restore hypercorn logging configuration after
start of Quart/Hypercorn
* move get_log_level into Server class
* define config in test_emu_init_close
* remove Web() instance from the testcase
- with importing app.py The blueprint Web() will
automatically created and a second call in test-
cases must avoided
* add unit tests
* move code from app.py into server.py
* test the init_logging_system() method
* add HypercornLogHndl tests
* fix deprecated pytest async warning
- Cleanup pending async tasks
- fix deprecated warning about event_loop
* add unit test for error handling in build_config()
* coverage: ignore quart template files
* check print output in test_save_and_restore
* update changelog
* move forward_at_cmd_resp into InfosG3P class
- the variable is shared between the two connections
of an inverter. One is for the TSUN cloud and the
other for the device.
* use inverter class to share values between
the two protocol instances of a proxy
- move forward_at_cmd_resp into class InverterG3P
- store inverter ptr in Solarman_V5 instances
- add inverter ptr to all constructurs of protocols
- adapt doku and unit tests-
- add integration tests for AT+ commands which
check the forwarding from and to the TSUN cloud
* adapt and improve the unit tests
- fix node_id declaration, which always has a / at
the end. See config grammar for this rule
- set global var test to default after test run
* split register map into multiple maps
* add base support reg mapping 0x01900000
* fix shadowed builtin
* detect reg mapping for sensor automatically
* add device and test regs for MS-3000
* add more register mappings
* fix unit tests
* add more MS-3000 registers
* build modell string for TSUN MS-3000
* add MS3000 unit test
* remove obsolete method __set_config_parms
* fix start addr of modbus scans
- in server mode the start addr must be reduced
by mb_step
* add tests for sensor_list of ms-3000 inverters
* MS-3000: add integer test register
* DCU-1000: add Out Status register
* add integer test and batterie out register
* fix Sonar Qube finding
* DCU-1000: add temp sensors
* accept DCU serial number starting with '410'
* determine sensor-list by serial number
* adapt unit test for DCU support
* send first batterie measurements to home assistant
* add test case for sensor-list==3036
* add more registers for batteries
* improve error logging (Monitoring SN)
* update the add-on repro only for one stage
* add configuration for energie storages
* add License and Readme file to the add-on
* addon: add date and time to dev and debug docker container tag
* disable duplicate code check for config.py
* cleanup unit test, remove trailing whitespaces
* update changelog
* fix example config for batteries
* cleanup config.jinja template
* fix comments
* improve help texts
* - fix pytest setup that can be startet from the rootdir
- support python venv environment
- add pytest.ini
- move common settings from .vscode/settings.json into pytest.ini
- add missing requirements
- fix import paths for pytests
* - support python venv environment
* initial version
* - add missing requirements python-dotenv
* fix import paths for pytests
* fix pytest warnings
* initial version
* report 5 slowest test durations
* add more vscode settings for python
* Add SolarmanEmu class
* Forward a device ind to establish the EMU connection
* Move SolarmanEmu class into a dedicated file
* Add cloud connection counter
* Send inverter data in emulator mode
* Improve emulator mode
- parse more values from MQTT register
- differ between inverter and logger serial no
* Add some unit tests for SolarmanEmu class
* Send seconds since last sync in data packets
* Increase test coverage
* Code Cleanup (#158)
* print coverage report
* create sonar-project property file
* install all py dependencies in one step
* code cleanup
* reduce cognitive complexity
* do not build on *.yml changes
* optimise versionstring handling (#159)
- Reading the version string from the image updates
it even if the image is re-pulled without re-deployment
* fix linter warning
* exclude *.pyi filese
* ignore some rules for tests
* cleanup (#160)
* Sonar qube 3 (#163)
fix SonarQube warnings in modbus.py
* Sonar qube 3 (#164)
* fix SonarQube warnings
* Sonar qube 3 (#165)
* cleanup
* Add support for TSUN Titan inverter
Fixes#161
* fix SonarQube warnings
* fix error
* rename field "config"
* SonarQube reads flake8 output
* don't stop on flake8 errors
* flake8 scan only app/src for SonarQube
* update flake8 run
* ignore flake8 C901
* cleanup
* fix linter warnings
* ignore changed *.yml files
* read sensor list solarman data packets
* catch 'No route to' error and log only in debug mode
* fix unit tests
* add sensor_list configuration
* adapt unit tests
* fix SonarQube warnings
* Sonar qube 3 (#166)
* add unittests for mqtt.py
* add mock
* move test requirements into a file
* fix unit tests
* fix formating
* initial version
* fix SonarQube warning
* Sonar qube 4 (#169)
* add unit test for inverter.py
* fix SonarQube warning
* Sonar qube 5 (#170)
* fix SonarLints warnings
* use random IP adresses for unit tests
* Docker: The description ist missing (#171)
Fixes#167
* S allius/issue167 (#172)
* cleanup
* Sonar qube 6 (#174)
* test class ModbusConn
* Sonar qube 3 (#178)
* add more unit tests
* GEN3: don't crash on overwritten msg in the receive buffer
* improve test coverage und reduce test delays
* reduce cognitive complexity
* fix merge
* fix merge conflikt
* fix merge conflict
* S allius/issue182 (#183)
* GEN3: After inverter firmware update the 'Unknown Msg Type' increases continuously
Fixes#182
* add support for Controller serial no and MAC
* test hardening
* GEN3: add support for new messages of version 3 firmwares
* bump libraries to latest versions
- bump aiomqtt to version 2.3.0
- bump aiohttp to version 3.10.5
* improve test coverage
* reduce cognective complexity
* fix target preview
* remove dubbled fixtures
* increase test coverage
* Update README.md (#185)
update badges
* S allius/issue186 (#187)
* Parse more values in Server Mode
Fixes#186
* read OUTPUT_COEFFICIENT and MAC_ADDR in SrvMode
* fix unit test
* increase test coverage
* S allius/issue186 (#188)
* increase test coverage
* update changelog
* add dokumentation
* change default config
* Update README.md (#189)
Config file is now foldable
* GEN3: Invalid Contact Info Msg (#192)
Fixes#191
* Refactoring async stream (#194)
* GEN3: Invalid Contact Info Msg
Fixes#191
* introduce ifc with FIFOs
* add object factory
* use AsyncIfc class with FIFO
* declare more methods as classmethods
* - refactoring
- remove _forward_buffer
- make async_write private
* remove _forward_buffer
* refactoring
* avoid mqtt handling for invalid serial numbers
* add two more callbacks
* FIX update_header_cb handling
* split AsyncStream in two classes
* split ConnectionG3(P) in server and client class
* update class diagramm
* refactor server creation
* remove duplicated imports
* reduce code duplication
* move StremPtr instances into Inverter class
* resolution of connection classes
- remove ConnectionG3Client
- remove ConnectionG3Server
- remove ConnectionG3PClient
- remove ConnectionG3PServer
* fix server connections
* fix client loop closing
* don't overwrite self.remote in constructor
* update class diagramm
* fixes
- fixes null pointer accesses
- initalize AsyncStreamClient with proper
StreamPtr instance
* add close callback
* refactor close handling
* remove connection classes
* move more code into InverterBase class
* remove test_inverter_base.py
* add abstract inverter interface class
* initial commit
* fix sonar qube warnings
* rename class Inverter into Proxy
* fix typo
* move class InverterIfc into a separate file
* add more testcases
* use ProtocolIfc class
* add unit tests for AsyncStream class
* icrease test coverage
* reduce cognitive complexity
* increase test coverage
* increase tes coverage
* simplify heartbeat handler
* remove obsolete tx_get method
* add more unittests
* update changelog
* remove __del__ method for proper gc runs
* check releasing of ModbusConn instances
* call garbage collector to release unreachable objs
* decrease ref counter after the with block
* S allius/issue196 (#198)
* fix healthcheck
- on infrastructure with IPv6 support localhost
might be resolved to an IPv6 adress. Since the
proxy only support IPv4 for now, we replace
localhost by 127.0.0.1, to fix this
* merge from main
* Code Cleanup (#158)
* print coverage report
* create sonar-project property file
* install all py dependencies in one step
* code cleanup
* reduce cognitive complexity
* do not build on *.yml changes
* optimise versionstring handling (#159)
- Reading the version string from the image updates
it even if the image is re-pulled without re-deployment
* fix linter warning
* exclude *.pyi filese
* ignore some rules for tests
* cleanup (#160)
* Sonar qube 3 (#163)
fix SonarQube warnings in modbus.py
* Sonar qube 3 (#164)
* fix SonarQube warnings
* Sonar qube 3 (#165)
* cleanup
* Add support for TSUN Titan inverter
Fixes#161
* fix SonarQube warnings
* fix error
* rename field "config"
* SonarQube reads flake8 output
* don't stop on flake8 errors
* flake8 scan only app/src for SonarQube
* update flake8 run
* ignore flake8 C901
* cleanup
* fix linter warnings
* ignore changed *.yml files
* read sensor list solarman data packets
* catch 'No route to' error and log only in debug mode
* fix unit tests
* add sensor_list configuration
* adapt unit tests
* fix SonarQube warnings
* Sonar qube 3 (#166)
* add unittests for mqtt.py
* add mock
* move test requirements into a file
* fix unit tests
* fix formating
* initial version
* fix SonarQube warning
* Sonar qube 4 (#169)
* add unit test for inverter.py
* fix SonarQube warning
* Sonar qube 5 (#170)
* fix SonarLints warnings
* use random IP adresses for unit tests
* Docker: The description ist missing (#171)
Fixes#167
* S allius/issue167 (#172)
* cleanup
* Sonar qube 6 (#174)
* test class ModbusConn
* Sonar qube 3 (#178)
* add more unit tests
* GEN3: don't crash on overwritten msg in the receive buffer
* improve test coverage und reduce test delays
* reduce cognitive complexity
* fix merge
* fix merge conflikt
* fix merge conflict
* S allius/issue182 (#183)
* GEN3: After inverter firmware update the 'Unknown Msg Type' increases continuously
Fixes#182
* add support for Controller serial no and MAC
* test hardening
* GEN3: add support for new messages of version 3 firmwares
* bump libraries to latest versions
- bump aiomqtt to version 2.3.0
- bump aiohttp to version 3.10.5
* improve test coverage
* reduce cognective complexity
* fix target preview
* remove dubbled fixtures
* increase test coverage
* Update README.md (#185)
update badges
* S allius/issue186 (#187)
* Parse more values in Server Mode
Fixes#186
* read OUTPUT_COEFFICIENT and MAC_ADDR in SrvMode
* fix unit test
* increase test coverage
* S allius/issue186 (#188)
* increase test coverage
* update changelog
* add dokumentation
* change default config
* Update README.md (#189)
Config file is now foldable
* use random IP adresses for unit tests
* Docker: The description ist missing (#171)
Fixes#167
* S allius/issue167 (#172)
* cleanup
* Sonar qube 6 (#174)
* test class ModbusConn
* S allius/issue117 (#118)
* add shutdown flag
* add more register definitions
* add start commando for client side connections
* add first support for port 8899
* fix shutdown
* add client_mode configuration
* read client_mode config to setup inverter connections
* add client_mode connections over port 8899
* add preview build
* Update README.md
describe the new client-mode over port 8899 for GEN3PLUS
* MODBUS: the last digit of the inverter version is a hexadecimal number (#121)
* S allius/issue117 (#122)
* add shutdown flag
* add more register definitions
* add start commando for client side connections
* add first support for port 8899
* fix shutdown
* add client_mode configuration
* read client_mode config to setup inverter connections
* add client_mode connections over port 8899
* add preview build
* add documentation for client_mode
* catch os error and log thme with DEBUG level
* update changelog
* make the maximum output coefficient configurable (#124)
* S allius/issue120 (#126)
* add config option to disable the modbus polling
* read more modbus regs in polling mode
* extend connection timeouts if polling mode is disabled
* update changelog
* S allius/issue125 (#127)
* fix linter warning
* move sequence diagramm to wiki
* catch asyncio.CancelledError
* S allius/issue128 (#130)
* set Register.NO_INPUTS fix to 4 for GEN3PLUS
* don't set Register.NO_INPUTS per MODBUS
* fix unit tests
* register OUTPUT_COEFFICIENT at HA
* update changelog
* - Home Assistant: improve inverter status value texts
* - GEN3: add inverter status
* on closing send outstanding MQTT data to the broker
* force MQTT publish on every conn open and close
* reset inverter state on close
- workaround which reset the inverter status to
offline when the inverter has a very low
output power on connection close
* improve client modified
- reduce the polling cadence to 30s
- set controller statistics for HA
* client mode set controller IP for HA
* S allius/issue131 (#132)
* Make __publish_outstanding_mqtt public
* update proxy counter
- on client mode connection establishment or
disconnecting update tje counection counter
* Update README.md (#133)
* reset inverter state on close
- workaround which reset the inverter status to
offline when the inverter has a very low
output power on connection close
* S allius/issue134 (#135)
* add polling invertval and method ha_remove()
* add client_mode arg to constructors
- add PollingInvervall
* hide some topics in client mode
- we hide topics in HA by sending an empty register
MQTT topic during HA auto configuration
* add client_mode value
* update class diagram
* fix modbus close handler
- fix empty call and cleanup que
- add unit test
* don't sent an initial 1710 msg in client mode
* change HA icon for inverter status
* increase test coverage
* accelerate timer tests
* bump aiomqtt and schema to latest release (#137)
* MQTT timestamps and protocol improvements (#140)
* add TS_INPUT, TS_GRID and TS_TOTAL
* prepare MQTT timestamps
- add _set_mqtt_timestamp method
- fix hexdump printing
* push dev and debug images to docker.io
* add unix epoche timestamp for MQTT pakets
* set timezone for unit tests
* set name für setting timezone step
* trigger new action
* GEN3 and GEN3PLUS: handle multiple message
- read: iterate over the receive buffer
- forward: append messages to the forward buffer
- _update_header: iterate over the forward buffer
* GEN3: optimize timeout handling
- longer timeout in state init and reveived
- got to state pending only from state up
* update changelog
* cleanup
* print coloured logs
* Create sonarcloud.yml (#143)
* Update sonarcloud.yml
* Update sonarcloud.yml
* Update sonarcloud.yml
* Update sonarcloud.yml
* Update sonarcloud.yml
* build multi arch images with sboms (#146)
* don't send MODBUS request when state is not up (#147)
* adapt timings
* don't send MODBUS request when state is note up
* adapt unit test
* make test code more clean (#148)
* Make test code more clean (#149)
* cleanup
* Code coverage for SonarCloud (#150)
* cleanup code and unit tests
* add test coverage for SonarCloud
* configure SonarCloud
* update changelog
* Do no build on *.yml changes
* prepare release 0.10.0
* disable MODBUS_POLLING for GEN§PLUS in example config
* bump aiohttp to version 3.10.2
* code cleanup
* Fetch all history for all tags and branches
* S allius/issue102 (#103)
* hotfix: don't send two MODBUS commands together
* Update README.md
Exchange logger fw version with the real inverter fw version in the compatibility table
* Update python-app.yml
run also on pushes to issue branches
fix name for issues branches
* S allius/issue104 (#105)
* Update README.md
Exchange logger fw version with the real inverter fw version in the compatibility table
* Update python-app.yml
run also on pushes to issue branches
fix name for issues branches
* fix forwarding of MODBUS responses
* fix unit tests
* update changelog
- add Sequence class to handle the sequence of packets
- send response for received packets directly
- don't forward responses anymore
- addapt tests to new behavior
* add tsun_v2 default configuration
* Add port 10000 for gen 3 plus inverters
* add monitor_sn for solarman support
* listen on port 10000 for solarman inverters
* initial version for gen 3 plus support
* refactoring split gen3 and gen3plus
* refactoring
* refactoring classes
* refactor proxy statistic counter
* - fix loggin levels
- user super() in close() and __del__()
* add config for gen 3 plus
* Add solarman config support
* refacot Message.. classes
* rename class MessageG3 into Talent
* refactor close() handler
* refactor disc() handler
* move loop() into the base class AsyncStream
* move async_read, _write and _forward into base class
* Cleanup
* move server_loop and client_loop into basic class
* add msg forwarding for solarman V5 protocol
* move server_loop() and client_loop to class AsyncStream
* rename AsyncStreamxx ton Connectionxx
* fix unit tests
* make more attributes privae
* load .env file
* wait after last test
* ignore .env
* add response handler
* Update README.md
* update unreleased changes
* home assistant add more diagnostic values
* fix typo
* Update README.md
Definition of the inverter generations added to the compatibility table
* add ha couter for 'Internal SW Exceptions'
* Update README.md
Fixes an incorrect marking in the display of the configuration file
* Update README.md
Planning documented for MS-2000 support
* S allius/issue33 (#34)
* - fix issue 33
The TSUN Cloud now responds to contact_info and get_time messages with
an empty display message and not with a response message as before.
We tried to parse data from the empty message, which led to an
exception
* Add test with empty conn_ind from inverter
* version 0.5.5
* add tsun_v2 default configuration
* Add port 10000 for gen 3 plus inverters
* add monitor_sn for solarman support
* listen on port 10000 for solarman inverters
initial version for gen 3 plus support
* refactoring split gen3 and gen3plus
* refactoring
* refactoring classes
* refactor proxy statistic counter
* - fix loggin levels
- user super() in close() and __del__()
* add config for gen 3 plus
* Add solarman config support
* refacot Message.. classes
* rename class MessageG3 into Talent
* refactor close() handler
* refactor disc() handler
* move loop() into the base class AsyncStream
* move async_read, _write and _forward into base class
* Cleanup
* move server_loop and client_loop into basic class
* add msg forwarding for solarman V5 protocol
* move server_loop() and client_loop to class AsyncStream
* rename AsyncStreamxx ton Connectionxx
* fix unit tests
* make more attributes privae
load .env file
* wait after last test
* ignore .env
* add response handler