Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/release-drafter.yml
Original file line number Diff line number Diff line change
Expand Up @@ -243,5 +243,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: release-drafter/release-drafter@v7
with:
disable-releaser: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,15 @@

from typing import TYPE_CHECKING

from ._victron_enums import ChargeSchedule, ESSModeHub4, ESSState, ESSUserMode, GenericOnOff, PreferRenewableEnergyEnum
from ._victron_enums import (
ChargeSchedule,
ESSModeHub4,
ESSState,
ESSUserMode,
GenericOnOff,
PreferRenewableEnergyEnum,
)
from .constants import MetricType
from .data_classes import GpsLocation
from .formula_common import left_riemann_sum_internal
from .writable_metric import WritableMetric
Expand Down Expand Up @@ -259,3 +267,29 @@ def prefer_renewable_energy_set(
metric.set(PreferRenewableEnergyEnum.FULL_CHARGE_ACTIVE)

return enabled, None


def pv_current(
depends_on: dict[str, Metric], _transient_state: FormulaTransientState | None
) -> tuple[float, None] | None:
"""Calculate PV current from power and voltage (I = P / V).

Since /Pv/x/I topics are deprecated in Venus OS, this formula derives
PV current by dividing PV power by PV voltage.
"""
power_metric = None
voltage_metric = None
for metric in depends_on.values():
if metric.metric_type == MetricType.POWER:
power_metric = metric
elif metric.metric_type == MetricType.VOLTAGE:
voltage_metric = metric

if power_metric is None or voltage_metric is None:
return None
if power_metric.value is None or voltage_metric.value is None:
return None
if voltage_metric.value == 0:
return None

return power_metric.value / voltage_metric.value, None
Original file line number Diff line number Diff line change
Expand Up @@ -1777,6 +1777,15 @@
name="MPPT {mpptnumber} PV voltage",
metric_type=MetricType.VOLTAGE,
),
TopicDescriptor(
topic="$$func/multi/pv_current",
message_type=MetricKind.SENSOR,
short_id="multi_mppt_{mpptnumber}_current",
name="MPPT {mpptnumber} current",
metric_type=MetricType.CURRENT,
precision=2,
depends_on=["multi_mppt_{mpptnumber}_power", "multi_mppt_{mpptnumber}_voltage"],
),
TopicDescriptor(
topic="N/{installation_id}/multi/{device_id}/Relay/0/State",
message_type=MetricKind.SWITCH,
Expand Down Expand Up @@ -2551,6 +2560,15 @@
name="PV tracker {tracker:solarcharger_tracker_{tracker}_name} voltage",
metric_type=MetricType.VOLTAGE,
),
TopicDescriptor(
topic="$$func/solarcharger/pv_current",
message_type=MetricKind.SENSOR,
short_id="solarcharger_tracker_{tracker}_current",
name="PV tracker {tracker:solarcharger_tracker_{tracker}_name} current",
metric_type=MetricType.CURRENT,
precision=2,
depends_on=["solarcharger_tracker_{tracker}_power", "solarcharger_tracker_{tracker}_voltage"],
),
TopicDescriptor(
topic="N/{installation_id}/solarcharger/{device_id}/Relay/0/State",
message_type=MetricKind.SWITCH,
Expand Down Expand Up @@ -2583,6 +2601,15 @@
name="PV yield power",
metric_type=MetricType.POWER,
),
TopicDescriptor(
topic="$$func/solarcharger/pv_current",
message_type=MetricKind.SENSOR,
short_id="solarcharger_pv_current",
name="PV current",
metric_type=MetricType.CURRENT,
precision=2,
depends_on=["solarcharger_yield_power", "solarcharger_voltage"],
),
TopicDescriptor(
topic="N/{installation_id}/solarcharger/{device_id}/Yield/User",
message_type=MetricKind.SENSOR,
Expand Down
Loading