Added configuration of CMT modules frequency to webapp

This commit is contained in:
Thomas Basler 2023-03-30 20:46:27 +02:00
parent 5e11f0b854
commit 371e405eed
11 changed files with 43 additions and 2 deletions

View File

@ -84,6 +84,7 @@ struct CONFIG_T {
uint32_t Dtu_PollInterval;
uint8_t Dtu_NrfPaLevel;
int8_t Dtu_CmtPaLevel;
uint32_t Dtu_CmtFrequency;
bool Mqtt_Hass_Enabled;
bool Mqtt_Hass_Retain;

View File

@ -13,6 +13,7 @@ enum WebApiError {
DtuSerialZero,
DtuPollZero,
DtuInvalidPowerLevel,
DtuInvalidCmtFrequency,
ConfigBase = 3000,
ConfigNotDeleted,

View File

@ -78,6 +78,7 @@
#define DTU_POLL_INTERVAL 5
#define DTU_NRF_PA_LEVEL 0
#define DTU_CMT_PA_LEVEL 0
#define DTU_CMT_FREQUENCY 865000
#define MQTT_HASS_ENABLED false
#define MQTT_HASS_EXPIRE true

View File

@ -81,6 +81,7 @@ bool ConfigurationClass::write()
dtu["poll_interval"] = config.Dtu_PollInterval;
dtu["nrf_pa_level"] = config.Dtu_NrfPaLevel;
dtu["cmt_pa_level"] = config.Dtu_CmtPaLevel;
dtu["cmt_frequency"] = config.Dtu_CmtFrequency;
JsonObject security = doc.createNestedObject("security");
security["password"] = config.Security_Password;
@ -222,6 +223,7 @@ bool ConfigurationClass::read()
config.Dtu_PollInterval = dtu["poll_interval"] | DTU_POLL_INTERVAL;
config.Dtu_NrfPaLevel = dtu["nrf_pa_level"] | DTU_NRF_PA_LEVEL;
config.Dtu_CmtPaLevel = dtu["cmt_pa_level"] | DTU_CMT_PA_LEVEL;
config.Dtu_CmtFrequency = dtu["cmt_frequency"] | DTU_CMT_FREQUENCY;
JsonObject security = doc["security"];
strlcpy(config.Security_Password, security["password"] | ACCESS_POINT_PASSWORD, sizeof(config.Security_Password));

View File

@ -44,6 +44,9 @@ void InverterSettingsClass::init()
Hoymiles.getRadioNrf()->setDtuSerial(config.Dtu_Serial);
Hoymiles.getRadioCmt()->setDtuSerial(config.Dtu_Serial);
MessageOutput.println(" Setting CMT target frequency... ");
Hoymiles.getRadioCmt()->setInverterTargetFrequency(config.Dtu_CmtFrequency);
MessageOutput.println(" Setting poll interval... ");
Hoymiles.setPollInterval(config.Dtu_PollInterval);

View File

@ -44,6 +44,7 @@ void WebApiDtuClass::onDtuAdminGet(AsyncWebServerRequest* request)
root["nrf_palevel"] = config.Dtu_NrfPaLevel;
root["cmt_enabled"] = Hoymiles.getRadioCmt()->isInitialized();
root["cmt_palevel"] = config.Dtu_CmtPaLevel;
root["cmt_frequency"] = config.Dtu_CmtFrequency;
response->setLength();
request->send(response);
@ -88,7 +89,7 @@ void WebApiDtuClass::onDtuAdminPost(AsyncWebServerRequest* request)
return;
}
if (!(root.containsKey("serial") && root.containsKey("pollinterval") && root.containsKey("nrf_palevel") && root.containsKey("cmt_palevel"))) {
if (!(root.containsKey("serial") && root.containsKey("pollinterval") && root.containsKey("nrf_palevel") && root.containsKey("cmt_palevel") && root.containsKey("cmt_frequency"))) {
retMsg["message"] = "Values are missing!";
retMsg["code"] = WebApiError::GenericValueMissing;
response->setLength();
@ -121,13 +122,23 @@ void WebApiDtuClass::onDtuAdminPost(AsyncWebServerRequest* request)
}
if (root["cmt_palevel"].as<int8_t>() < -10 || root["cmt_palevel"].as<int8_t>() > 20) {
retMsg["message"] = F("Invalid power level setting!");
retMsg["message"] = "Invalid power level setting!";
retMsg["code"] = WebApiError::DtuInvalidPowerLevel;
response->setLength();
request->send(response);
return;
}
if (root["cmt_frequency"].as<uint32_t>() < 860000 || root["cmt_frequency"].as<uint32_t>() > 923000 || root["cmt_frequency"].as<uint32_t>() % 250 > 0) {
retMsg["message"] = "Invalid CMT frequency setting!";
retMsg["code"] = WebApiError::DtuInvalidCmtFrequency;
retMsg["param"]["min"] = 860000;
retMsg["param"]["max"] = 923000;
response->setLength();
request->send(response);
return;
}
CONFIG_T& config = Configuration.get();
// Interpret the string as a hex value and convert it to uint64_t
@ -135,6 +146,7 @@ void WebApiDtuClass::onDtuAdminPost(AsyncWebServerRequest* request)
config.Dtu_PollInterval = root["pollinterval"].as<uint32_t>();
config.Dtu_NrfPaLevel = root["nrf_palevel"].as<uint8_t>();
config.Dtu_CmtPaLevel = root["cmt_palevel"].as<int8_t>();
config.Dtu_CmtFrequency = root["cmt_frequency"].as<uint32_t>();
Configuration.write();
retMsg["type"] = "success";
@ -148,5 +160,6 @@ void WebApiDtuClass::onDtuAdminPost(AsyncWebServerRequest* request)
Hoymiles.getRadioCmt()->setPALevel(config.Dtu_CmtPaLevel);
Hoymiles.getRadioNrf()->setDtuSerial(config.Dtu_Serial);
Hoymiles.getRadioCmt()->setDtuSerial(config.Dtu_Serial);
Hoymiles.getRadioCmt()->setInverterTargetFrequency(config.Dtu_CmtFrequency);
Hoymiles.setPollInterval(config.Dtu_PollInterval);
}

View File

@ -40,6 +40,7 @@
"2001": "Die Seriennummer darf nicht 0 sein!",
"2002": "Das Abfraginterval muss größer als 0 sein!",
"2003": "Ungültige Sendeleistung angegeben!",
"2004": "Die Frequenz muss zwischen {min} und {max} kHz liegen und ein vielfaches von 250kHz betragen!",
"3001": "Nichts gelöscht!",
"3002": "Konfiguration zurückgesetzt. Starte jetzt neu...",
"4001": "@:apiresponse.2001",
@ -326,6 +327,9 @@
"CmtPaLevel": "CMT2300A Sendeleistung:",
"NrfPaLevelHint": "Verwendet für HM-Wechselrichter. Stellen Sie sicher, dass Ihre Stromversorgung stabil genug ist, bevor Sie die Sendeleistung erhöhen.",
"CmtPaLevelHint": "Verwendet für HMS/HMT-Wechselrichter. Stellen Sie sicher, dass Ihre Stromversorgung stabil genug ist, bevor Sie die Sendeleistung erhöhen.",
"CmtFrequency": "CMT2300A Frequenz:",
"CmtFrequencyHint": "Stelle sicher, dass du nur Frequenzen verwendet werden welche im entsprechenden Land erlaubt sind!",
"khz": "kHz",
"Save": "Speichern",
"Min": "Minimum ({db} dBm)",
"Low": "Niedrig ({db} dBm)",

View File

@ -40,6 +40,7 @@
"2001": "Serial cannot be zero!",
"2002": "Poll interval must be greater zero!",
"2003": "Invalid power level setting!",
"2004": "The frequency must be set between {min} and {max} kHz and must be a multiple of 250kHz!",
"3001": "Not deleted anything!",
"3002": "Configuration resettet. Rebooting now...",
"4001": "@:apiresponse.2001",
@ -326,6 +327,9 @@
"CmtPaLevel": "CMT2300A Transmitting power:",
"NrfPaLevelHint": "Used for HM-Inverters. Make sure your power supply is stable enough before increasing the transmit power.",
"CmtPaLevelHint": "Used for HMS/HMT-Inverters. Make sure your power supply is stable enough before increasing the transmit power.",
"CmtFrequency": "CMT2300A Frequency:",
"CmtFrequencyHint": "Make sure to only use frequencies that are allowed in the respective country!",
"khz": "kHz",
"Save": "Save",
"Min": "Minimum ({db} dBm)",
"Low": "Low ({db} dBm)",

View File

@ -40,6 +40,7 @@
"2001": "Le numéro de série ne peut pas être nul !",
"2002": "L'intervalle de sondage doit être supérieur à zéro !",
"2003": "Réglage du niveau de puissance invalide !",
"2004": "The frequency must be set between {min} and {max} kHz and must be a multiple of 250kHz!",
"3001": "Rien n'a été supprimé !",
"3002": "Configuration réinitialisée. Redémarrage maintenant...",
"4001": "@:apiresponse.2001",
@ -326,6 +327,9 @@
"CmtPaLevel": "CMT2300A Niveau de puissance d'émission",
"NrfPaLevelHint": "Used for HM-Inverters. Assurez-vous que votre alimentation est suffisamment stable avant d'augmenter la puissance d'émission.",
"CmtPaLevelHint": "Used for HMS/HMT-Inverters. Assurez-vous que votre alimentation est suffisamment stable avant d'augmenter la puissance d'émission.",
"CmtFrequency": "CMT2300A Frequency:",
"CmtFrequencyHint": "Stelle sicher, dass du nur Frequenzen verwendet werden welche im entsprechenden Land erlaubt sind!",
"khz": "kHz",
"Save": "Sauvegarder",
"Min": "Minimum ({db} dBm)",
"Low": "Bas ({db} dBm)",

View File

@ -5,4 +5,5 @@ export interface DtuConfig {
nrf_palevel: number;
cmt_enabled: boolean;
cmt_palevel: number;
cmt_frequency: number;
}

View File

@ -43,6 +43,13 @@
</select>
</div>
</div>
<InputElement :label="$t('dtuadmin.CmtFrequency')"
v-model="dtuConfigList.cmt_frequency"
type="number" min="860250" max="923500"
:postfix="$t('dtuadmin.khz')"
:tooltip="$t('dtuadmin.CmtFrequencyHint')"
v-if="dtuConfigList.cmt_enabled"/>
</CardElement>
<button type="submit" class="btn btn-primary mb-3">{{ $t('dtuadmin.Save') }}</button>
</form>