Feature: Detect if inverter supports 'Power Distribution Logic'

The detection of 'Power Distribution Logic' is based on the firmware version for specific models and is needed to disable any means of overscaling, as it simply does not work when 'Power Distrbution Logic' is available.

Based on the code from @AndreasBoehm
This commit is contained in:
Thomas Basler 2024-12-31 16:08:37 +01:00
parent c37397acca
commit a0e6942537
13 changed files with 64 additions and 12 deletions

View File

@ -45,7 +45,9 @@
"Refreshing": "Refrescando", "Refreshing": "Refrescando",
"Pull": "Tira hacia abajo para refrescar", "Pull": "Tira hacia abajo para refrescar",
"Release": "Soltar para refrescar", "Release": "Soltar para refrescar",
"Close": "Cerrar" "Close": "Cerrar",
"Yes": "Yes",
"No": "No"
}, },
"wait": { "wait": {
"NotReady": "OpenDTU is not yet ready", "NotReady": "OpenDTU is not yet ready",
@ -193,7 +195,10 @@
"FirmwareVersion": "Versión del firmware", "FirmwareVersion": "Versión del firmware",
"FirmwareBuildDate": "Fecha de construcción del firmware", "FirmwareBuildDate": "Fecha de construcción del firmware",
"HardwarePartNumber": "Número de parte de hardware", "HardwarePartNumber": "Número de parte de hardware",
"HardwareVersion": "Versión de hardware" "HardwareVersion": "Versión de hardware",
"SupportsPowerDistributionLogic": "'Power Distribution Logic' supported",
"Yes": "@:base.Yes",
"No": "@:base.No"
}, },
"gridprofile": { "gridprofile": {
"NoInfo": "@:devinfo.NoInfo", "NoInfo": "@:devinfo.NoInfo",

View File

@ -45,7 +45,9 @@
"Refreshing": "Aggiorna", "Refreshing": "Aggiorna",
"Pull": "Trascina in basso per aggiornare", "Pull": "Trascina in basso per aggiornare",
"Release": "Rilascia per aggiornare", "Release": "Rilascia per aggiornare",
"Close": "Chiudi" "Close": "Chiudi",
"Yes": "Yes",
"No": "No"
}, },
"wait": { "wait": {
"NotReady": "OpenDTU is not yet ready", "NotReady": "OpenDTU is not yet ready",
@ -193,7 +195,10 @@
"FirmwareVersion": "Versione Firmware", "FirmwareVersion": "Versione Firmware",
"FirmwareBuildDate": "Data Firmware", "FirmwareBuildDate": "Data Firmware",
"HardwarePartNumber": "Hardware Part Number", "HardwarePartNumber": "Hardware Part Number",
"HardwareVersion": "Hardware Version" "HardwareVersion": "Hardware Version",
"SupportsPowerDistributionLogic": "'Power Distribution Logic' supported",
"Yes": "@:base.Yes",
"No": "@:base.No"
}, },
"gridprofile": { "gridprofile": {
"NoInfo": "@:devinfo.NoInfo", "NoInfo": "@:devinfo.NoInfo",

View File

@ -75,3 +75,10 @@ uint8_t HMS_4CH::getByteAssignmentSize() const
{ {
return sizeof(byteAssignment) / sizeof(byteAssignment[0]); return sizeof(byteAssignment) / sizeof(byteAssignment[0]);
} }
bool HMS_4CH::supportsPowerDistributionLogic()
{
// This feature was added in inverter firmware version 01.01.12 and
// will limit the AC output instead of limiting the DC inputs.
return DevInfo()->getFwBuildVersion() >= 10112U;
}

View File

@ -10,4 +10,5 @@ public:
String typeName() const; String typeName() const;
const byteAssign_t* getByteAssignment() const; const byteAssign_t* getByteAssignment() const;
uint8_t getByteAssignmentSize() const; uint8_t getByteAssignmentSize() const;
bool supportsPowerDistributionLogic() final;
}; };

View File

@ -219,3 +219,8 @@ bool HM_Abstract::sendGridOnProFileParaRequest()
return true; return true;
} }
bool HM_Abstract::supportsPowerDistributionLogic()
{
return false;
}

View File

@ -16,6 +16,7 @@ public:
bool sendRestartControlRequest(); bool sendRestartControlRequest();
bool resendPowerControlRequest(); bool resendPowerControlRequest();
bool sendGridOnProFileParaRequest(); bool sendGridOnProFileParaRequest();
bool supportsPowerDistributionLogic() override;
private: private:
uint8_t _lastAlarmLogCnt = 0; uint8_t _lastAlarmLogCnt = 0;

View File

@ -103,6 +103,9 @@ public:
virtual bool sendChangeChannelRequest(); virtual bool sendChangeChannelRequest();
virtual bool sendGridOnProFileParaRequest() = 0; virtual bool sendGridOnProFileParaRequest() = 0;
// This feature will limit the AC output instead of limiting the DC inputs.
virtual bool supportsPowerDistributionLogic() = 0;
HoymilesRadio* getRadio(); HoymilesRadio* getRadio();
AlarmLogParser* EventLog(); AlarmLogParser* EventLog();

View File

@ -35,6 +35,7 @@ void WebApiDevInfoClass::onDevInfoStatus(AsyncWebServerRequest* request)
root["hw_model_name"] = inv->DevInfo()->getHwModelName(); root["hw_model_name"] = inv->DevInfo()->getHwModelName();
root["max_power"] = inv->DevInfo()->getMaxPower(); root["max_power"] = inv->DevInfo()->getMaxPower();
root["fw_build_datetime"] = inv->DevInfo()->getFwBuildDateTimeStr(); root["fw_build_datetime"] = inv->DevInfo()->getFwBuildDateTimeStr();
root["pdl_supported"] = inv->supportsPowerDistributionLogic();
} }
WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__); WebApi.sendJsonResponse(request, response, __FUNCTION__, __LINE__);

View File

@ -46,6 +46,12 @@
<td>{{ $t('devinfo.HardwareVersion') }}</td> <td>{{ $t('devinfo.HardwareVersion') }}</td>
<td>{{ devInfoList.hw_version }}</td> <td>{{ devInfoList.hw_version }}</td>
</tr> </tr>
<tr>
<td>{{ $t('devinfo.SupportsPowerDistributionLogic') }}</td>
<td>
<StatusBadge :status="devInfoList.pdl_supported" true_text="devinfo.Yes" false_text="devinfo.No" />
</td>
</tr>
</tbody> </tbody>
</table> </table>
</template> </template>
@ -53,6 +59,7 @@
<script lang="ts"> <script lang="ts">
import BootstrapAlert from '@/components/BootstrapAlert.vue'; import BootstrapAlert from '@/components/BootstrapAlert.vue';
import type { DevInfoStatus } from '@/types/DevInfoStatus'; import type { DevInfoStatus } from '@/types/DevInfoStatus';
import StatusBadge from '@/components/StatusBadge.vue';
import { BIconInfoSquare } from 'bootstrap-icons-vue'; import { BIconInfoSquare } from 'bootstrap-icons-vue';
import { defineComponent, type PropType } from 'vue'; import { defineComponent, type PropType } from 'vue';
@ -60,6 +67,7 @@ export default defineComponent({
components: { components: {
BootstrapAlert, BootstrapAlert,
BIconInfoSquare, BIconInfoSquare,
StatusBadge,
}, },
props: { props: {
devInfoList: { type: Object as PropType<DevInfoStatus>, required: true }, devInfoList: { type: Object as PropType<DevInfoStatus>, required: true },

View File

@ -30,7 +30,9 @@
"Refreshing": "Aktualisieren", "Refreshing": "Aktualisieren",
"Pull": "Zum Aktualisieren nach unten ziehen", "Pull": "Zum Aktualisieren nach unten ziehen",
"Release": "Loslassen zum Aktualisieren", "Release": "Loslassen zum Aktualisieren",
"Close": "Schließen" "Close": "Schließen",
"Yes": "Ja",
"No": "Nein"
}, },
"wait": { "wait": {
"NotReady": "OpenDTU ist noch nicht bereit", "NotReady": "OpenDTU ist noch nicht bereit",
@ -179,7 +181,10 @@
"FirmwareVersion": "Firmware-Version", "FirmwareVersion": "Firmware-Version",
"FirmwareBuildDate": "Firmware-Erstellungsdatum", "FirmwareBuildDate": "Firmware-Erstellungsdatum",
"HardwarePartNumber": "Hardware-Teilenummer", "HardwarePartNumber": "Hardware-Teilenummer",
"HardwareVersion": "Hardware-Version" "HardwareVersion": "Hardware-Version",
"SupportsPowerDistributionLogic": "'Power Distribution Logic' unterstützt",
"Yes": "@:base.Yes",
"No": "@:base.No"
}, },
"gridprofile": { "gridprofile": {
"NoInfo": "@:devinfo.NoInfo", "NoInfo": "@:devinfo.NoInfo",

View File

@ -30,7 +30,9 @@
"Refreshing": "Refreshing", "Refreshing": "Refreshing",
"Pull": "Pull down to refresh", "Pull": "Pull down to refresh",
"Release": "Release to refresh", "Release": "Release to refresh",
"Close": "Close" "Close": "Close",
"Yes": "Yes",
"No": "No"
}, },
"wait": { "wait": {
"NotReady": "OpenDTU is not yet ready", "NotReady": "OpenDTU is not yet ready",
@ -179,7 +181,10 @@
"FirmwareVersion": "Firmware Version", "FirmwareVersion": "Firmware Version",
"FirmwareBuildDate": "Firmware Build Date", "FirmwareBuildDate": "Firmware Build Date",
"HardwarePartNumber": "Hardware Part Number", "HardwarePartNumber": "Hardware Part Number",
"HardwareVersion": "Hardware Version" "HardwareVersion": "Hardware Version",
"SupportsPowerDistributionLogic": "'Power Distribution Logic' supported",
"Yes": "@:base.Yes",
"No": "@:base.No"
}, },
"gridprofile": { "gridprofile": {
"NoInfo": "@:devinfo.NoInfo", "NoInfo": "@:devinfo.NoInfo",

View File

@ -30,7 +30,9 @@
"Refreshing": "Refreshing", "Refreshing": "Refreshing",
"Pull": "Pull down to refresh", "Pull": "Pull down to refresh",
"Release": "Release to refresh", "Release": "Release to refresh",
"Close": "Fermer" "Close": "Fermer",
"Yes": "Yes",
"No": "No"
}, },
"wait": { "wait": {
"NotReady": "OpenDTU is not yet ready", "NotReady": "OpenDTU is not yet ready",
@ -179,7 +181,10 @@
"FirmwareVersion": "Version du firmware", "FirmwareVersion": "Version du firmware",
"FirmwareBuildDate": "Date de création du firmware", "FirmwareBuildDate": "Date de création du firmware",
"HardwarePartNumber": "Numéro d'article matériel", "HardwarePartNumber": "Numéro d'article matériel",
"HardwareVersion": "Version du matériel" "HardwareVersion": "Version du matériel",
"SupportsPowerDistributionLogic": "'Power Distribution Logic' supported",
"Yes": "@:base.Yes",
"No": "@:base.No"
}, },
"gridprofile": { "gridprofile": {
"NoInfo": "@:devinfo.NoInfo", "NoInfo": "@:devinfo.NoInfo",

View File

@ -8,4 +8,5 @@ export interface DevInfoStatus {
hw_version: number; hw_version: number;
hw_model_name: string; hw_model_name: string;
max_power: number; max_power: number;
pdl_supported: boolean;
} }