Commit Graph

935 Commits

Author SHA1 Message Date
Bernhard Kirchen
96ee78156d
Fix DPL Mode 2 MQTT Status (#402)
* DPL MQTT handler: modernize

* there is no need to tokenize and check the topic of a received MQTT
  message if we only subscribe to a single topic. all messages will be
  for that topic. avoid testing the topic in the callback alltogether.
* use std::string and std::stoi over allocating and deleting a buffer
  and copying charactes around.
* use a switch statement to process the actual payload.
* break a long line.

* DPL: fix getMode() return value

getMode() returned a bool. probably its return type was not adjusted
when the third mode was introduced. this lead to mode 2 being cast to
true implicitly, which in turn was used to construct a String, such that
"1" was published as the DPL mode when in fact it was 2.

make the mode an enum class to avoid such problems in the future.

inline getMode() and setMode().

fix indention.
2023-08-28 13:20:56 +02:00
helgeerbe
ca308d0895 Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-08-28 13:12:07 +02:00
Thomas Basler
701c490654 Feature: Turn off Display before reboot
Thanks for the idea to @StefanOberhumer
This prevents always on Display if the device profile does not contain Display pins anymore after the reboot
2023-08-25 16:57:24 +02:00
Thomas Basler
c91bd42a77 Feature: Turn off LEDs before reboot
Thanks for the idea to @StefanOberhumer
This prevents always on LEDs if the device profile does not contain LEDs pins anymore after the reboot
2023-08-25 13:15:55 +02:00
Thomas Basler
77a90095d9 Move different restart calls into one method 2023-08-25 12:58:53 +02:00
Thomas Basler
e2594ac843 Fix: Calculate the json buffer for the inverter list based on INV_MAX_COUNT 2023-08-22 17:05:46 +02:00
Thomas Basler
6429d64062 Prometheus Endpoint: Simplify code by looping over fields instead of duplicated code 2023-08-22 13:00:52 +02:00
Thomas Basler
4bf9083b23 Prometheus Endpoint: Publish only relevant amount of digits
Implemented method to return the correctly formatted field value as string
2023-08-22 11:45:14 +02:00
Bernhard Kirchen
7c7a15e016
VE.Direct: websocket and status API response size (#371)
the size allocated for the HTTP request response was too little, while
the size for the buffer of the websocket output was increased already.

add a new member variable and use it in both context, such that
increasing the buffer size to accomodate more space (for the JSON data
in particular) will benefit both contexts in the future.
2023-08-10 13:40:09 +02:00
helgeerbe
5a72d74982
fix #362 system Info checks git head, instead of build branch (#374) 2023-08-09 17:45:54 +02:00
helgeerbe
21bbed9b8e Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-08-09 12:37:33 +02:00
helgeerbe
ec67fe1ff7 fix: Power meter value not displayed #355
Enlarge JsonBuffer for webservice response to 2048
2023-08-08 15:58:24 +02:00
Bernhard Kirchen
3db237c109
DPL: save verbose logging switch value to config (#363) 2023-08-07 18:20:45 +02:00
Bernhard Kirchen
e6eaa001e7
DPL: use testThreshold() in useFullSolarPassthrough() (#357) 2023-08-06 17:00:27 +02:00
Thomas Basler
9179b672f5 Use lock_guard to simplify code 2023-08-05 01:25:53 +02:00
Bernhard Kirchen
aff7924411
Inhibit solar passthrough while battery below stop threshold (#354)
* DPL: improve verbose logging

* shorten DPL log prefix
* canUseDirectSolarPower() was printed two times
* _batteryDischargeEnabled was printed two times
* convert boolean values to human-readable strings
* add units where possible
* split messages into block "before calculating new limit" and "after
  calculating new limit", as the latter cannot rely on _inverter being
  available.
* order messages such that variables whose value is derived from other
  variables are printed later than their dependencies.
* merge output into blocks (one instance near "Printout some stats")
* remove more redundant info (produced in functions outside loop())
* print target grid consumption

* DPL: inhibit solar passthrough while stop threshold reached

* DPL: implement and use isBelowStopThreshold()

we only want to inhibit solar passthrough if the SoC is *below* the stop
threshold, not if it is equal to the stop threshold. otherwise, when
discharging, we would discharge until the battery reached the stop
threshold, then we would also inhibit solar passthrough, until the
battery is charged to the SoC stop threshold plus one percent.
2023-08-04 12:35:37 +02:00
helgeerbe
5335ec1bde Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-08-04 12:21:16 +02:00
Thomas Basler
43cba67531 Fix: Virtual console scrambled output when the output came from different contexts 2023-08-03 22:16:29 +02:00
Thomas Basler
0bdee6ec99 Fix: Prevent access to nullptr object when reconnecting to mqtt
It could occour when saving the settings via the web ui
2023-08-03 18:46:28 +02:00
Bernhard Kirchen
81864b3420
execute MQTT client synchronously in main loop() (#350)
processing a published valued on a subscribed topic is currently running
in a task that is not the task executing the main loop(). that's because
the espMqttClient(Secure) was constructed without arguments, which
selects the constructor with two arguments priority and core, both of
which have default values. that constructor selects
espMqttClientTypes::UseInternalTask::YES, causing a task to be created
in which context the MQTT client loop is executed.

MQTT subscribers assume they are running in the same context as the main
loop(). most code assumes exactly that. as the scheduler is preemptive
and very little (none at all?) code is interlocked, we have to make sure
to meet the programmer's expectations.

this changeset calls the MQTT client loop in the context of the main
loop() and enforces the use of espMqttClientTypes::UseInternalTask::NO.
2023-08-01 09:20:04 +02:00
Bernhard Kirchen
2bce8311a7
MQTT verbose logging fixes (#341)
* MQTT verbose logging: fix typo

this typo caused that verbose logging was always disabled for MQTT and
could not be enabled.

* webapp status: show MQTT verbose logging setting
2023-07-31 14:16:35 +02:00
Bernhard Kirchen
6b425d96b0
PowerMeter fixes (#342)
* PowerMeter: gracefully handle non-float MQTT values

* PowerMeter: update _lastPowerMeterUpdate conservatively

update the timestampt only if the topic actually matched any
subscription and if the value could be parsed as a float.

* PowerMeter: unsubscribe before subscribing

* PowerMeter: organize subscriptions in a map

this allows for a slightly more elegant code and reduced amount of code
overall.

* PowerMeter: clean up header

* move private methods to private section of class declaration.
* remove unused member variable.
2023-07-31 14:16:06 +02:00
helgeerbe
2440028d38 Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-07-24 13:16:15 +02:00
MalteSchm
18c464e524
SoC based threshold detection fix (#320) 2023-07-24 13:03:12 +02:00
Martin Dummer
8bfa7e530c Feature: Admin AccessPoint Timeout now configurable
Make the administrative accesspoint timeout configurable. The default
value is 3 minutes, values from 0-99999 are possible, where 0 means
infinite (no timeout).

Signed-off-by: Martin Dummer <martin.dummer@gmx.net>
2023-07-22 18:14:07 +02:00
Thomas Basler
a68c553d27 Code formatting without functional changes 2023-07-22 18:07:03 +02:00
Thomas Basler
658a42db80 Apply code formatter without functional changes 2023-07-22 18:00:41 +02:00
Thomas Basler
bf4dc56cb8 Fix: Reboot loop if negative display pins and type where provided
Fix #1163
2023-07-21 19:02:18 +02:00
Thomas Basler
9dbeec3a31 Fix: Set WiFi setScanMethod and setSortMethod also on first connect 2023-07-20 23:44:09 +02:00
Phantomias2006
e06740fbb8
Add data age at battery MQTT (#322)
* Add data age at battery MQTT

* Update README.md

typo

* Update MQTT_Topics.md

typo

* Update PylontechCanReceiver.cpp

typo
2023-07-19 09:47:37 +02:00
Bernhard Kirchen
f0def2ae89
Selective verbosity (#318)
* DPL: implement verbose logging switch

* MQTT: implement verbose logging switch

* power meter: implement verbose logging switch

* Hoymiles lib: implement verbose logging switch

* cpp linting: "final" makes "virtual" and "override" redundant

... however, using only "final" is not as verbose.
2023-07-18 09:57:03 +02:00
Phantomias2006
a7da000345
Feature: set Huawei offline parameters via MQTT (#315)
* Add Huawei offline parameters via MQTT

* Update README.md

Correction of the docu

* Update MQTT_Topics.md

Correction of the docu
2023-07-18 09:52:31 +02:00
Martin
c393e52185
Feature: add Home Assistant MQTT discovery for Pylontech battery (#314)
When OpenDTU has a Pylontech CAN Bus Battery connected and enabled, this
patch adds the discovery routine for Home Assistant

Signed-off-by: Martin Dummer <martin.dummer@gmx.net>
2023-07-17 09:50:58 +02:00
Bernhard Kirchen
cbc99d715f
DPL: increase backoff while inverter is kept shut down (#310)
if the new calculated power limit is below the minimum power limit
setting, the inverter is shut down. the shutdown() function is called
every time this condition is detected, which is also true if the
inverter is kept shut down for longer. that happens while the battery
is charging in particular (solar passthrough off). there are other
cases.

in such cases we still want to get into the DPL status "stable". to be
able to determine this stable state, we must know if the call to
shutdown did actually initiate a shutdown or if the inverter is already
shut down.

we then can forward this "changed" or "not changed" info up the call
chain, where the loop() will know that the system is actually stable.
2023-07-17 09:40:18 +02:00
helgeerbe
633ef88296 Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-07-12 13:45:19 +02:00
Bernhard Kirchen
f3297930b5
DPL: account for solar passthrough losses (#307)
* fix another fixable "passtrough" typo

the typo in the config's identifier is not changed to preserve
compatibility while not spending the effort to migrate the setting.

* webapp language: prefer SoC over SOC

* DPL: implement solar passthrough loss factor

in (full) solar passthrough mode, the inverter output power is coupled
to the charge controler output power. the inverter efficiency is already
accounted for. however, the battery might still be slowly discharged for
two reasons: (1) line losses are not accounted for and (2) the inverter
outputs a little bit more than permitted by the power limit.

this is undesirable since the battery is significantly drained if solar
passthrough is active for a longer period of time. also, when using full
solar passthrough and a battery communication interface, the SoC will
slowly degrade to a value below the threshold value for full solar
passthrough. this makes the system switch from charging the battery
(potentially rapidly) to discharging the battery slowly. this switch
might happen in rather fast succession. that's effectively
trickle-charging the battery.

instead, this new factor helps to account for line losses between the
solar charge controller and the inverter, such that the battery is
actually not involved in solar passthrough. the value can be increased
until it is observed that the battery is not discharging when solar
passthrough is active.
2023-07-12 13:20:37 +02:00
MalteSchm
95d7ac7adf
Disable debug mode, increasing power threshold for active channel detection (#301) 2023-07-12 13:19:24 +02:00
Thomas Basler
b8c75b02a0 Merge branch 'pr1003' into dev 2023-07-10 19:11:54 +02:00
Stephan
1871a9a692 use FSPI for esp32-c3 and revise device profiles 2023-07-10 19:04:13 +02:00
Thomas Basler
fe3d6588bc Feature: Turn off LED 1 if no inverters are enabled for polling
This means that e.g. at night, when polling at night is disabled, LED 1 will be turned off now.
2023-07-10 18:31:04 +02:00
Martin
cdf5c85510
fix: Home Assistant MQTT-Auto-Discovery with VE.Direct (#297)
In Home Assistant, when Home Assistant MQTT-Auto-Discovery is active,
almost all Sensors of the auto-discovered Victron device in Home
Assistant become "unavailable" after a short time - except those
Sensors with frequent changes like battery voltage or panel voltage.

This patch introduces regular mqtt updates for all VE.Direct sensors
when MQTT-Auto-Discovery is enabled.

Signed-off-by: Martin Dummer <martin.dummer@gmx.net>
2023-07-09 17:08:50 +02:00
Bernhard Kirchen
23ff4ef22a
DPL: do not use nullptr when printing debug messages (#303) 2023-07-09 16:42:50 +02:00
helgeerbe
2a858e096b fix: typo 2023-07-07 17:22:04 +02:00
helgeerbe
344498d440 fix: linting error 2023-07-04 14:55:55 +02:00
Bernhard Kirchen
107182f948
DPL: check more requirements and fix backoff initialization (#290)
* DPL: wait for valid time information

we know that the Hoymiles library refuses to send any message to any
inverter until the system has valid time information. until then we can
do nothing, not even shutdown the inverter.

* DPL: wait for device info to be ready

a calculated power limit will always be limited to the reported
device's max power. that upper limit is only known after the first
DevInfoSimpleCommand succeeded. wait for that information to be
available.

* DPL: fix initial calculcation backoff

if the calculation backoff is initialized to zero, the backoff will be
doubled to zero until a new, different power limit was calculated for
the first time. this lead to the DPL recalculating a power limit
hundreds of times without a backoff after startup.
2023-07-04 12:05:10 +02:00
Bernhard Kirchen
e457ab73f9
Fix vedirect polling (#291)
* VE.Direct: remove polling interval

the polling interval was meant to limit the amount of MQTT updates.
however, that is already controlled by the global MQTT publish interval.
the removed interval was instead used to limit polling of the VE.Direct
UART for incoming data.

the Victron device sends data unsolicited. the VeDirectFrameHandler does
not implement any polling mechanism. no data is ever sent to the Victron
device.

what the removed polling interval did was cause a buffer overrun of the
HardwareSerial class, since the incoming data was not processed in time.
so every five seconds, we read a whole valid VE.Direct frame, plus some
old data, which was not a whole frame, leading to VE.Direct error
messages to pop up.

with the polling interval removed, no framing errors are reported, and
instead we gain new data from the charge controller approximately ever
two seconds -- for free.

* VE.Direct: change texts to correct VE.Direct capital letters

* VE.Direct: improve "UpdatesOnly" switch labels

especially since the publish interval setting is gone, the label makes
it hard to comprehend what the switch does. update the texts to better
explain what the switch is used for.

use the same text on the VE.Direct info view.

* VE.Direct: use StatusBadge on info view

there were custom badges to indicate the VE.Direct settings. replace
those by the common StatusBadge to make then look the same as the other
badged on the info views.
2023-07-04 12:04:38 +02:00
helgeerbe
006f63ed02 feature: add digest auth on power meter
Power Meter -> HTTP(S) + Jason configuration allows now basic and digest authentication (all Shelly Gen2 devices)
2023-07-04 11:54:46 +02:00
helgeerbe
9a4eb75160 Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-07-02 14:32:12 +02:00
helgeerbe
1f39ed7b9b Merge branch 'pr/MalteSchm/288' into development 2023-07-02 14:28:51 +02:00
helgeerbe
afd8790c3c Merge branch 'pr/schlimmchen/287' into development 2023-07-02 14:20:25 +02:00
Bernhard Kirchen
99876d7c6b
DPL: fix the configured upper limit not being respected (#286)
the requested newPowerLimit was indeed limited to the configured maximum
inverter output and the result was stored in effPowerLimit. later,
however, effPowerLimit must be scaled up (if necessary), not
newPowerLimit. the latter variable is not respecting the configured
maximum inverter output.
2023-07-02 14:11:44 +02:00
Bernhard Kirchen
097d464bbb
DPL: use vedirect isdatavalid (#283)
* DPL: use VeDirect.isDataValid()

in case the communication to the Victron charger is disrupted, the
respective values in VeDirect.veFrame are not invalidated such that we
would notice a problem. instead, isDataValid() should be used to make
sure that the Victron charger is actually alive and that we can trust to
use the reported values.

* DPL: simplify canUseDirectSolarPower return statement
2023-07-02 14:10:47 +02:00
MalteSchm
e279ce08c4 Dynamic power control and more power control modes on the Huawei PSU 2023-07-01 12:37:55 +02:00
Bernhard Kirchen
9aeb1583b5 DPL: consider the system stable when reusing the old limit
a new status is needed to communicate that no update was sent to the
inverter because its power limit is still valid. in this case,
calculating a new power limit is delayed by an exponentially increasing
backoff. the maximum backoff time is ~1s, which is still plenty fast.

the backoff is actually necessary for another reason: at least
currently, a lot of debug messages are printed to the console. printing
all that information in every DPL loop() is too much.
2023-06-30 21:00:51 +02:00
Bernhard Kirchen
461fce8ff4 DPL: do not repeat being disabled 2023-06-30 21:00:51 +02:00
Bernhard Kirchen
9bab740c43 DPL: replace _plState enum with a simple boolean switch 2023-06-30 21:00:51 +02:00
Bernhard Kirchen
b2d58af5e8 DPL: separate unconditional solar passthrough mode
the unconditional solar passthrough mode, configured using MQTT, works
differently than the normal mode of operation. it is also independent
from the power meter reading. if this mode is active, a shortcut is
taken to a function that implements the actions for this mode. this is
convenient since we don't have to consider special cases in the code
that handles normal mode of operation.
2023-06-30 21:00:51 +02:00
Bernhard Kirchen
71079fa0cc DPL: work on internal copy of pointer to inverter
the DPL already took care to shut down the inverter if anything fishy
was going on, mainly to make sure that the battery is not drained.
however, some cases were missed:

* if the configuration changed such that another inverter is now
  targeted, the one the DPL controlled previously was not shut down.
* if the configuration changed such that another inverter (different
  serial number) was configured at the same index, the previous one
  was not shut down.

this change corrects these problems by making the DPL keep a copy of the
shared_ptr to the inverter. the shared_ptr is only released once the DPL
shut the respective inverter down.
2023-06-30 20:04:39 +02:00
Bernhard Kirchen
2970e84193 DPL requirement: disabled inverter commands
if the inverter is not configured to be sent commands to, the DPL is
unable to control it, so the loop is aborted.
2023-06-30 20:04:39 +02:00
Bernhard Kirchen
18b1076660 DPL: improve responsiveness
this implementation checks all requirements for a new power limit to be
calculated, one after the other. if any requirement is not met, a
respective status is announced.

status messages are communicated on the (serial) console. these can also
be displayed easily on the web app in the future. the status texts
explain clearly what the DPL is currently doing, which aids
understanding how the DPL works. the status is only announced if it
changes, or after a fixed interval.

as each requirement is checked individually, the code readability is
improved as well. previously, all the respective conditions had to be
checked as well, but the statements were more complex.

the DPL loop is now executed with high frequency, i.e., it does not wait
for a fixed timespan to pass before checking requirements. it always
aborts on the first unmet requirement. this should improve responsiveness,
as the DPL checks all requirements more often.

the DPL now waits for all power commands and power limit updates to
complete. when that is the case, a settling time elapses. after the
settling phase, the DPL waits for a new update from the inverter and
from the power meter. now it can be assumed that the values are in sync.
it then makes sense to calculate a new power limit immediately, which
the DPL then does.
2023-06-30 20:04:39 +02:00
Bernhard Kirchen
0b0bcf1dfb fix typo: getLastRequestedPowe*w*rLimit() 2023-06-30 20:04:39 +02:00
Martin
8433820529
Fix typo in error messages (#280)
Signed-off-by: Martin Dummer <martin.dummer@gmx.net>
2023-06-29 13:06:28 +02:00
helgeerbe
0caffe9411 fix: Allow use GPIO0 as onBattery pins 2023-06-29 13:04:35 +02:00
Bernhard Kirchen
d6163ddb7d
set default values for pin mappings if not provided (#275) 2023-06-26 11:57:29 +02:00
Bernhard Kirchen
07bb0b03f7
DPL hysteresis fix and refactor of setNewPowerLimit() (#264) 2023-06-26 11:52:33 +02:00
Bernhard Kirchen
9995c1172e
VE.Direct live view enhancements (#269)
* add calculated values to VE.Direct data

solar current, battery output power, and the charger's efficiency can be
calculated from the values reported by the charger. the efficiency must
be taken with a grain of salt. it seems that the solar power value and
the battery output voltage/current are not always in sync. for that
reason a moving average is used to smooth out the calculated efficiency
value.

* show calculated VE.Direct values in web live view

order the values and translations similarly for the input and output,
starting with power at the top, then voltage, then current as the last
of these three.

* VE.Direct live view: use 'd' as unit for days

'd' is the SI unit symbol for days and does not need translation, which
is desirable as units are not translated throughout the project.

* refactor VE.Direct live view

* move Dynamic Power Limiter data into its own type.
* split VE.Direct data into three types: "device", "input", and
  "output". hence all input and output values are now ValueObject, which
  allows to iterate over them using a loop without typing issues.
* generate the tables with input and output values using a loop, rather
  than defining each row individually.
* localize numbers using $n (vue method), which fixes switching the
  number format (dot vs. comma) when switching the language.
* use no decimal point for power values (they are integers), three
  decimal points for kWh values (charger only reports two decimal
  places, but three are easier to read since the unit is *kilo* Wh), one
  decimal point for the efficiency, and two for voltage and current.
* update language tokens to avoid mapping JSON keys to language keys
  (use the JSON keys to access the language tokens).
* re-structure language tokes so the brief keys took over from
  VeDirectFrameHandler always make sense (nest into "input" and
  "output").
* order values similarly from top to bottom: power, then voltage, then
  current. this is following the order of the inverters' details.
* group values by type/unit (yield and max. power) and order them
  "newest" to "oldest" from top to bottom.
* increase the DynamicJsonDocument as it was too small to hold the newly
  added data.

* update webapp_dist to include VE.Direct live view refactoring
2023-06-22 21:32:20 +02:00
Bernhard Kirchen
016e30ec00
DPL: fix efficiency calculation (#270)
there is no need to assume and hardcode a fixed efficiency for the
Victron solar charger. the charger reports the voltage and current at
its battery terminal, which can be used to calculate the charger's
actual power output.

the fallback to 100% for the efficiency of the Hoymiles inverter, in
case it is not producing power, is too optimistic. this commit proposes
to use 96.7% as the efficiency for that case, which is the peak
efficiency for many (all?) Hoymiles inverters as per datasheet. that
value should be closer to the real efficiency that will be achieved once
the inverter is turned on.
2023-06-22 21:30:33 +02:00
helgeerbe
cd1db49a98 Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-06-22 21:14:12 +02:00
Thomas Basler
93057fc3dc Feature: Added touch icon for iOS and Android
Implements #1060
2023-06-21 22:44:18 +02:00
Thomas Basler
e8fee49dc8 Allow the non-existence of the HOYMILES_PIN_ defines 2023-06-21 19:59:35 +02:00
Thomas Basler
30fbd98274 Fix: Reboot loop occoured when no rf module was configured 2023-06-21 19:56:14 +02:00
helgeerbe
fd58ad2003 feat(add ability to do a polite power meter read): 2023-06-14 16:21:58 +02:00
helgeerbe
080a3eb29e Merge branch 'PM_onDemand' into development 2023-06-14 13:22:19 +02:00
helgeerbe
da7628dafc Fix: Respect minimum on demand poll rate for power meter 2023-06-14 13:21:50 +02:00
helgeerbe
ceb28030a4 Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-06-14 13:02:00 +02:00
helgeerbe
ded5ceec58 Fix: Make power limiter intervall configurable
Allows to change the power limiter intervall settings in the config file.
2023-06-14 12:49:54 +02:00
helgeerbe
86ee7e1a64 perf(PowerMeter): query PowerMeter on demand
In addition to the cyclic query of the power meters, they will be queried on demand when total power is requested and last update is older than 1 second.
2023-06-14 11:25:54 +02:00
Dominic Michel
3562e85b5e Change metric type back to gauge 2023-06-13 20:59:24 +02:00
helgeerbe
8dac88e7b9 Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-06-12 13:07:44 +02:00
helgeerbe
0fd7b75e83 Fix(Power Limiter): hysteresis is not repected properly 2023-06-12 13:06:31 +02:00
Thomas Basler
08f47c2f4c Fix: Prometheus syntax error with wifi_bssid
Fixes #1021
2023-06-11 20:04:23 +02:00
helgeerbe
e68baa3086 Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-06-09 13:16:56 +02:00
MalteSchm
e0a8da84d7 full solar passthrough 2023-06-09 13:09:58 +02:00
Thomas Basler
88cb59d177 Feature: Publish BSSID via prometheus 2023-06-08 19:57:07 +02:00
Thomas Basler
b3e41c957b Feature: Publish BSSID via MQTT 2023-06-08 19:56:44 +02:00
Thomas Basler
91d3cd1da2 Feature: Show BSSID in the web interface 2023-06-08 19:56:22 +02:00
Thomas Basler
721f82a17c Added additional exception handler to also show unknown exceptions in live data api endpoint 2023-06-08 19:39:56 +02:00
Thomas Basler
3b6c529efb Fix: Do not publish leading blanks in MQTT payload
Fixes #1011
2023-06-07 17:58:31 +02:00
helgeerbe
8298a0c36f
Merge pull request #255 from madmartin:inverter_restart
Feature: add daily restart for the inverter
2023-06-05 10:10:14 +02:00
Martin Dummer
c727e21a49
Feature: add daily restart for the inverter
Add a configurable restart option for the inverter to set the "YieldDay"
values to zero.

Signed-off-by: Martin Dummer <martin.dummer@gmx.net>
2023-06-04 09:14:42 +02:00
helgeerbe
91ce844b36 fix(linter warining): use snprintf istead of strcopy 2023-06-02 13:12:42 +02:00
MalteSchm
e7c8a89bd3 inital version of full solar passthrough
Webinterface change to set full solar passthrough values

Adding webapi and config changes to enable full solar passthrough over certain battery Soc

inital version of full solar passthrough in power limiter

Passthrough mode can be enabled via MQTT

translations

re-enable comment

remove unused variable
2023-06-02 12:49:24 +02:00
Thomas Basler
7f267ff2fb Fix: Lint Error: Almost always, snprintf is better than strcpy 2023-06-01 23:30:13 +02:00
Thomas Basler
5a37948ca9 Fix: If no sunset/sunrise calculation is possible a wrong value is shown
This is catched now and a proper message is shown in the web UI. Also the mode is set to day.
2023-06-01 18:39:50 +02:00
Thomas Basler
24f063dd7b Fix: Prevent partly calculated total data in web ui and display
Leads to zeros where no zeros should be.
2023-05-30 22:10:27 +02:00
Thomas Basler
1c8bd8091b Feature: Allow reordering of the inverters in the live view
Reordering can be done in the inverter settings via drag&drop.
2023-05-29 20:17:07 +02:00
Thomas Basler
e7198073af Feature: Allow configuration of sunset type 2023-05-24 19:21:44 +02:00
Martin
52af52eb3a
Pylontech enhancement (#239) 2023-05-24 09:17:38 +02:00
helgeerbe
a3e7439181 fix(action): sort tags in chronological order 2023-05-24 09:13:04 +02:00
Thomas Basler
752362d2df Feature: Added localization setting to display
Its possible to change the language of the display
2023-05-23 18:25:12 +02:00
helgeerbe
8b64671151 doc: warning, that only 5 inverters are supported at max 2023-05-23 11:04:56 +02:00
helgeerbe
13b318690d fix: linting errors 2023-05-23 10:24:06 +02:00
helgeerbe
47f81f2579 breaking change: Reduce maximum number of invertes to 5 to keep livedata working
livedata json is now calculated as 4096 * MaxInvertes
2023-05-23 10:15:37 +02:00
helgeerbe
b7ac70b1ca Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-05-23 09:19:57 +02:00
Thomas Basler
40820c07f2 Use the new data store in the graphic display class.
With this patch, the display turns off if no inverter is reachable anymore. Previously it turned off if the production was zero.
This fixes #933
2023-05-21 22:40:32 +02:00
Thomas Basler
cd98941c5d Implement global data store to handle all invert total values
Use the new values in the LED, MQTT and Web interface.
2023-05-21 22:37:33 +02:00
helgeerbe
1c7b7d3cdf Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-05-10 18:16:25 +02:00
Thomas Basler
efcbd81927 Feature: Add used PIO environment to the system info page 2023-05-08 21:43:50 +02:00
MalteSchm
065c169b20
Set initial PL state in init() to avoid inverter shutdown on reboot... (#224) 2023-05-08 13:25:02 +02:00
helgeerbe
178d40d5b4 Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-05-04 20:24:29 +02:00
Thomas Basler
65b728eebb Fix: No OpenDTU startup of CDC (like Pico or ESP32-S3) devices if no usb host is connected
Should also fix #826
2023-05-03 21:16:27 +02:00
MalteSchm
569edbe69e
static casts set last requested limit for all cases where inverter power is changed (#213) 2023-05-01 21:20:49 +02:00
helgeerbe
8021052cfd PL remove debug messages 2023-04-29 22:53:50 +02:00
helgeerbe
e5af5be70a remove comment 2023-04-29 21:53:05 +02:00
MalteSchm
db4125ae7a debug printouts, removed unnecessary check causing inverter to toggle 2023-04-29 14:28:24 +02:00
helgeerbe
dae4c6fbf5 Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-04-28 22:38:39 +02:00
Markus Krause
a56d5adb77 fix SPI assignment across generations 2023-04-28 21:26:22 +02:00
Thomas Basler
3504884836 Fix: xSemaphoreTake was useless
There was no check of the return value implemented therefore xSemaphoreTake was just executed and not locked
2023-04-28 21:02:10 +02:00
helgeerbe
5d4c6866da
fix: ignore MQTT messages for disabled components #203 (#204) 2023-04-28 19:26:58 +02:00
MalteSchm
c621f2d3e3
Power limiter fixes (#201) 2023-04-28 13:59:18 +02:00
MalteSchm
70060559da
Bring back the sun indicator (#195)
* Adding states to display in UI

* Adding states to display in UI
2023-04-27 19:10:12 +02:00
MalteSchm
6b437b5ea1
Inverter toggle fix (#196)
* updating the interface to calcPowerLimit to include both energy sources

* Fixing definition
2023-04-27 19:09:48 +02:00
helgeerbe
c337df605c Merge branch 'pr/MalteSchm/172' into development 2023-04-26 12:37:31 +02:00
helgeerbe
e91935ab38 Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-04-26 11:47:19 +02:00
helgeerbe
37b5edb010 Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-04-25 18:51:18 +02:00
Thomas Basler
5996fb0edf Fix: MQTT topics ac/yieldday and ac/yieldtotal are swapped
Fix #843
2023-04-25 18:43:56 +02:00
helgeerbe
71dda4b89c Merge branch 'pr/qubeck/156' into development 2023-04-25 18:39:02 +02:00
MalteSchm
0a0488f73a refactored use solar power code 2023-04-25 12:03:41 +02:00
MalteSchm
322f532ac0 Proper handling of use solar power only case 2023-04-25 10:41:35 +02:00
Thomas Basler
98da2b64e2 Rename FLD_PRA to FLD_Q 2023-04-24 22:29:59 +02:00
Thomas Basler
26cbc496a7 Feature: Implemented MQTT publishing of total values
If one or more inverter is not reachable the flag is_valid changes to zero. Disabled inverters are ignored.
2023-04-24 18:51:30 +02:00
MalteSchm
3861ab89f1 WebApi update to include power values 2023-04-23 18:49:32 +02:00
helgeerbe
75a59f5d1d
Merge pull request #175 from MalteSchm:huawei_spi_interface_fix
Changing Huawei SPI interface
2023-04-23 18:32:36 +02:00
MalteSchm
8c9afbcdc0 fix an issue if inverter is behind power meter 2023-04-23 11:30:08 +02:00
Thomas Basler
04f62e03b8 BREAKING CHANGE: Web API Endpoint /api/eventlog/status no nested serial object
It's not required as the  eventlog just contains events from requested inverter
2023-04-20 22:41:55 +02:00
helgeerbe
38b990fbbc Fix: PowerLimiter is now casted to signed int to allow negativ values. 2023-04-20 20:02:59 +02:00
helgeerbe
a1b3bdfee8 Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-04-18 12:09:22 +02:00
Thomas Basler
5d2656550c Optimize detection if RF module is configured
Use PinMapping method instead of dedicated method in Hoymiles lib --> Same result but reduces variables
2023-04-17 23:19:53 +02:00
Thomas Basler
59f43a82a8 BREAKING CHANGE: Web API Endpoint /api/devinfo/status requires GET parameter inv=
Only the requested inverter is sent to the client. This reduces the size of the json response --> Less memory.

It should also fix #814.
2023-04-17 21:48:16 +02:00
Thomas Basler
af3a277e30 Introduced HoymilesRadio property to determine if a configuration attempt was done 2023-04-17 18:59:56 +02:00
helgeerbe
40cee1f9ca Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-04-17 11:08:55 +02:00
MalteSchm
3504924bb0 Changing SPI interface 2023-04-16 18:34:09 +02:00
MalteSchm
4ddaa7643b make sure that PL is enabled if user uses webinterface 2023-04-16 18:30:21 +02:00
MalteSchm
a306bc1351 Bugfix for Mqtt enable / disable (was float, uses int now) 2023-04-16 18:28:09 +02:00
Thomas Basler
15156b4b87 Set CMT frequency only if a valid pin config was found 2023-04-15 10:55:48 +02:00
Thomas Basler
c3368450f6 Initialize spiClass only if valid pin config was found 2023-04-15 10:55:48 +02:00
Thomas Basler
50ce7f014d Expose min and max frequency in HoymilesRadio_CMT 2023-04-15 10:55:48 +02:00
Thomas Basler
371e405eed Added configuration of CMT modules frequency to webapp 2023-04-15 10:55:48 +02:00
Thomas Basler
996404ceed Introduce gpio2 for the CMT2300A module
This implements the sending interrupt instead of polling. On the other hand, gpio3 is made optional.
2023-04-15 10:55:48 +02:00
Thomas Basler
854fcdaeae Allow configuration of the TX PA Level of the CMT2300A module 2023-04-15 10:55:48 +02:00
Thomas Basler
3e1b778565 Change max power limit from 1500W to 2250W to support HMS/HMT inverters 2023-04-15 10:55:47 +02:00
Thomas Basler
0ec90e0000 webapp: Adjusted radio problem hint in home view to detect problems of nrf and cmt radios 2023-04-15 10:55:47 +02:00
Thomas Basler
c19d2007bd webapp: Added cmt radio status to system overview 2023-04-15 10:55:47 +02:00
Thomas Basler
de2b7ab2d2 Check that all RF modules as in idle mode before sending mqtt packages 2023-04-15 10:55:47 +02:00
Thomas Basler
b7fb294368 Set DTU serial for CMT modules 2023-04-15 10:55:47 +02:00
Thomas Basler
ef614751b1 webapp: Show CMT pins in device manager 2023-04-15 10:55:47 +02:00
Thomas Basler
45882543b6 Allow dynamic pin mapping for CMT module 2023-04-15 10:55:47 +02:00
Thomas Basler
8404dd57a7 Add a HoymilesRadio base class
This enables to have multiple radio implementations while the inverter classes just refere to the base class
2023-04-15 10:55:47 +02:00
Thomas Basler
a7e9aaa862 Move reference to the radio instance into the inverter instance
This is required to support different radios for different inverters
2023-04-15 10:55:47 +02:00
helgeerbe
1dc73f91ee Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-04-13 10:18:49 +02:00
MalteSchm
690025e5fd fixing a bug from merging and remove a leftover debug message 2023-04-13 10:06:06 +02:00
MalteSchm
be7a43fbfb Removing un-necessary timestamp, commenting code and cleanups 2023-04-13 09:47:12 +02:00
MalteSchm
01849dc90a adding Mqtt handling to main.cpp 2023-04-13 09:47:10 +02:00
MalteSchm
ee376827fd merging functionality from PL refactor 2023-04-13 09:47:07 +02:00
MalteSchm
9999fa28e8 refactor state machine
merging
2023-04-13 09:46:35 +02:00
MalteSchm
ee82c8c9b8 adding option to disable power limiter via mqtt
adding option to disable power limiter via mqtt - adding missing file
2023-04-13 09:44:48 +02:00
MalteSchm
9efe076cc2 resolving merge conflict
adding missing statement from merge

fixing a bug introduced in merge
2023-04-13 09:39:04 +02:00
MalteSchm
fc5089e70b resolving merge conflict 2023-04-13 09:36:00 +02:00
qubeck
b79619bf8b add explicit checks to avoid potential div. by zero on application of artificially increased power limit if channel power becomes zero 2023-04-12 20:44:38 +02:00
Martin Dummer
bea0a738c1
include/Configuration.h: rename MQTT_MAX_ROOT_CA_CERT_STRLEN
rename const MQTT_MAX_ROOT_CA_CERT_STRLEN to more generic name MQTT_MAX_CERT_STRLEN

Signed-off-by: Martin Dummer <martin.dummer@gmx.net>
2023-04-12 11:58:27 +02:00
Martin Dummer
d920726a76
src/WebApi_mqtt.cpp: rename function getRootCaCertInfo
rename function WebApiMqttClass::getRootCaCertInfo to more generic
name WebApiMqttClass::getTlsCertInfo

Signed-off-by: Martin Dummer <martin.dummer@gmx.net>
2023-04-12 08:47:24 +02:00
Martin Dummer
0db4b5f226
Fix: src/WebApi_mqtt.cpp: typos in error messages
Signed-off-by: Martin Dummer <martin.dummer@gmx.net>
2023-04-12 08:37:49 +02:00
Martin Dummer
971ae6d1be
Feature: MQTT add TLS authentication
User asked for TLS client certificate based login from DTU to MQTT
server. This PR implements storage and use of x509 client certificate
and private key.

Signed-off-by: Martin Dummer <martin.dummer@gmx.net>
2023-04-12 08:33:10 +02:00
MalteSchm
2d7115e1e8 typo 2023-04-11 18:58:18 +02:00
MalteSchm
f6d0b0997f typo 2023-04-11 18:57:57 +02:00
berni2288
19b2dd4c7a
PowerMeter: Whitespace and {} fixes 2023-04-07 20:22:35 +02:00
qubeck
00def1d8d1
Generic SML based power meters support (#146)
* add support for energy & power readings on SML based power meters, taking OBIS 16.7.1 for power (using mod. SML Parser lib. by olliiiver)

* switched SML read to use software serial

* made total power meter response controled by meter source to obtain either the sum of phase powers or explicit total power provided by meter

* made mqtt subscriptions to power meter topics meter source dependend

* simplified SML read loop and OBIS handler registration, + minor refactoring

* minor cleanup/style changes and optim. PowerMeter

* fixed build, add SOURCE_SML == 4

* removed optional usage of HW serial for SML power meter

* switched to usage of _powerMeter1Power for SML power reading to allign better with existing code

---------

Co-authored-by: helgeerbe <helge@erbehome.de>
2023-04-07 20:20:00 +02:00
helgeerbe
e29708f871 fix infinite state switch if battery is above
startThreshold and solar passtrhough is enabled
2023-04-06 18:32:50 +02:00
helgeerbe
ef51d75f2c Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-04-06 10:46:02 +02:00
berni2288
09fb0618b4
Merge branch 'MalteSchm-webinterface_summary_updates' into development 2023-04-05 22:27:17 +02:00
Thomas Basler
ede572f6e3 Status LED's: Implemented
They can be activated using device profiles.
2023-04-05 11:56:59 +02:00
Thomas Basler
ca0b8e9afc Remove not required F() macro. Frees ~20kb flash. 2023-04-05 11:54:50 +02:00
Thomas Basler
dab5b4d723 webapp: Show inverter status in grey if polling is disabled (e.g. at night) 2023-04-05 11:52:35 +02:00
Thomas Basler
d501c4b836 Uses VSPI instead of HSPI and compatibility for C3, S2 and S3 MCUs 2023-04-05 11:51:09 +02:00
Thomas Basler
7d50fa373e Allow use GPIO0 as NRF pins 2023-04-05 11:51:09 +02:00
MalteSchm
801ad469c5 corrected day yield 2023-04-05 10:51:07 +02:00
Bernhard Kaszt
8ca664a8fe
Use AC power for limit calculation (= Support directly connected PV panels with Power Limiter) (#154)
* Power limiter: Use the actual AC power for limit calculation

instead of the last set limit.

In order support setups without battery connected (sources that don't exhaust the limit)
2023-04-05 10:30:03 +02:00
helgeerbe
c0dff1e7df catch bad_alloc for Huawei and Pylontech WebApi_ws 2023-04-05 09:48:38 +02:00
MalteSchm
459f9ffc2c merging branches 2023-04-04 21:43:24 +02:00
MalteSchm
169ea3d5d5 Api extensions 2023-04-04 21:31:32 +02:00
MalteSchm
abffc38c11 fixing typos 2023-04-04 21:30:53 +02:00
Thomas Basler
ae323cd26f Status LED's: Implemented
They can be activated using device profiles.
2023-04-04 18:53:23 +02:00
Thomas Basler
d6028cbd50 Remove not required F() macro. Frees ~20kb flash. 2023-04-04 18:51:18 +02:00
helgeerbe
0c34554b9c don't set newPowerlimit if newLimit AND lastLimit in target window 2023-04-04 18:20:06 +02:00
helgeerbe
160b5b5b01 handle bad_alloc for vedirect status 2023-04-04 18:17:53 +02:00
qubeck
cd4a327671 limiting the artificialy increased power limit to inverter maximum power 2023-04-04 17:11:59 +02:00
Thomas Basler
acf413b616 webapp: Show inverter status in grey if polling is disabled (e.g. at night) 2023-04-03 22:25:32 +02:00
Bernhard Kaszt
e35254c8f2
New Power meter support: HTTP(S) + JSON (Shelly 3EM, Tasmota, Volkszähler etc.) (#153)
* Implement HTTP(s) + JSON type Power Meter support

---------

Co-authored-by: Bernhard Kaszt <berni@bcserv.eu>
2023-04-03 21:36:20 +02:00
qubeck
bd57d0f19a fixed casting issues 2023-04-02 22:26:44 +02:00
qubeck
a1da3f9842 producing DC channel aware artificial increase of applied power limit to mitigate fixed distribution of applied power limit across all channels 2023-04-02 22:13:43 +02:00
MalteSchm
20bb7fc372
Show (Pylontech) battery infos in Live View
* adding data age to battery data

* Add battery enabled flag

* Webapi and websocket api for Battery

* Webinterface for battery

* fixed bug due to naming inconsistencies

* cleaned up rounding

* dist update

* change typename to uppercase

* reverting to original file
2023-04-02 20:58:28 +02:00
MalteSchm
6b85b8d4a2 Merge remote-tracking branch 'upstream/development' into battery_webinterface 2023-04-02 14:28:37 +02:00
MalteSchm
78838585f7 fixed bug due to naming inconsistencies 2023-04-02 14:17:23 +02:00
MalteSchm
59c84bcb85 Webapi and websocket api for Battery 2023-04-02 13:00:46 +02:00
Bernhard Kaszt
4de043f3d4 Fix crash when AC charger is enabled but initialization fails 2023-04-02 10:46:07 +02:00
Bernhard Kaszt
c86c5133f0 Fix code style in Huawei files 2023-04-02 10:42:36 +02:00
MalteSchm
a0bbf61db2 Add battery enabled flag 2023-04-02 10:11:48 +02:00
MalteSchm
e514ef744b adding data age to battery data 2023-04-01 15:34:32 +02:00
MalteSchm
d1e43c11b9 Run Huawei code only when enabled 2023-04-01 14:43:24 +02:00
MalteSchm
1f6301c2c0 Check for empty MQTT topic
Please enter the commit message for your changes. Lines starting
2023-04-01 14:02:09 +02:00
MalteSchm
f4455ccb93 reverting 2023-04-01 13:50:04 +02:00
Thomas Basler
9b74badda8 Uses VSPI instead of HSPI and compatibility for C3, S2 and S3 MCUs 2023-03-30 23:24:11 +02:00
Thomas Basler
fe5d3e29e3 Allow use GPIO0 as NRF pins 2023-03-30 23:19:29 +02:00
MalteSchm
a091e80ed0 deal with un-initialized values 2023-03-29 19:07:16 +02:00
MalteSchm
a968f09d73 Pin config 2023-03-29 19:06:41 +02:00
MalteSchm
ece131995a linting errors 2023-03-29 19:04:41 +02:00
helgeerbe
b3c17c8ee8 Merge branch 'pr/MalteSchm/144' into development 2023-03-27 22:16:53 +02:00
helgeerbe
e0a80734f3 Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-03-27 21:10:03 +02:00
MalteSchm
2aad13dc72 Changing SPI interface 2023-03-27 20:47:35 +02:00
MalteSchm
07ea03d12b fixing linting issue 2023-03-26 15:46:33 +02:00
MalteSchm
06d5da50a2 the implementation has used HSPI with the default VSPI pins for a long time. Change VSPI and HSPI to use the right pins in order to avoid confusing 2023-03-26 12:36:21 +02:00
MalteSchm
d80f62d1b9 disable Mqtt output when disabled 2023-03-26 12:13:06 +02:00
MalteSchm
26eedc9701 align mqtt format with the other sources 2023-03-26 11:56:41 +02:00
MalteSchm
89be653a51 inverse logic for power pin (active high) 2023-03-26 11:56:11 +02:00
MalteSchm
a4767827b4 merging master 2023-03-26 11:25:08 +02:00
MalteSchm
3b57550ead adding basic mqtt support 2023-03-26 11:02:40 +02:00
MalteSchm
bbf3d44d69 working with a reference 2023-03-26 11:01:32 +02:00
MalteSchm
0b5c47cd2e Adding enable/disable option and pin to control a switch/relais to power the Huawei PSU 2023-03-26 11:00:37 +02:00
helgeerbe
7d48e426dc free JsonDocument for livedata as soon as possible 2023-03-24 15:39:03 +01:00
MalteSchm
8576034b77 Adding Huawei CAN interface, web-api, websocket and Mqtt extensions to access the data 2023-03-24 10:03:22 +01:00
Thomas Basler
8d8c7f8a71 Fixed typo: Successfull --> Successful 2023-03-23 23:30:55 +01:00
Thomas Basler
21718a9e8f Fix #736: Check for payloads < 0 and ignore them 2023-03-23 21:18:00 +01:00
helgeerbe
3f8226c36c Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-03-23 19:14:14 +01:00
helgeerbe
0832ef86e4 reboot after power meter settings 2023-03-23 19:10:29 +01:00
helgeerbe
55dc4dbdfc reinitialize mqqt subscription after reconnect 2023-03-22 17:47:15 +01:00
helgeerbe
5d5124dd5b fix last power meter update time 2023-03-22 14:53:36 +01:00
helgeerbe
a441a6eaf7 fix mqqt supscibe in power meter 2023-03-22 14:11:55 +01:00
helgeerbe
aaa9f5cd98 power meter settings were not restored. On reboot only default were set 2023-03-22 12:34:47 +01:00
helgeerbe
41da6d489d add missing webapi init for powermeter 2023-03-22 11:34:55 +01:00
Eugen
effd4e89ab
BF: get powerTotal from PowerMeter 2023-03-22 08:21:34 +01:00
Adminius
05a5b2367b PowerMeter Class + SDM PowerMeter support 2023-03-21 23:46:54 +01:00
Thomas Basler
ac73747a29 Fix #723: For some reason, a space was added before 1 digit numbers 2023-03-20 18:05:43 +01:00
helgeerbe
19252629cb minimum panel DC power 20W 2023-03-20 15:17:07 +01:00
helgeerbe
a6c852a82c if new limit too low, turn inverter off
within state
2023-03-20 12:35:29 +01:00
helgeerbe
2dc7089aa6 Start at night 2023-03-19 22:53:24 +01:00
helgeerbe
b9acbe6f2c off when newPowerLimit < lowerLimit 2023-03-18 23:50:34 +01:00
helgeerbe
06370baa0e Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-03-18 22:42:05 +01:00
helgeerbe
c95468f972 fix comparison between int and double 2023-03-18 14:44:28 +01:00
Thomas Basler
75364f89cb Publish all valid digits via mqtt 2023-03-16 19:29:37 +01:00
helgeerbe
46ce6ad50f Implement battery drain strategies:
- empty when full
- empty at night
2023-03-16 17:48:22 +01:00
helgeerbe
32a96bbd06 change all watt related vars to
int32_t to avoid cast problems with negativ values.
2023-03-16 12:34:14 +01:00
helgeerbe
04c7e4fa01 fix cast error with unsigned int
which results in wrong power limit settings if values become < 0 due
 to power export to the grid.
2023-03-16 12:17:14 +01:00
Thomas Basler
2e33f5cd51 Display: Implement rotation setting and removed icons 2023-03-15 20:20:14 +01:00
helgeerbe
9214897245 for watt use uint32_t as std type to
avoid cast problems to uint16_t
2023-03-13 11:38:26 +01:00
Bernhard Kaszt
e95acbec46 PylontechCanReceiver.cpp: Cosmetic changes 2023-03-12 18:47:29 +01:00
MalteSchm
63c956af15 swap can library to better support newer ESPs 2023-03-12 17:27:41 +01:00
helgeerbe
01a2ffaed5 [Request] Show actual power limiter state in live view helgeerbe/OpenDTU-OnBattery#134 2023-03-10 16:29:00 +01:00
helgeerbe
43dc10b868 Merge branch 'inverter-settings' into development 2023-03-09 12:43:03 +01:00
helgeerbe
8df2c16cce ensure STATE_DISCOVER if PowerLimter is enabled 2023-03-09 10:22:08 +01:00
helgeerbe
418fea2cfc fix veStruct
* PPV is int not double
* fix: initialize veStruct to 0 to avoid random data on startup
2023-03-09 10:16:55 +01:00
helgeerbe
6f3e33c0b1 exit loop after turn inverter on or off 2023-03-08 22:11:01 +01:00
Bernhard Kaszt
a66f818e75 Hide Victron Ve.direct UI elements from Live page when disabled
Resolves #91
2023-03-08 19:54:19 +01:00
Markus Dobel
9eff5f228b feat: export panel settings (name, max power, offset) as prometheus metrics 2023-03-08 09:11:25 +01:00
helgeerbe
716fc867a1 powerLimiter with state machine 2023-03-07 21:04:19 +01:00
Bernhard Kaszt
06a0f76fed Fix local build working but Github build failing 2023-03-05 20:45:27 +01:00
Bernhard Kaszt
06fbdf1f12 Add Pylontech battery to device pin manager 2023-03-05 19:55:56 +01:00
Bernhard Kaszt
304d90062d Revert broken change in condition that sets _consumeSolarPowerOnly
6709338dbd
2023-03-05 16:30:53 +01:00
Bernhard Kaszt
a6e720f154 Powerlimiter: Remove MQTT Topic debug message 2023-03-05 15:41:21 +01:00
Bernhard Kaszt
804f225908 Fix _consumeSolarPowerOnly sometimes being set to false when it shouldn't 2023-03-05 13:32:18 +01:00
helgeerbe
b70407d7fe Initilise variables 2023-03-04 13:02:30 +01:00
helgeerbe
9391b11403 fix start inverter 2023-03-04 11:59:10 +01:00
helgeerbe
b7dda83545 use efficiency factor if limit is set to
victronChargePower
2023-03-03 20:34:11 +01:00
helgeerbe
cf4a35e148 fix starting and stopping inverter 2023-03-03 19:51:04 +01:00
helgeerbe
6709338dbd fix setting consumeSolarPowerOnly 2023-03-02 16:18:44 +01:00
helgeerbe
67a5217482 start inverter if power consumption greater or equal lower power limit 2023-03-02 14:27:42 +01:00
helgeerbe
3e38941b57 start inverter only if not exporting to grid 2023-03-01 13:34:27 +01:00
helgeerbe
6241a31e8c comment out full wifi scan 2023-03-01 12:09:53 +01:00
helgeerbe
4a51ae5038 victron charge power is integer 2023-03-01 10:23:37 +01:00
helgeerbe
26a8809121 stop inverter, if exporting power to grid 2023-02-28 13:09:10 +01:00
helgeerbe
3b62d5708a Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-02-27 07:42:46 +01:00
Thomas Basler
4d18ccf01d Prometheus API: Only output the channels if they where read at least once 2023-02-26 19:31:37 +01:00
helgeerbe
e9fce49fee fix lint error 2023-02-25 22:23:05 +01:00
helgeerbe
32342dcd5d fix voltage threshhold to 2 decimal digits 2023-02-25 22:12:44 +01:00
helgeerbe
17dd9db946 set min target power consumption to 0 2023-02-25 20:17:25 +01:00
helgeerbe
3ed61319ad fix config read for power consumption 2023-02-25 18:58:41 +01:00
helgeerbe
1e968a1713 Add target for power consumption 2023-02-25 16:28:21 +01:00
helgeerbe
3f3540bd33 print ve.direct rx, tx pins on init 2023-02-25 15:29:00 +01:00
Thomas Basler
c67b3e3cbd Prometheus API: Set correct metrics type 2023-02-24 19:10:35 +01:00
helgeerbe
28b24d01ad implement UI for target power consumption 2023-02-24 16:13:32 +01:00
helgeerbe
cd7ece7caf fix hard coded channel settings 2023-02-24 10:45:59 +01:00
helgeerbe
10f907477d fix name for inverter id and channel id 2023-02-23 22:41:37 +01:00
helgeerbe
56151b0d12 make inverter and channel selectable 2023-02-23 21:46:59 +01:00
Thomas Basler
759f8b7208 Log errors if too less memory for webapi is available 2023-02-23 21:10:00 +01:00
helgeerbe
a2473645a5 Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-02-23 12:01:34 +01:00
helgeerbe
1caeb1d88b fix logging for out of ressources 2023-02-23 09:46:24 +01:00
helgeerbe
a758d894f6 LiveService if out of ressources close websocket 2023-02-22 15:46:52 +01:00
helgeerbe
0f80a25937 send http 429 "Too Many Requets",
if prometheus api is out of resources
2023-02-22 14:13:17 +01:00
helgeerbe
1e7f6b8f0f first version 2023-02-21 22:06:47 +01:00
helgeerbe
30440472f7 fix lint errors 2023-02-20 21:04:43 +01:00
helgeerbe
f973de4ab6 aktivate prometheus interface 2023-02-20 21:00:07 +01:00
Thomas Basler
97bc964b6c Fix lint errors 2023-02-20 20:19:23 +01:00
Thomas Basler
c61064c891 Merge branch 'pr605' into dev 2023-02-20 19:38:23 +01:00
helgeerbe
f560f25302 initial merge of power_limiter * missing is inverter and channel setting in gui
* due to bug _webApiPrometheus.init is commented out
2023-02-20 15:56:02 +01:00
helgeerbe
07f4473a4e Connect Wifi to strongest AP
* do full channel scan
  * connect to strongest AP
2023-02-20 10:13:36 +01:00
helgeerbe
09942e8e18 Connect Wifi to strongest AP
* do full channel scan
  * connect to strongest AP
2023-02-20 09:52:40 +01:00
Thomas Basler
dc66a82695 Fix typo in configuration. Relates to #603
Also increase buffer size to read whole config
2023-02-19 22:33:35 +01:00
Thomas Basler
cd99ab8e42 Added settings to pause polling/sending commands in general and at night 2023-02-18 19:44:16 +01:00
Thomas Basler
b319c78dc1 Added methods to calculate and show sunrise and sunset times 2023-02-18 18:15:48 +01:00
Thomas Basler
19a1c0aa54 Added config parameters to set longitude and latitude 2023-02-18 16:53:28 +01:00
helgeerbe
ce752f0d75 Dont print that VeDirect data is unvalid 2023-02-17 15:08:31 +01:00
helgeerbe
6e0ae6d152 Extent JSON_BUFFER_SIZE 7000 2023-02-17 15:06:43 +01:00
helgeerbe
27f20a76f0 Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-02-16 12:35:18 +01:00
helgeerbe
1a4a8cc921 fix age critical 2023-02-16 12:24:11 +01:00
helgeerbe
dc44cc8e1f create VeDirect.isDataValid() 2023-02-16 12:17:47 +01:00
Thomas Basler
6a6165e8c5 Fix #589: MQTT channel assignment in homeassistant config [unique_id and name] was wrong 2023-02-15 19:04:58 +01:00
helgeerbe
a529c91254 Merge remote-tracking branch 'tbnobody/OpenDTU/master' into development 2023-02-14 10:10:10 +01:00
helgeerbe
7022ed95b6 copy vedirect data if send only
updated data is true
2023-02-14 09:54:40 +01:00
Thomas Basler
8cbae76797 Implement offsets for YieldTotal (#549)
This allows to enter a offset in kWh in the inverter properties which will be applied to the read Yield Total value of the inverter. Using this can set your total production to zero if you e.g. are using a used device.
2023-02-13 20:25:00 +01:00
Thomas Basler
7bbb278eaf Merge branch 'mqtt_rework' into dev 2023-02-13 18:39:29 +01:00
Thomas Basler
f8c70c3e9f Added missing copyright header 2023-02-13 18:38:22 +01:00
Thomas Basler
3b7aef63f8 BREAKING CHANGE: Web API!
In order to support multiple AC channels in future the WebAPI had to be changed. AC and DC channels are now grouped in a sub object containing the channels beginning with 0.
2023-02-13 18:37:55 +01:00
helgeerbe
43bfee4d55 Stopp publishing vedirect if data becomes too old 2023-02-13 14:01:10 +01:00
helgeerbe
957bc91828 Force hass discovery update for vedirect
if mqtt settings changes
2023-02-13 12:00:25 +01:00
helgeerbe
17e564a094 simplify main for vedirect 2023-02-13 11:41:51 +01:00
helgeerbe
ed12f814dd mqqt hass discovery complete 2023-02-08 14:09:16 +01:00
helgeerbe
997023e52f Add Hass sensors Battery voltage and Current 2023-02-07 16:51:30 +01:00
helgeerbe
4f0a45c902 Add serial number to deviced name 2023-02-07 13:59:03 +01:00
helgeerbe
82ecf6cd6d Add victron serial to mqtt topics 2023-02-07 13:36:37 +01:00
Thomas Basler
ceaf08c1a0 Hoymiles Lib: Rename ChannelMaxPower to StringMaxPower 2023-02-06 19:56:12 +01:00
Thomas Basler
d4c838a16e BREAKING CHANGE: Prometheus API!
Added additional field to the prometheus api which identifies a channel by it's type. That means that e.g. channel 0  exists for type AC and DC.

This commit also introduces a additional field in the statistics byte assignment table. This field identifies whether a channel is on the AC or DC side. MQTT and WebAPI is still compatible with the previous design.
2023-02-06 19:51:10 +01:00
helgeerbe
37d3bb0eb0 vedirect hass autodiscovery:
load output state as binary sensor
2023-02-06 17:35:01 +01:00
helgeerbe
1c01e927f9 Add victron pins to device manager 2023-02-02 23:01:22 +01:00
helgeerbe
9e70d2dfc6 Merge remote-tracking branch 'tbnobody/OpenDTU/master' 2023-02-02 20:58:06 +01:00
Thomas Basler
5d7be32b90 Fixed typo 2023-01-31 18:35:50 +01:00
Thomas Basler
d948439beb Fix #548: The first device profile within the json file was not correctly applied 2023-01-30 20:33:55 +01:00
Thomas Basler
8bafb178a1 Fix #540: Do not output unit_of_meas if empty 2023-01-27 18:34:18 +01:00
helgeerbe
bec6c20531 Merge remote-tracking branch 'tbnobody/OpenDTU/master' 2023-01-26 10:30:55 +01:00
Thomas Basler
e89fd64439 Added WebAPI to setup display settings. Also reboot only if device profile was changed. 2023-01-20 18:28:34 +01:00
Thomas Basler
f7fb9a2bd6 Display: Add property to enable or disable the screensaver 2023-01-20 18:28:34 +01:00
Thomas Basler
d1483468c6 Rename Display properties and apply power safe immediatly 2023-01-20 18:28:33 +01:00
Thomas Basler
e3d2de0319 webapp: Show display pin mapping in device manager 2023-01-20 18:28:33 +01:00
Thomas Basler
b96d87b933 Read display pinmapping from json file 2023-01-20 18:28:33 +01:00
Thomas Basler
bb3e12814d Move display pin assignment to main function 2023-01-20 18:28:32 +01:00
Thomas Basler
592dd73fca Implement _dispX as function local variable 2023-01-20 18:28:23 +01:00
helgeerbe
9a7a0d293e Merge remote-tracking branch 'tbnobody/OpenDTU/master' 2023-01-20 14:54:04 +01:00
Thomas Basler
1d07574f8a Rename _lastPublish to _lastDisplayUpdate 2023-01-18 23:22:36 +01:00
Thomas Basler
e572e711a4 Code Style Changes
* Add License Identifier
* Move non public required includes to cpp
* Add curly brackets
2023-01-18 23:22:36 +01:00
dAjaY85
7074dd5757 Display init zum Zweiten
chango to full Buffer Mode, remove picture loop,
because it's not worked.
look: https://github.com/olikraus/u8glib/wiki/tpictureloop

snprintf + public vars
- dispPowerSafe => true: PowerSafe Mode on
- dispLogo => true: showing Logo upper right corner
- dispContrast => possible to adjust the Display Contrast

change in date time, buffer deleted

Display-Constructor changed, reset goes to front

Arrow and Logo only shown, when production is on

Refactor OLEDDisplayClass to DisplayGraphicClass
2023-01-18 23:22:36 +01:00
Thomas Basler
591a668901 Fixed issue when selecting new device profile 2023-01-17 20:46:52 +01:00
Thomas Basler
c85b99ffc1 Include ethernet handling in every build to enable it at runtime 2023-01-17 18:44:52 +01:00