diff --git a/include/PinMapping.h b/include/PinMapping.h
index 21723067..9539b824 100644
--- a/include/PinMapping.h
+++ b/include/PinMapping.h
@@ -59,6 +59,8 @@ public:
bool init(const String& deviceMapping);
PinMapping_t& get();
+ bool isMappingSelected() const { return _mappingSelected; }
+
bool isValidNrf24Config() const;
bool isValidCmt2300Config() const;
bool isValidW5500Config() const;
@@ -68,6 +70,8 @@ public:
private:
PinMapping_t _pinMapping;
+
+ bool _mappingSelected = false;
};
extern PinMappingClass PinMapping;
diff --git a/lang/es.lang.json b/lang/es.lang.json
index 629b9799..21da6235 100644
--- a/lang/es.lang.json
+++ b/lang/es.lang.json
@@ -637,7 +637,8 @@
"TimeSync": "El reloj aún no ha sido sincronizado. Sin un reloj correctamente ajustado, no se realizan solicitudes al inversor. Esto es normal poco después del inicio. Sin embargo, después de un tiempo de ejecución más largo (>1 minuto), indica que el servidor NTP no es accesible.",
"TimeSyncLink": "Por favor, verifica la configuración de tu hora.",
"DefaultPassword": "Estás utilizando la contraseña predeterminada para la interfaz web y el punto de acceso de emergencia. Esto potencialmente es inseguro.",
- "DefaultPasswordLink": "Por favor, cambia la contraseña."
+ "DefaultPasswordLink": "Por favor, cambia la contraseña.",
+ "PinMappingIssue": "You are using a generic firmware image, but have not yet uploaded a file with device profiles (pin_mapping.json) or have not selected a profile defined there. Please refer to the documentation for details."
},
"deviceadmin": {
"DeviceManager": "Administrador de Dispositivos",
diff --git a/lang/it.lang.json b/lang/it.lang.json
index eaafda63..8fe013d2 100644
--- a/lang/it.lang.json
+++ b/lang/it.lang.json
@@ -637,7 +637,8 @@
"TimeSync": "La Data/Ora non sono state sincronizzate, ed in tal caso non è possibile eseguire richieste all'inverter. Questa condizione è normale appena avviato, tuttavia dopo un po' (>1 minuto), questa situazione potrebbe indicare un problema di accesso al server NTP.",
"TimeSyncLink": "Controlla le impostazioni Data/Ora.",
"DefaultPassword": "Stai usando la password di default per accedere all'interfaccia web e per la modalità Access Point di emergenza. Questo può portare ad un rischio di sicurezza.",
- "DefaultPasswordLink": "Per favore cambia la password."
+ "DefaultPasswordLink": "Per favore cambia la password.",
+ "PinMappingIssue": "You are using a generic firmware image, but have not yet uploaded a file with device profiles (pin_mapping.json) or have not selected a profile defined there. Please refer to the documentation for details."
},
"deviceadmin": {
"DeviceManager": "Device-Manager",
diff --git a/src/PinMapping.cpp b/src/PinMapping.cpp
index 1a721e04..b0ba6647 100644
--- a/src/PinMapping.cpp
+++ b/src/PinMapping.cpp
@@ -212,6 +212,8 @@ bool PinMappingClass::init(const String& deviceMapping)
for (uint8_t i = 0; i < doc.size(); i++) {
String devName = doc[i]["name"] | "";
if (devName == deviceMapping) {
+ _mappingSelected = true;
+
strlcpy(_pinMapping.name, devName.c_str(), sizeof(_pinMapping.name));
_pinMapping.nrf24_clk = doc[i]["nrf24"]["clk"] | HOYMILES_PIN_SCLK;
_pinMapping.nrf24_cs = doc[i]["nrf24"]["cs"] | HOYMILES_PIN_CS;
diff --git a/src/WebApi_ws_live.cpp b/src/WebApi_ws_live.cpp
index a50a792a..5a27f324 100644
--- a/src/WebApi_ws_live.cpp
+++ b/src/WebApi_ws_live.cpp
@@ -125,6 +125,9 @@ void WebApiWsLiveClass::generateCommonJsonResponse(JsonVariant& root)
hintObj["time_sync"] = !getLocalTime(&timeinfo, 5);
hintObj["radio_problem"] = (Hoymiles.getRadioNrf()->isInitialized() && (!Hoymiles.getRadioNrf()->isConnected() || !Hoymiles.getRadioNrf()->isPVariant())) || (Hoymiles.getRadioCmt()->isInitialized() && (!Hoymiles.getRadioCmt()->isConnected()));
hintObj["default_password"] = strcmp(Configuration.get().Security.Password, ACCESS_POINT_PASSWORD) == 0;
+
+ bool isGeneric = String(PIOENV) == "generic";
+ hintObj["pin_mapping_issue"] = !isGeneric && !PinMapping.isMappingSelected();
}
void WebApiWsLiveClass::generateInverterCommonJsonResponse(JsonObject& root, std::shared_ptr inv)
diff --git a/webapp/src/components/HintView.vue b/webapp/src/components/HintView.vue
index a8d937c7..cc0bb57d 100644
--- a/webapp/src/components/HintView.vue
+++ b/webapp/src/components/HintView.vue
@@ -25,6 +25,13 @@
+
+
+
+