Skip to content

Commit 886c2d2

Browse files
tomer-wgithub-actions[bot]
authored andcommitted
Update victron_mqtt to 2026.8.0
## Changes - Add Skylla-i charger mode and AC input current limit @luclu (#123) - Make EV Charger Min/Max charging current settable: #473 - Add Hub4 disable feed-in switch topic: #474 - Add Orion XS 12/12-70A: #459 - Fix MinCurrent and MaxCurrent names: #473 - Fix yield today state class and precision: #471 - Revert step to be 1 for MaxFeedInPower: tomer-w/victron_mqtt#118 - Make sure keepalive loop is not skipping steps. ## 🧰 Maintenance - Bump release-drafter/release-drafter from 7 to 7.6.0 @[dependabot[bot]](https://github.com/apps/dependabot) (#122) - Bump actions/setup-python from 6 to 7 @[dependabot[bot]](https://github.com/apps/dependabot) (#121) ## Contributors @tomer-w and @luclu
1 parent 2752353 commit 886c2d2

7 files changed

Lines changed: 217 additions & 36 deletions

File tree

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
"""Vendored third-party packages."""
22

3-
VICTRON_MQTT_VERSION = "2026.7.6"
3+
VICTRON_MQTT_VERSION = "2026.8.0"

custom_components/victron_mqtt/_vendor/victron_mqtt/_victron_enums.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ class VictronProductId(VictronEnum):
117117
# Orion XS 1400 DC-DC charger (VE.Direct); reported under the alternator/dcdc device types.
118118
# Output current is settable up to 50 A across all output-voltage configs (1400 W ceiling at 28 V).
119119
ORION_XS_12V_12V_50A = (0xA3F0, "orion_xs_12v_12v_50a", "Orion XS 12V/12V-50A")
120+
ORION_XS_12V_12V_70A = (0xA3F2, "orion_xs_12v_12v_70a", "Orion XS 12V/12V-70A")
120121
ORION_XS_12V_24V_50A = (0xA3F1, "orion_xs_12v_24v_50a", "Orion XS 12V/24V-50A")
121122

122123

custom_components/victron_mqtt/_vendor/victron_mqtt/_victron_products.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ class ProductCapabilities:
7474
VictronProductId.SMARTSOLAR_MPPT_RS_450_100: ProductCapabilities(max_charge_current=100),
7575
# Orion XS 1400 DC-DC charger -> output current settable up to 50 A (datasheet: 1-50 A range).
7676
VictronProductId.ORION_XS_12V_12V_50A: ProductCapabilities(max_charge_current=50),
77+
VictronProductId.ORION_XS_12V_12V_70A: ProductCapabilities(max_charge_current=70),
7778
VictronProductId.ORION_XS_12V_24V_50A: ProductCapabilities(max_charge_current=50),
7879
}
7980

custom_components/victron_mqtt/_vendor/victron_mqtt/_victron_topics.py

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -763,7 +763,20 @@
763763
name="Cell voltage deviation",
764764
metric_type=MetricType.VOLTAGE,
765765
),
766-
# Charger topics (AC chargers such as Blue Smart IP22 and IP43)
766+
# Charger topics (AC chargers such as Blue Smart IP22/IP43 and Skylla-i)
767+
TopicDescriptor(
768+
topic="N/{installation_id}/charger/{device_id}/Ac/In/CurrentLimit",
769+
message_type=MetricKind.NUMBER,
770+
short_id="charger_ac_in_current_limit",
771+
name="AC input current limit",
772+
metric_type=MetricType.CURRENT,
773+
value_type=ValueType.FLOAT,
774+
min_max_range=RangeType.DYNAMIC, # GX publishes min/max (e.g. Skylla-i: 0-20 A)
775+
min=0,
776+
max=32,
777+
precision=1,
778+
step=0.1,
779+
),
767780
TopicDescriptor(
768781
topic="N/{installation_id}/charger/{device_id}/Ac/In/{phase}/I",
769782
message_type=MetricKind.SENSOR,
@@ -793,6 +806,15 @@
793806
value_type=ValueType.ENUM,
794807
enum=ErrorCode,
795808
),
809+
TopicDescriptor(
810+
topic="N/{installation_id}/charger/{device_id}/Mode",
811+
message_type=MetricKind.SWITCH,
812+
short_id="charger_mode",
813+
name="Mode",
814+
value_type=ValueType.ENUM,
815+
enum=ChargerMode,
816+
main_topic=True,
817+
),
796818
TopicDescriptor(
797819
topic="N/{installation_id}/charger/{device_id}/NrOfOutputs",
798820
message_type=MetricKind.SENSOR,
@@ -1209,19 +1231,25 @@
12091231
),
12101232
TopicDescriptor(
12111233
topic="N/{installation_id}/evcharger/{device_id}/MaxCurrent",
1212-
message_type=MetricKind.SENSOR,
1234+
message_type=MetricKind.NUMBER,
12131235
short_id="evcharger_max_set_current",
1214-
name="Maximum set current",
1236+
name="Max charging current",
12151237
metric_type=MetricType.CURRENT,
12161238
value_type=ValueType.INT,
1239+
min="evcharger_min_set_current:6",
1240+
max=32,
1241+
step=1,
12171242
),
12181243
TopicDescriptor(
12191244
topic="N/{installation_id}/evcharger/{device_id}/MinCurrent",
1220-
message_type=MetricKind.SENSOR,
1245+
message_type=MetricKind.NUMBER,
12211246
short_id="evcharger_min_set_current",
1222-
name="Minimum set current",
1247+
name="Min charging current",
12231248
metric_type=MetricType.CURRENT,
12241249
value_type=ValueType.INT,
1250+
min=6,
1251+
max="evcharger_max_set_current:32",
1252+
step=1,
12251253
),
12261254
TopicDescriptor(
12271255
topic="N/{installation_id}/evcharger/{device_id}/Mode",
@@ -2059,13 +2087,17 @@
20592087
short_id="multi_mppt_{mppt_id}_yield_today",
20602088
name="MPPT {mppt_id} yield today",
20612089
metric_type=MetricType.ENERGY,
2090+
metric_nature=MetricNature.TOTAL_INCREASING,
2091+
precision=3,
20622092
),
20632093
TopicDescriptor(
20642094
topic="N/{installation_id}/multi/{device_id}/History/Daily/0/Yield",
20652095
message_type=MetricKind.SENSOR,
20662096
short_id="multi_yield_today",
20672097
name="Yield today",
20682098
metric_type=MetricType.ENERGY,
2099+
metric_nature=MetricNature.TOTAL_INCREASING,
2100+
precision=3,
20692101
),
20702102
TopicDescriptor(
20712103
topic="N/{installation_id}/multi/{device_id}/History/Daily/1/MaxPower",
@@ -2407,7 +2439,7 @@
24072439
min_max_range=RangeType.DYNAMIC,
24082440
min=-1,
24092441
max=1000000,
2410-
step=100,
2442+
step=1, # A Althought step=100 would be better (and aligned with Victron UX), but this will not work with the min=-1 value, so we need to use step=1.
24112443
),
24122444
TopicDescriptor(
24132445
topic="N/{installation_id}/settings/{device_id}/Settings/CGwacs/OvervoltageFeedIn",
@@ -2830,6 +2862,8 @@
28302862
short_id="solarcharger_tracker_{tracker}_yield_today",
28312863
name="Tracker {tracker:solarcharger_tracker_{tracker}_name} yield today",
28322864
metric_type=MetricType.ENERGY,
2865+
metric_nature=MetricNature.TOTAL_INCREASING,
2866+
precision=3,
28332867
),
28342868
TopicDescriptor(
28352869
topic="N/{installation_id}/solarcharger/{device_id}/History/Daily/0/TimeInAbsorption",
@@ -2864,7 +2898,8 @@
28642898
short_id="solarcharger_yield_today",
28652899
name="Yield today",
28662900
metric_type=MetricType.ENERGY,
2867-
precision=2,
2901+
precision=3,
2902+
metric_nature=MetricNature.TOTAL_INCREASING,
28682903
),
28692904
TopicDescriptor(
28702905
topic="N/{installation_id}/solarcharger/{device_id}/History/Daily/1/MaxPower",
@@ -3956,6 +3991,14 @@
39563991
value_type=ValueType.ENUM,
39573992
enum=GenericOnOff,
39583993
),
3994+
TopicDescriptor(
3995+
topic="N/{installation_id}/vebus/{device_id}/Hub4/DisableFeedIn",
3996+
message_type=MetricKind.SWITCH,
3997+
short_id="vebus_hub4_disable_feed_in",
3998+
name="Hub4 disable feed-in",
3999+
value_type=ValueType.ENUM,
4000+
enum=GenericOnOff,
4001+
),
39594002
TopicDescriptor(
39604003
topic="N/{installation_id}/vebus/{device_id}/Hub4/DoNotFeedInOvervoltage",
39614004
message_type=MetricKind.SWITCH,

custom_components/victron_mqtt/_vendor/victron_mqtt/hub.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -932,19 +932,31 @@ async def _keepalive_loop(self) -> None:
932932
count = 0
933933
while True:
934934
try:
935-
self._keepalive()
935+
# Isolate the keepalive send: a failed publish must not skip the sleep or the
936+
# periodic metric maintenance below (otherwise stale metrics are never
937+
# invalidated and the republish schedule desyncs while sends keep failing).
938+
try:
939+
self._keepalive()
940+
except Exception as exc:
941+
_LOGGER.exception("Error sending keepalive: %s", exc)
936942
await asyncio.sleep(30)
937-
# We should keep alive all metrics every 60 seconds
938-
count += 1
939943
# Old firmwars dont resend values after the keepalive message so we cant use this logic of invalidation if there is no new value
940944
if self._firmware_version >= MINIMUM_FULLY_SUPPORTED_VERSION:
945+
# We should keep alive all metrics every 60 seconds
946+
count += 1
941947
if count % 2 == 0:
942948
# Republish throttled values and mark long-silent sources unavailable (issue #454).
943-
self._keepalive_metrics(stale_timeout=STALE_METRIC_TIMEOUT_SECONDS)
949+
try:
950+
self._keepalive_metrics(stale_timeout=STALE_METRIC_TIMEOUT_SECONDS)
951+
except Exception as exc:
952+
_LOGGER.exception("Error keeping alive metrics: %s", exc)
944953
# Periodically force a full republish so the broker re-sends every current
945954
# value, refreshing last_seen for constant metrics that would otherwise look stale.
946955
if count % FULL_REPUBLISH_STALENESS_INTERVAL_CYCLES == 0:
947-
self._keepalive(force=True)
956+
try:
957+
self._keepalive(force=True)
958+
except Exception as exc:
959+
_LOGGER.exception("Error sending forced keepalive: %s", exc)
948960
except asyncio.CancelledError:
949961
_LOGGER.info("Keepalive loop canceled")
950962
raise

custom_components/victron_mqtt/translations/en.json

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@
7171
"on": "On"
7272
}
7373
},
74+
"charger_mode": {
75+
"state": {
76+
"off": "Off",
77+
"on": "On"
78+
}
79+
},
7480
"dcdc_mode": {
7581
"state": {
7682
"off": "Off",
@@ -356,6 +362,13 @@
356362
"on": "On"
357363
}
358364
},
365+
"vebus_hub4_disable_feed_in": {
366+
"name": "Hub4 disable feed-in",
367+
"state": {
368+
"off": "Off",
369+
"on": "On"
370+
}
371+
},
359372
"vebus_hub4_do_not_feed_in_overvoltage": {
360373
"name": "Hub4 do not feed in on overvoltage",
361374
"state": {
@@ -446,6 +459,15 @@
446459
"alternator_charge_current_limit": {
447460
"name": "Charge current limit"
448461
},
462+
"charger_ac_in_current_limit": {
463+
"name": "AC input current limit"
464+
},
465+
"evcharger_max_set_current": {
466+
"name": "Max charging current"
467+
},
468+
"evcharger_min_set_current": {
469+
"name": "Min charging current"
470+
},
449471
"evcharger_set_current": {
450472
"name": "Charge current setpoint"
451473
},
@@ -1049,6 +1071,9 @@
10491071
"charge_mode": {
10501072
"name": "Charge mode"
10511073
},
1074+
"charger_ac_in_current_limit": {
1075+
"name": "AC input current limit"
1076+
},
10521077
"charger_ac_in_current_phase": {
10531078
"name": "AC input current {phase}"
10541079
},
@@ -1311,10 +1336,10 @@
13111336
"name": "Current"
13121337
},
13131338
"evcharger_max_set_current": {
1314-
"name": "Maximum set current"
1339+
"name": "Max charging current"
13151340
},
13161341
"evcharger_min_set_current": {
1317-
"name": "Minimum set current"
1342+
"name": "Min charging current"
13181343
},
13191344
"evcharger_mode": {
13201345
"name": "Mode",
@@ -2652,6 +2677,12 @@
26522677
"on": "On"
26532678
}
26542679
},
2680+
"charger_mode": {
2681+
"state": {
2682+
"off": "Off",
2683+
"on": "On"
2684+
}
2685+
},
26552686
"dcdc_mode": {
26562687
"state": {
26572688
"off": "Off",
@@ -2832,6 +2863,13 @@
28322863
"on": "On"
28332864
}
28342865
},
2866+
"vebus_hub4_disable_feed_in": {
2867+
"name": "Hub4 disable feed-in",
2868+
"state": {
2869+
"off": "Off",
2870+
"on": "On"
2871+
}
2872+
},
28352873
"vebus_hub4_do_not_feed_in_overvoltage": {
28362874
"name": "Hub4 do not feed in on overvoltage",
28372875
"state": {

0 commit comments

Comments
 (0)