diff --git a/include/Configuration.h b/include/Configuration.h index 39284cb8..7c5ce1f6 100644 --- a/include/Configuration.h +++ b/include/Configuration.h @@ -52,72 +52,98 @@ struct INVERTER_CONFIG_T { }; struct CONFIG_T { - uint32_t Cfg_Version; - uint32_t Cfg_SaveCount; + struct { + uint32_t Version; + uint32_t SaveCount; + } Cfg; - char WiFi_Ssid[WIFI_MAX_SSID_STRLEN + 1]; - char WiFi_Password[WIFI_MAX_PASSWORD_STRLEN + 1]; - uint8_t WiFi_Ip[4]; - uint8_t WiFi_Netmask[4]; - uint8_t WiFi_Gateway[4]; - uint8_t WiFi_Dns1[4]; - uint8_t WiFi_Dns2[4]; - bool WiFi_Dhcp; - char WiFi_Hostname[WIFI_MAX_HOSTNAME_STRLEN + 1]; - uint32_t WiFi_ApTimeout; + struct { + char Ssid[WIFI_MAX_SSID_STRLEN + 1]; + char Password[WIFI_MAX_PASSWORD_STRLEN + 1]; + uint8_t Ip[4]; + uint8_t Netmask[4]; + uint8_t Gateway[4]; + uint8_t Dns1[4]; + uint8_t Dns2[4]; + bool Dhcp; + char Hostname[WIFI_MAX_HOSTNAME_STRLEN + 1]; + uint32_t ApTimeout; + } WiFi; - bool Mdns_Enabled; + struct { + bool Enabled; + } Mdns; - char Ntp_Server[NTP_MAX_SERVER_STRLEN + 1]; - char Ntp_Timezone[NTP_MAX_TIMEZONE_STRLEN + 1]; - char Ntp_TimezoneDescr[NTP_MAX_TIMEZONEDESCR_STRLEN + 1]; - double Ntp_Longitude; - double Ntp_Latitude; - uint8_t Ntp_SunsetType; + struct { + char Server[NTP_MAX_SERVER_STRLEN + 1]; + char Timezone[NTP_MAX_TIMEZONE_STRLEN + 1]; + char TimezoneDescr[NTP_MAX_TIMEZONEDESCR_STRLEN + 1]; + double Longitude; + double Latitude; + uint8_t SunsetType; + } Ntp; - bool Mqtt_Enabled; - char Mqtt_Hostname[MQTT_MAX_HOSTNAME_STRLEN + 1]; - uint32_t Mqtt_Port; - char Mqtt_Username[MQTT_MAX_USERNAME_STRLEN + 1]; - char Mqtt_Password[MQTT_MAX_PASSWORD_STRLEN + 1]; - char Mqtt_Topic[MQTT_MAX_TOPIC_STRLEN + 1]; - bool Mqtt_Retain; - char Mqtt_LwtTopic[MQTT_MAX_TOPIC_STRLEN + 1]; - char Mqtt_LwtValue_Online[MQTT_MAX_LWTVALUE_STRLEN + 1]; - char Mqtt_LwtValue_Offline[MQTT_MAX_LWTVALUE_STRLEN + 1]; - uint32_t Mqtt_PublishInterval; - bool Mqtt_CleanSession; + struct { + bool Enabled; + char Hostname[MQTT_MAX_HOSTNAME_STRLEN + 1]; + uint32_t Port; + char Username[MQTT_MAX_USERNAME_STRLEN + 1]; + char Password[MQTT_MAX_PASSWORD_STRLEN + 1]; + char Topic[MQTT_MAX_TOPIC_STRLEN + 1]; + bool Retain; + uint32_t PublishInterval; + bool CleanSession; - bool Mqtt_Hass_Enabled; - bool Mqtt_Hass_Retain; - char Mqtt_Hass_Topic[MQTT_MAX_TOPIC_STRLEN + 1]; - bool Mqtt_Hass_IndividualPanels; - bool Mqtt_Hass_Expire; + struct { + char Topic[MQTT_MAX_TOPIC_STRLEN + 1]; + char Value_Online[MQTT_MAX_LWTVALUE_STRLEN + 1]; + char Value_Offline[MQTT_MAX_LWTVALUE_STRLEN + 1]; + } Lwt; - bool Mqtt_Tls; - char Mqtt_RootCaCert[MQTT_MAX_CERT_STRLEN + 1]; - bool Mqtt_TlsCertLogin; - char Mqtt_ClientCert[MQTT_MAX_CERT_STRLEN + 1]; - char Mqtt_ClientKey[MQTT_MAX_CERT_STRLEN + 1]; + struct { + bool Enabled; + bool Retain; + char Topic[MQTT_MAX_TOPIC_STRLEN + 1]; + bool IndividualPanels; + bool Expire; + } Hass; + + struct { + bool Enabled; + char RootCaCert[MQTT_MAX_CERT_STRLEN + 1]; + bool CertLogin; + char ClientCert[MQTT_MAX_CERT_STRLEN + 1]; + char ClientKey[MQTT_MAX_CERT_STRLEN + 1]; + } Tls; + } Mqtt; + + struct { + uint64_t Serial; + uint32_t PollInterval; + struct { + uint8_t PaLevel; + } Nrf; + struct { + int8_t PaLevel; + uint32_t Frequency; + } Cmt; + } Dtu; + + struct { + char Password[WIFI_MAX_PASSWORD_STRLEN + 1]; + bool AllowReadonly; + } Security; + + struct { + bool PowerSafe; + bool ScreenSaver; + uint8_t Rotation; + uint8_t Contrast; + uint8_t Language; + } Display; INVERTER_CONFIG_T Inverter[INV_MAX_COUNT]; - - uint64_t Dtu_Serial; - uint32_t Dtu_PollInterval; - uint8_t Dtu_NrfPaLevel; - int8_t Dtu_CmtPaLevel; - uint32_t Dtu_CmtFrequency; - - char Security_Password[WIFI_MAX_PASSWORD_STRLEN + 1]; - bool Security_AllowReadonly; - char Dev_PinMapping[DEV_MAX_MAPPING_NAME_STRLEN + 1]; - - bool Display_PowerSafe; - bool Display_ScreenSaver; - uint8_t Display_Rotation; - uint8_t Display_Contrast; - uint8_t Display_Language; }; class ConfigurationClass { diff --git a/src/Configuration.cpp b/src/Configuration.cpp index e90f7191..e88bc399 100644 --- a/src/Configuration.cpp +++ b/src/Configuration.cpp @@ -21,87 +21,87 @@ bool ConfigurationClass::write() if (!f) { return false; } - config.Cfg_SaveCount++; + config.Cfg.SaveCount++; DynamicJsonDocument doc(JSON_BUFFER_SIZE); JsonObject cfg = doc.createNestedObject("cfg"); - cfg["version"] = config.Cfg_Version; - cfg["save_count"] = config.Cfg_SaveCount; + cfg["version"] = config.Cfg.Version; + cfg["save_count"] = config.Cfg.SaveCount; JsonObject wifi = doc.createNestedObject("wifi"); - wifi["ssid"] = config.WiFi_Ssid; - wifi["password"] = config.WiFi_Password; - wifi["ip"] = IPAddress(config.WiFi_Ip).toString(); - wifi["netmask"] = IPAddress(config.WiFi_Netmask).toString(); - wifi["gateway"] = IPAddress(config.WiFi_Gateway).toString(); - wifi["dns1"] = IPAddress(config.WiFi_Dns1).toString(); - wifi["dns2"] = IPAddress(config.WiFi_Dns2).toString(); - wifi["dhcp"] = config.WiFi_Dhcp; - wifi["hostname"] = config.WiFi_Hostname; - wifi["aptimeout"] = config.WiFi_ApTimeout; + wifi["ssid"] = config.WiFi.Ssid; + wifi["password"] = config.WiFi.Password; + wifi["ip"] = IPAddress(config.WiFi.Ip).toString(); + wifi["netmask"] = IPAddress(config.WiFi.Netmask).toString(); + wifi["gateway"] = IPAddress(config.WiFi.Gateway).toString(); + wifi["dns1"] = IPAddress(config.WiFi.Dns1).toString(); + wifi["dns2"] = IPAddress(config.WiFi.Dns2).toString(); + wifi["dhcp"] = config.WiFi.Dhcp; + wifi["hostname"] = config.WiFi.Hostname; + wifi["aptimeout"] = config.WiFi.ApTimeout; JsonObject mdns = doc.createNestedObject("mdns"); - mdns["enabled"] = config.Mdns_Enabled; + mdns["enabled"] = config.Mdns.Enabled; JsonObject ntp = doc.createNestedObject("ntp"); - ntp["server"] = config.Ntp_Server; - ntp["timezone"] = config.Ntp_Timezone; - ntp["timezone_descr"] = config.Ntp_TimezoneDescr; - ntp["latitude"] = config.Ntp_Latitude; - ntp["longitude"] = config.Ntp_Longitude; - ntp["sunsettype"] = config.Ntp_SunsetType; + ntp["server"] = config.Ntp.Server; + ntp["timezone"] = config.Ntp.Timezone; + ntp["timezone_descr"] = config.Ntp.TimezoneDescr; + ntp["latitude"] = config.Ntp.Latitude; + ntp["longitude"] = config.Ntp.Longitude; + ntp["sunsettype"] = config.Ntp.SunsetType; JsonObject mqtt = doc.createNestedObject("mqtt"); - mqtt["enabled"] = config.Mqtt_Enabled; - mqtt["hostname"] = config.Mqtt_Hostname; - mqtt["port"] = config.Mqtt_Port; - mqtt["username"] = config.Mqtt_Username; - mqtt["password"] = config.Mqtt_Password; - mqtt["topic"] = config.Mqtt_Topic; - mqtt["retain"] = config.Mqtt_Retain; - mqtt["publish_interval"] = config.Mqtt_PublishInterval; - mqtt["clean_session"] = config.Mqtt_CleanSession; + mqtt["enabled"] = config.Mqtt.Enabled; + mqtt["hostname"] = config.Mqtt.Hostname; + mqtt["port"] = config.Mqtt.Port; + mqtt["username"] = config.Mqtt.Username; + mqtt["password"] = config.Mqtt.Password; + mqtt["topic"] = config.Mqtt.Topic; + mqtt["retain"] = config.Mqtt.Retain; + mqtt["publish_interval"] = config.Mqtt.PublishInterval; + mqtt["clean_session"] = config.Mqtt.CleanSession; JsonObject mqtt_lwt = mqtt.createNestedObject("lwt"); - mqtt_lwt["topic"] = config.Mqtt_LwtTopic; - mqtt_lwt["value_online"] = config.Mqtt_LwtValue_Online; - mqtt_lwt["value_offline"] = config.Mqtt_LwtValue_Offline; + mqtt_lwt["topic"] = config.Mqtt.Lwt.Topic; + mqtt_lwt["value_online"] = config.Mqtt.Lwt.Value_Online; + mqtt_lwt["value_offline"] = config.Mqtt.Lwt.Value_Offline; JsonObject mqtt_tls = mqtt.createNestedObject("tls"); - mqtt_tls["enabled"] = config.Mqtt_Tls; - mqtt_tls["root_ca_cert"] = config.Mqtt_RootCaCert; - mqtt_tls["certlogin"] = config.Mqtt_TlsCertLogin; - mqtt_tls["client_cert"] = config.Mqtt_ClientCert; - mqtt_tls["client_key"] = config.Mqtt_ClientKey; + mqtt_tls["enabled"] = config.Mqtt.Tls.Enabled; + mqtt_tls["root_ca_cert"] = config.Mqtt.Tls.RootCaCert; + mqtt_tls["certlogin"] = config.Mqtt.Tls.CertLogin; + mqtt_tls["client_cert"] = config.Mqtt.Tls.ClientCert; + mqtt_tls["client_key"] = config.Mqtt.Tls.ClientKey; JsonObject mqtt_hass = mqtt.createNestedObject("hass"); - mqtt_hass["enabled"] = config.Mqtt_Hass_Enabled; - mqtt_hass["retain"] = config.Mqtt_Hass_Retain; - mqtt_hass["topic"] = config.Mqtt_Hass_Topic; - mqtt_hass["individual_panels"] = config.Mqtt_Hass_IndividualPanels; - mqtt_hass["expire"] = config.Mqtt_Hass_Expire; + mqtt_hass["enabled"] = config.Mqtt.Hass.Enabled; + mqtt_hass["retain"] = config.Mqtt.Hass.Retain; + mqtt_hass["topic"] = config.Mqtt.Hass.Topic; + mqtt_hass["individual_panels"] = config.Mqtt.Hass.IndividualPanels; + mqtt_hass["expire"] = config.Mqtt.Hass.Expire; JsonObject dtu = doc.createNestedObject("dtu"); - dtu["serial"] = config.Dtu_Serial; - 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; + dtu["serial"] = config.Dtu.Serial; + dtu["poll_interval"] = config.Dtu.PollInterval; + dtu["nrf_pa_level"] = config.Dtu.Nrf.PaLevel; + dtu["cmt_pa_level"] = config.Dtu.Cmt.PaLevel; + dtu["cmt_frequency"] = config.Dtu.Cmt.Frequency; JsonObject security = doc.createNestedObject("security"); - security["password"] = config.Security_Password; - security["allow_readonly"] = config.Security_AllowReadonly; + security["password"] = config.Security.Password; + security["allow_readonly"] = config.Security.AllowReadonly; JsonObject device = doc.createNestedObject("device"); device["pinmapping"] = config.Dev_PinMapping; JsonObject display = device.createNestedObject("display"); - display["powersafe"] = config.Display_PowerSafe; - display["screensaver"] = config.Display_ScreenSaver; - display["rotation"] = config.Display_Rotation; - display["contrast"] = config.Display_Contrast; - display["language"] = config.Display_Language; + display["powersafe"] = config.Display.PowerSafe; + display["screensaver"] = config.Display.ScreenSaver; + display["rotation"] = config.Display.Rotation; + display["contrast"] = config.Display.Contrast; + display["language"] = config.Display.Language; JsonArray inverters = doc.createNestedArray("inverters"); for (uint8_t i = 0; i < INV_MAX_COUNT; i++) { @@ -148,113 +148,113 @@ bool ConfigurationClass::read() } JsonObject cfg = doc["cfg"]; - config.Cfg_Version = cfg["version"] | CONFIG_VERSION; - config.Cfg_SaveCount = cfg["save_count"] | 0; + config.Cfg.Version = cfg["version"] | CONFIG_VERSION; + config.Cfg.SaveCount = cfg["save_count"] | 0; JsonObject wifi = doc["wifi"]; - strlcpy(config.WiFi_Ssid, wifi["ssid"] | WIFI_SSID, sizeof(config.WiFi_Ssid)); - strlcpy(config.WiFi_Password, wifi["password"] | WIFI_PASSWORD, sizeof(config.WiFi_Password)); - strlcpy(config.WiFi_Hostname, wifi["hostname"] | APP_HOSTNAME, sizeof(config.WiFi_Hostname)); + strlcpy(config.WiFi.Ssid, wifi["ssid"] | WIFI_SSID, sizeof(config.WiFi.Ssid)); + strlcpy(config.WiFi.Password, wifi["password"] | WIFI_PASSWORD, sizeof(config.WiFi.Password)); + strlcpy(config.WiFi.Hostname, wifi["hostname"] | APP_HOSTNAME, sizeof(config.WiFi.Hostname)); IPAddress wifi_ip; wifi_ip.fromString(wifi["ip"] | ""); - config.WiFi_Ip[0] = wifi_ip[0]; - config.WiFi_Ip[1] = wifi_ip[1]; - config.WiFi_Ip[2] = wifi_ip[2]; - config.WiFi_Ip[3] = wifi_ip[3]; + config.WiFi.Ip[0] = wifi_ip[0]; + config.WiFi.Ip[1] = wifi_ip[1]; + config.WiFi.Ip[2] = wifi_ip[2]; + config.WiFi.Ip[3] = wifi_ip[3]; IPAddress wifi_netmask; wifi_netmask.fromString(wifi["netmask"] | ""); - config.WiFi_Netmask[0] = wifi_netmask[0]; - config.WiFi_Netmask[1] = wifi_netmask[1]; - config.WiFi_Netmask[2] = wifi_netmask[2]; - config.WiFi_Netmask[3] = wifi_netmask[3]; + config.WiFi.Netmask[0] = wifi_netmask[0]; + config.WiFi.Netmask[1] = wifi_netmask[1]; + config.WiFi.Netmask[2] = wifi_netmask[2]; + config.WiFi.Netmask[3] = wifi_netmask[3]; IPAddress wifi_gateway; wifi_gateway.fromString(wifi["gateway"] | ""); - config.WiFi_Gateway[0] = wifi_gateway[0]; - config.WiFi_Gateway[1] = wifi_gateway[1]; - config.WiFi_Gateway[2] = wifi_gateway[2]; - config.WiFi_Gateway[3] = wifi_gateway[3]; + config.WiFi.Gateway[0] = wifi_gateway[0]; + config.WiFi.Gateway[1] = wifi_gateway[1]; + config.WiFi.Gateway[2] = wifi_gateway[2]; + config.WiFi.Gateway[3] = wifi_gateway[3]; IPAddress wifi_dns1; wifi_dns1.fromString(wifi["dns1"] | ""); - config.WiFi_Dns1[0] = wifi_dns1[0]; - config.WiFi_Dns1[1] = wifi_dns1[1]; - config.WiFi_Dns1[2] = wifi_dns1[2]; - config.WiFi_Dns1[3] = wifi_dns1[3]; + config.WiFi.Dns1[0] = wifi_dns1[0]; + config.WiFi.Dns1[1] = wifi_dns1[1]; + config.WiFi.Dns1[2] = wifi_dns1[2]; + config.WiFi.Dns1[3] = wifi_dns1[3]; IPAddress wifi_dns2; wifi_dns2.fromString(wifi["dns2"] | ""); - config.WiFi_Dns2[0] = wifi_dns2[0]; - config.WiFi_Dns2[1] = wifi_dns2[1]; - config.WiFi_Dns2[2] = wifi_dns2[2]; - config.WiFi_Dns2[3] = wifi_dns2[3]; + config.WiFi.Dns2[0] = wifi_dns2[0]; + config.WiFi.Dns2[1] = wifi_dns2[1]; + config.WiFi.Dns2[2] = wifi_dns2[2]; + config.WiFi.Dns2[3] = wifi_dns2[3]; - config.WiFi_Dhcp = wifi["dhcp"] | WIFI_DHCP; - config.WiFi_ApTimeout = wifi["aptimeout"] | ACCESS_POINT_TIMEOUT; + config.WiFi.Dhcp = wifi["dhcp"] | WIFI_DHCP; + config.WiFi.ApTimeout = wifi["aptimeout"] | ACCESS_POINT_TIMEOUT; JsonObject mdns = doc["mdns"]; - config.Mdns_Enabled = mdns["enabled"] | MDNS_ENABLED; + config.Mdns.Enabled = mdns["enabled"] | MDNS_ENABLED; JsonObject ntp = doc["ntp"]; - strlcpy(config.Ntp_Server, ntp["server"] | NTP_SERVER, sizeof(config.Ntp_Server)); - strlcpy(config.Ntp_Timezone, ntp["timezone"] | NTP_TIMEZONE, sizeof(config.Ntp_Timezone)); - strlcpy(config.Ntp_TimezoneDescr, ntp["timezone_descr"] | NTP_TIMEZONEDESCR, sizeof(config.Ntp_TimezoneDescr)); - config.Ntp_Latitude = ntp["latitude"] | NTP_LATITUDE; - config.Ntp_Longitude = ntp["longitude"] | NTP_LONGITUDE; - config.Ntp_SunsetType = ntp["sunsettype"] | NTP_SUNSETTYPE; + strlcpy(config.Ntp.Server, ntp["server"] | NTP_SERVER, sizeof(config.Ntp.Server)); + strlcpy(config.Ntp.Timezone, ntp["timezone"] | NTP_TIMEZONE, sizeof(config.Ntp.Timezone)); + strlcpy(config.Ntp.TimezoneDescr, ntp["timezone_descr"] | NTP_TIMEZONEDESCR, sizeof(config.Ntp.TimezoneDescr)); + config.Ntp.Latitude = ntp["latitude"] | NTP_LATITUDE; + config.Ntp.Longitude = ntp["longitude"] | NTP_LONGITUDE; + config.Ntp.SunsetType = ntp["sunsettype"] | NTP_SUNSETTYPE; JsonObject mqtt = doc["mqtt"]; - config.Mqtt_Enabled = mqtt["enabled"] | MQTT_ENABLED; - strlcpy(config.Mqtt_Hostname, mqtt["hostname"] | MQTT_HOST, sizeof(config.Mqtt_Hostname)); - config.Mqtt_Port = mqtt["port"] | MQTT_PORT; - strlcpy(config.Mqtt_Username, mqtt["username"] | MQTT_USER, sizeof(config.Mqtt_Username)); - strlcpy(config.Mqtt_Password, mqtt["password"] | MQTT_PASSWORD, sizeof(config.Mqtt_Password)); - strlcpy(config.Mqtt_Topic, mqtt["topic"] | MQTT_TOPIC, sizeof(config.Mqtt_Topic)); - config.Mqtt_Retain = mqtt["retain"] | MQTT_RETAIN; - config.Mqtt_PublishInterval = mqtt["publish_interval"] | MQTT_PUBLISH_INTERVAL; - config.Mqtt_CleanSession = mqtt["clean_session"] | MQTT_CLEAN_SESSION; + config.Mqtt.Enabled = mqtt["enabled"] | MQTT_ENABLED; + strlcpy(config.Mqtt.Hostname, mqtt["hostname"] | MQTT_HOST, sizeof(config.Mqtt.Hostname)); + config.Mqtt.Port = mqtt["port"] | MQTT_PORT; + strlcpy(config.Mqtt.Username, mqtt["username"] | MQTT_USER, sizeof(config.Mqtt.Username)); + strlcpy(config.Mqtt.Password, mqtt["password"] | MQTT_PASSWORD, sizeof(config.Mqtt.Password)); + strlcpy(config.Mqtt.Topic, mqtt["topic"] | MQTT_TOPIC, sizeof(config.Mqtt.Topic)); + config.Mqtt.Retain = mqtt["retain"] | MQTT_RETAIN; + config.Mqtt.PublishInterval = mqtt["publish_interval"] | MQTT_PUBLISH_INTERVAL; + config.Mqtt.CleanSession = mqtt["clean_session"] | MQTT_CLEAN_SESSION; JsonObject mqtt_lwt = mqtt["lwt"]; - strlcpy(config.Mqtt_LwtTopic, mqtt_lwt["topic"] | MQTT_LWT_TOPIC, sizeof(config.Mqtt_LwtTopic)); - strlcpy(config.Mqtt_LwtValue_Online, mqtt_lwt["value_online"] | MQTT_LWT_ONLINE, sizeof(config.Mqtt_LwtValue_Online)); - strlcpy(config.Mqtt_LwtValue_Offline, mqtt_lwt["value_offline"] | MQTT_LWT_OFFLINE, sizeof(config.Mqtt_LwtValue_Offline)); + strlcpy(config.Mqtt.Lwt.Topic, mqtt_lwt["topic"] | MQTT_LWT_TOPIC, sizeof(config.Mqtt.Lwt.Topic)); + strlcpy(config.Mqtt.Lwt.Value_Online, mqtt_lwt["value_online"] | MQTT_LWT_ONLINE, sizeof(config.Mqtt.Lwt.Value_Online)); + strlcpy(config.Mqtt.Lwt.Value_Offline, mqtt_lwt["value_offline"] | MQTT_LWT_OFFLINE, sizeof(config.Mqtt.Lwt.Value_Offline)); JsonObject mqtt_tls = mqtt["tls"]; - config.Mqtt_Tls = mqtt_tls["enabled"] | MQTT_TLS; - strlcpy(config.Mqtt_RootCaCert, mqtt_tls["root_ca_cert"] | MQTT_ROOT_CA_CERT, sizeof(config.Mqtt_RootCaCert)); - config.Mqtt_TlsCertLogin = mqtt_tls["certlogin"] | MQTT_TLSCERTLOGIN; - strlcpy(config.Mqtt_ClientCert, mqtt_tls["client_cert"] | MQTT_TLSCLIENTCERT, sizeof(config.Mqtt_ClientCert)); - strlcpy(config.Mqtt_ClientKey, mqtt_tls["client_key"] | MQTT_TLSCLIENTKEY, sizeof(config.Mqtt_ClientKey)); + config.Mqtt.Tls.Enabled = mqtt_tls["enabled"] | MQTT_TLS; + strlcpy(config.Mqtt.Tls.RootCaCert, mqtt_tls["root_ca_cert"] | MQTT_ROOT_CA_CERT, sizeof(config.Mqtt.Tls.RootCaCert)); + config.Mqtt.Tls.CertLogin = mqtt_tls["certlogin"] | MQTT_TLSCERTLOGIN; + strlcpy(config.Mqtt.Tls.ClientCert, mqtt_tls["client_cert"] | MQTT_TLSCLIENTCERT, sizeof(config.Mqtt.Tls.ClientCert)); + strlcpy(config.Mqtt.Tls.ClientKey, mqtt_tls["client_key"] | MQTT_TLSCLIENTKEY, sizeof(config.Mqtt.Tls.ClientKey)); JsonObject mqtt_hass = mqtt["hass"]; - config.Mqtt_Hass_Enabled = mqtt_hass["enabled"] | MQTT_HASS_ENABLED; - config.Mqtt_Hass_Retain = mqtt_hass["retain"] | MQTT_HASS_RETAIN; - config.Mqtt_Hass_Expire = mqtt_hass["expire"] | MQTT_HASS_EXPIRE; - config.Mqtt_Hass_IndividualPanels = mqtt_hass["individual_panels"] | MQTT_HASS_INDIVIDUALPANELS; - strlcpy(config.Mqtt_Hass_Topic, mqtt_hass["topic"] | MQTT_HASS_TOPIC, sizeof(config.Mqtt_Hass_Topic)); + config.Mqtt.Hass.Enabled = mqtt_hass["enabled"] | MQTT_HASS_ENABLED; + config.Mqtt.Hass.Retain = mqtt_hass["retain"] | MQTT_HASS_RETAIN; + config.Mqtt.Hass.Expire = mqtt_hass["expire"] | MQTT_HASS_EXPIRE; + config.Mqtt.Hass.IndividualPanels = mqtt_hass["individual_panels"] | MQTT_HASS_INDIVIDUALPANELS; + strlcpy(config.Mqtt.Hass.Topic, mqtt_hass["topic"] | MQTT_HASS_TOPIC, sizeof(config.Mqtt.Hass.Topic)); JsonObject dtu = doc["dtu"]; - config.Dtu_Serial = dtu["serial"] | DTU_SERIAL; - 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; + config.Dtu.Serial = dtu["serial"] | DTU_SERIAL; + config.Dtu.PollInterval = dtu["poll_interval"] | DTU_POLL_INTERVAL; + config.Dtu.Nrf.PaLevel = dtu["nrf_pa_level"] | DTU_NRF_PA_LEVEL; + config.Dtu.Cmt.PaLevel = dtu["cmt_pa_level"] | DTU_CMT_PA_LEVEL; + config.Dtu.Cmt.Frequency = dtu["cmt_frequency"] | DTU_CMT_FREQUENCY; JsonObject security = doc["security"]; - strlcpy(config.Security_Password, security["password"] | ACCESS_POINT_PASSWORD, sizeof(config.Security_Password)); - config.Security_AllowReadonly = security["allow_readonly"] | SECURITY_ALLOW_READONLY; + strlcpy(config.Security.Password, security["password"] | ACCESS_POINT_PASSWORD, sizeof(config.Security.Password)); + config.Security.AllowReadonly = security["allow_readonly"] | SECURITY_ALLOW_READONLY; JsonObject device = doc["device"]; strlcpy(config.Dev_PinMapping, device["pinmapping"] | DEV_PINMAPPING, sizeof(config.Dev_PinMapping)); JsonObject display = device["display"]; - config.Display_PowerSafe = display["powersafe"] | DISPLAY_POWERSAFE; - config.Display_ScreenSaver = display["screensaver"] | DISPLAY_SCREENSAVER; - config.Display_Rotation = display["rotation"] | DISPLAY_ROTATION; - config.Display_Contrast = display["contrast"] | DISPLAY_CONTRAST; - config.Display_Language = display["language"] | DISPLAY_LANGUAGE; + config.Display.PowerSafe = display["powersafe"] | DISPLAY_POWERSAFE; + config.Display.ScreenSaver = display["screensaver"] | DISPLAY_SCREENSAVER; + config.Display.Rotation = display["rotation"] | DISPLAY_ROTATION; + config.Display.Contrast = display["contrast"] | DISPLAY_CONTRAST; + config.Display.Language = display["language"] | DISPLAY_LANGUAGE; JsonArray inverters = doc["inverters"]; for (uint8_t i = 0; i < INV_MAX_COUNT; i++) { @@ -299,7 +299,7 @@ void ConfigurationClass::migrate() return; } - if (config.Cfg_Version < 0x00011700) { + if (config.Cfg.Version < 0x00011700) { JsonArray inverters = doc["inverters"]; for (uint8_t i = 0; i < INV_MAX_COUNT; i++) { JsonObject inv = inverters[i].as(); @@ -311,19 +311,19 @@ void ConfigurationClass::migrate() } } - if (config.Cfg_Version < 0x00011800) { + if (config.Cfg.Version < 0x00011800) { JsonObject mqtt = doc["mqtt"]; - config.Mqtt_PublishInterval = mqtt["publish_invterval"]; + config.Mqtt.PublishInterval = mqtt["publish_invterval"]; } - if (config.Cfg_Version < 0x00011900) { + if (config.Cfg.Version < 0x00011900) { JsonObject dtu = doc["dtu"]; - config.Dtu_NrfPaLevel = dtu["pa_level"]; + config.Dtu.Nrf.PaLevel = dtu["pa_level"]; } f.close(); - config.Cfg_Version = CONFIG_VERSION; + config.Cfg.Version = CONFIG_VERSION; write(); read(); } diff --git a/src/InverterSettings.cpp b/src/InverterSettings.cpp index c5050bff..ce692bf1 100644 --- a/src/InverterSettings.cpp +++ b/src/InverterSettings.cpp @@ -46,19 +46,19 @@ void InverterSettingsClass::init() if (PinMapping.isValidCmt2300Config()) { Hoymiles.initCMT(pin.cmt_sdio, pin.cmt_clk, pin.cmt_cs, pin.cmt_fcs, pin.cmt_gpio2, pin.cmt_gpio3); MessageOutput.println(F(" Setting CMT target frequency... ")); - Hoymiles.getRadioCmt()->setInverterTargetFrequency(config.Dtu_CmtFrequency); + Hoymiles.getRadioCmt()->setInverterTargetFrequency(config.Dtu.Cmt.Frequency); } MessageOutput.println(" Setting radio PA level... "); - Hoymiles.getRadioNrf()->setPALevel((rf24_pa_dbm_e)config.Dtu_NrfPaLevel); - Hoymiles.getRadioCmt()->setPALevel(config.Dtu_CmtPaLevel); + Hoymiles.getRadioNrf()->setPALevel((rf24_pa_dbm_e)config.Dtu.Nrf.PaLevel); + Hoymiles.getRadioCmt()->setPALevel(config.Dtu.Cmt.PaLevel); MessageOutput.println(" Setting DTU serial... "); - Hoymiles.getRadioNrf()->setDtuSerial(config.Dtu_Serial); - Hoymiles.getRadioCmt()->setDtuSerial(config.Dtu_Serial); + Hoymiles.getRadioNrf()->setDtuSerial(config.Dtu.Serial); + Hoymiles.getRadioCmt()->setDtuSerial(config.Dtu.Serial); MessageOutput.println(" Setting poll interval... "); - Hoymiles.setPollInterval(config.Dtu_PollInterval); + Hoymiles.setPollInterval(config.Dtu.PollInterval); for (uint8_t i = 0; i < INV_MAX_COUNT; i++) { if (config.Inverter[i].Serial > 0) { diff --git a/src/Led_Single.cpp b/src/Led_Single.cpp index 09658c85..24aabbd8 100644 --- a/src/Led_Single.cpp +++ b/src/Led_Single.cpp @@ -52,7 +52,7 @@ void LedSingleClass::loop() } struct tm timeinfo; - if (getLocalTime(&timeinfo, 5) && (!config.Mqtt_Enabled || (config.Mqtt_Enabled && MqttSettings.getConnected()))) { + if (getLocalTime(&timeinfo, 5) && (!config.Mqtt.Enabled || (config.Mqtt.Enabled && MqttSettings.getConnected()))) { _ledState[0] = LedState_t::On; } diff --git a/src/MqttHandleDtu.cpp b/src/MqttHandleDtu.cpp index ee5ad417..000b6c57 100644 --- a/src/MqttHandleDtu.cpp +++ b/src/MqttHandleDtu.cpp @@ -22,7 +22,7 @@ void MqttHandleDtuClass::loop() const CONFIG_T& config = Configuration.get(); - if (millis() - _lastPublish > (config.Mqtt_PublishInterval * 1000)) { + if (millis() - _lastPublish > (config.Mqtt.PublishInterval * 1000)) { MqttSettings.publish("dtu/uptime", String(millis() / 1000)); MqttSettings.publish("dtu/ip", NetworkSettings.localIP().toString()); MqttSettings.publish("dtu/hostname", NetworkSettings.getHostname()); diff --git a/src/MqttHandleHass.cpp b/src/MqttHandleHass.cpp index dd2f5608..e5842240 100644 --- a/src/MqttHandleHass.cpp +++ b/src/MqttHandleHass.cpp @@ -37,7 +37,7 @@ void MqttHandleHassClass::forceUpdate() void MqttHandleHassClass::publishConfig() { - if (!Configuration.get().Mqtt_Hass_Enabled) { + if (!Configuration.get().Mqtt.Hass.Enabled) { return; } @@ -69,7 +69,7 @@ void MqttHandleHassClass::publishConfig() for (auto& c : inv->Statistics()->getChannelsByType(t)) { for (uint8_t f = 0; f < DEVICE_CLS_ASSIGN_LIST_LEN; f++) { bool clear = false; - if (t == TYPE_DC && !config.Mqtt_Hass_IndividualPanels) { + if (t == TYPE_DC && !config.Mqtt.Hass.IndividualPanels) { clear = true; } publishField(inv, t, c, deviceFieldAssignment[f], clear); @@ -133,8 +133,8 @@ void MqttHandleHassClass::publishField(std::shared_ptr inv, Ch JsonObject deviceObj = root.createNestedObject("dev"); createDeviceInfo(deviceObj, inv); - if (Configuration.get().Mqtt_Hass_Expire) { - root["exp_aft"] = Hoymiles.getNumInverters() * max(Hoymiles.PollInterval(), Configuration.get().Mqtt_PublishInterval) * inv->getReachableThreshold(); + if (Configuration.get().Mqtt.Hass.Expire) { + root["exp_aft"] = Hoymiles.getNumInverters() * max(Hoymiles.PollInterval(), Configuration.get().Mqtt.PublishInterval) * inv->getReachableThreshold(); } if (devCls != 0) { root["dev_cla"] = devCls; @@ -266,7 +266,7 @@ void MqttHandleHassClass::createDeviceInfo(JsonObject& object, std::shared_ptr (config.Mqtt_PublishInterval * 1000)) { + if (millis() - _lastPublish > (config.Mqtt.PublishInterval * 1000)) { // Loop all inverters for (uint8_t i = 0; i < Hoymiles.getNumInverters(); i++) { auto inv = Hoymiles.getInverterByPos(i); @@ -166,7 +166,7 @@ void MqttHandleInverterClass::onMqttMessage(const espMqttClientTypes::MessagePro char* serial_str; char* subtopic; char* setting; - char* rest = &token_topic[strlen(config.Mqtt_Topic)]; + char* rest = &token_topic[strlen(config.Mqtt.Topic)]; serial_str = strtok_r(rest, "/", &rest); subtopic = strtok_r(rest, "/", &rest); diff --git a/src/MqttHandleInverterTotal.cpp b/src/MqttHandleInverterTotal.cpp index ac8e6a4e..5e18acd4 100644 --- a/src/MqttHandleInverterTotal.cpp +++ b/src/MqttHandleInverterTotal.cpp @@ -12,7 +12,7 @@ MqttHandleInverterTotalClass MqttHandleInverterTotal; void MqttHandleInverterTotalClass::init() { - _lastPublish.set(Configuration.get().Mqtt_PublishInterval * 1000); + _lastPublish.set(Configuration.get().Mqtt.PublishInterval * 1000); } void MqttHandleInverterTotalClass::loop() @@ -30,6 +30,6 @@ void MqttHandleInverterTotalClass::loop() MqttSettings.publish("dc/irradiation", String(Datastore.getTotalDcIrradiation(), 3)); MqttSettings.publish("dc/is_valid", String(Datastore.getIsAllEnabledReachable())); - _lastPublish.set(Configuration.get().Mqtt_PublishInterval * 1000); + _lastPublish.set(Configuration.get().Mqtt.PublishInterval * 1000); } } diff --git a/src/MqttSettings.cpp b/src/MqttSettings.cpp index eeb92bb4..2a4ba262 100644 --- a/src/MqttSettings.cpp +++ b/src/MqttSettings.cpp @@ -30,7 +30,7 @@ void MqttSettingsClass::onMqttConnect(bool sessionPresent) { MessageOutput.println("Connected to MQTT."); const CONFIG_T& config = Configuration.get(); - publish(config.Mqtt_LwtTopic, config.Mqtt_LwtValue_Online); + publish(config.Mqtt.Lwt.Topic, config.Mqtt.Lwt.Value_Online); std::lock_guard lock(_clientLock); if (mqttClient != nullptr) { @@ -99,7 +99,7 @@ void MqttSettingsClass::onMqttMessage(const espMqttClientTypes::MessagePropertie void MqttSettingsClass::performConnect() { - if (NetworkSettings.isConnected() && Configuration.get().Mqtt_Enabled) { + if (NetworkSettings.isConnected() && Configuration.get().Mqtt.Enabled) { using std::placeholders::_1; using std::placeholders::_2; using std::placeholders::_3; @@ -114,29 +114,29 @@ void MqttSettingsClass::performConnect() MessageOutput.println("Connecting to MQTT..."); const CONFIG_T& config = Configuration.get(); - willTopic = getPrefix() + config.Mqtt_LwtTopic; + willTopic = getPrefix() + config.Mqtt.Lwt.Topic; clientId = NetworkSettings.getApName(); - if (config.Mqtt_Tls) { - static_cast(mqttClient)->setCACert(config.Mqtt_RootCaCert); - static_cast(mqttClient)->setServer(config.Mqtt_Hostname, config.Mqtt_Port); - if (config.Mqtt_TlsCertLogin) { - static_cast(mqttClient)->setCertificate(config.Mqtt_ClientCert); - static_cast(mqttClient)->setPrivateKey(config.Mqtt_ClientKey); + if (config.Mqtt.Tls.Enabled) { + static_cast(mqttClient)->setCACert(config.Mqtt.Tls.RootCaCert); + static_cast(mqttClient)->setServer(config.Mqtt.Hostname, config.Mqtt.Port); + if (config.Mqtt.Tls.CertLogin) { + static_cast(mqttClient)->setCertificate(config.Mqtt.Tls.ClientCert); + static_cast(mqttClient)->setPrivateKey(config.Mqtt.Tls.ClientKey); } else { - static_cast(mqttClient)->setCredentials(config.Mqtt_Username, config.Mqtt_Password); + static_cast(mqttClient)->setCredentials(config.Mqtt.Username, config.Mqtt.Password); } - static_cast(mqttClient)->setWill(willTopic.c_str(), 2, config.Mqtt_Retain, config.Mqtt_LwtValue_Offline); + static_cast(mqttClient)->setWill(willTopic.c_str(), 2, config.Mqtt.Retain, config.Mqtt.Lwt.Value_Offline); static_cast(mqttClient)->setClientId(clientId.c_str()); - static_cast(mqttClient)->setCleanSession(config.Mqtt_CleanSession); + static_cast(mqttClient)->setCleanSession(config.Mqtt.CleanSession); static_cast(mqttClient)->onConnect(std::bind(&MqttSettingsClass::onMqttConnect, this, _1)); static_cast(mqttClient)->onDisconnect(std::bind(&MqttSettingsClass::onMqttDisconnect, this, _1)); static_cast(mqttClient)->onMessage(std::bind(&MqttSettingsClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); } else { - static_cast(mqttClient)->setServer(config.Mqtt_Hostname, config.Mqtt_Port); - static_cast(mqttClient)->setCredentials(config.Mqtt_Username, config.Mqtt_Password); - static_cast(mqttClient)->setWill(willTopic.c_str(), 2, config.Mqtt_Retain, config.Mqtt_LwtValue_Offline); + static_cast(mqttClient)->setServer(config.Mqtt.Hostname, config.Mqtt.Port); + static_cast(mqttClient)->setCredentials(config.Mqtt.Username, config.Mqtt.Password); + static_cast(mqttClient)->setWill(willTopic.c_str(), 2, config.Mqtt.Retain, config.Mqtt.Lwt.Value_Offline); static_cast(mqttClient)->setClientId(clientId.c_str()); - static_cast(mqttClient)->setCleanSession(config.Mqtt_CleanSession); + static_cast(mqttClient)->setCleanSession(config.Mqtt.CleanSession); static_cast(mqttClient)->onConnect(std::bind(&MqttSettingsClass::onMqttConnect, this, _1)); static_cast(mqttClient)->onDisconnect(std::bind(&MqttSettingsClass::onMqttDisconnect, this, _1)); static_cast(mqttClient)->onMessage(std::bind(&MqttSettingsClass::onMqttMessage, this, _1, _2, _3, _4, _5, _6)); @@ -148,7 +148,7 @@ void MqttSettingsClass::performConnect() void MqttSettingsClass::performDisconnect() { const CONFIG_T& config = Configuration.get(); - publish(config.Mqtt_LwtTopic, config.Mqtt_LwtValue_Offline); + publish(config.Mqtt.Lwt.Topic, config.Mqtt.Lwt.Value_Offline); std::lock_guard lock(_clientLock); if (mqttClient == nullptr) { return; @@ -177,7 +177,7 @@ bool MqttSettingsClass::getConnected() String MqttSettingsClass::getPrefix() { - return Configuration.get().Mqtt_Topic; + return Configuration.get().Mqtt.Topic; } void MqttSettingsClass::publish(const String& subtopic, const String& payload) @@ -188,7 +188,7 @@ void MqttSettingsClass::publish(const String& subtopic, const String& payload) String value = payload; value.trim(); - publishGeneric(topic, value, Configuration.get().Mqtt_Retain, 0); + publishGeneric(topic, value, Configuration.get().Mqtt.Retain, 0); } void MqttSettingsClass::publishGeneric(const String& topic, const String& payload, bool retain, uint8_t qos) @@ -216,7 +216,7 @@ void MqttSettingsClass::createMqttClientObject() mqttClient = nullptr; } const CONFIG_T& config = Configuration.get(); - if (config.Mqtt_Tls) { + if (config.Mqtt.Tls.Enabled) { mqttClient = static_cast(new espMqttClientSecure); } else { mqttClient = static_cast(new espMqttClient); diff --git a/src/NetworkSettings.cpp b/src/NetworkSettings.cpp index 7e725ff1..5d43ba5c 100644 --- a/src/NetworkSettings.cpp +++ b/src/NetworkSettings.cpp @@ -113,7 +113,7 @@ void NetworkSettingsClass::raiseEvent(network_event event) void NetworkSettingsClass::handleMDNS() { - bool mdnsEnabled = Configuration.get().Mdns_Enabled; + bool mdnsEnabled = Configuration.get().Mdns.Enabled; if (lastMdnsEnabled == mdnsEnabled) { return; @@ -146,7 +146,7 @@ void NetworkSettingsClass::setupMode() WiFi.mode(WIFI_AP_STA); String ssidString = getApName(); WiFi.softAPConfig(apIp, apIp, apNetmask); - WiFi.softAP((const char*)ssidString.c_str(), Configuration.get().Security_Password); + WiFi.softAP((const char*)ssidString.c_str(), Configuration.get().Security.Password); dnsServer->setErrorReplyCode(DNSReplyCode::NoError); dnsServer->start(DNS_PORT, "*", WiFi.softAPIP()); dnsServerStatus = true; @@ -170,7 +170,7 @@ void NetworkSettingsClass::enableAdminMode() { adminEnabled = true; adminTimeoutCounter = 0; - adminTimeoutCounterMax = Configuration.get().WiFi_ApTimeout * 60; + adminTimeoutCounterMax = Configuration.get().WiFi.ApTimeout * 60; setupMode(); } @@ -255,15 +255,15 @@ void NetworkSettingsClass::loop() void NetworkSettingsClass::applyConfig() { setHostname(); - if (!strcmp(Configuration.get().WiFi_Ssid, "")) { + if (!strcmp(Configuration.get().WiFi.Ssid, "")) { return; } MessageOutput.print("Configuring WiFi STA using "); - if (strcmp(WiFi.SSID().c_str(), Configuration.get().WiFi_Ssid) || strcmp(WiFi.psk().c_str(), Configuration.get().WiFi_Password)) { + if (strcmp(WiFi.SSID().c_str(), Configuration.get().WiFi.Ssid) || strcmp(WiFi.psk().c_str(), Configuration.get().WiFi.Password)) { MessageOutput.print("new credentials... "); WiFi.begin( - Configuration.get().WiFi_Ssid, - Configuration.get().WiFi_Password); + Configuration.get().WiFi.Ssid, + Configuration.get().WiFi.Password); } else { MessageOutput.print("existing credentials... "); WiFi.begin(); @@ -298,33 +298,33 @@ void NetworkSettingsClass::setHostname() void NetworkSettingsClass::setStaticIp() { if (_networkMode == network_mode::WiFi) { - if (Configuration.get().WiFi_Dhcp) { + if (Configuration.get().WiFi.Dhcp) { MessageOutput.print("Configuring WiFi STA DHCP IP... "); WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE); MessageOutput.println("done"); } else { MessageOutput.print("Configuring WiFi STA static IP... "); WiFi.config( - IPAddress(Configuration.get().WiFi_Ip), - IPAddress(Configuration.get().WiFi_Gateway), - IPAddress(Configuration.get().WiFi_Netmask), - IPAddress(Configuration.get().WiFi_Dns1), - IPAddress(Configuration.get().WiFi_Dns2)); + IPAddress(Configuration.get().WiFi.Ip), + IPAddress(Configuration.get().WiFi.Gateway), + IPAddress(Configuration.get().WiFi.Netmask), + IPAddress(Configuration.get().WiFi.Dns1), + IPAddress(Configuration.get().WiFi.Dns2)); MessageOutput.println("done"); } } else if (_networkMode == network_mode::Ethernet) { - if (Configuration.get().WiFi_Dhcp) { + if (Configuration.get().WiFi.Ssid) { MessageOutput.print("Configuring Ethernet DHCP IP... "); ETH.config(INADDR_NONE, INADDR_NONE, INADDR_NONE, INADDR_NONE); MessageOutput.println("done"); } else { MessageOutput.print("Configuring Ethernet static IP... "); ETH.config( - IPAddress(Configuration.get().WiFi_Ip), - IPAddress(Configuration.get().WiFi_Gateway), - IPAddress(Configuration.get().WiFi_Netmask), - IPAddress(Configuration.get().WiFi_Dns1), - IPAddress(Configuration.get().WiFi_Dns2)); + IPAddress(Configuration.get().WiFi.Ip), + IPAddress(Configuration.get().WiFi.Gateway), + IPAddress(Configuration.get().WiFi.Netmask), + IPAddress(Configuration.get().WiFi.Dns1), + IPAddress(Configuration.get().WiFi.Dns2)); MessageOutput.println("done"); } } @@ -408,7 +408,7 @@ String NetworkSettingsClass::getHostname() uint8_t pos = 0; uint32_t chipId = Utils::getChipId(); - snprintf(preparedHostname, WIFI_MAX_HOSTNAME_STRLEN + 1, config.WiFi_Hostname, chipId); + snprintf(preparedHostname, WIFI_MAX_HOSTNAME_STRLEN + 1, config.WiFi.Hostname, chipId); const char* pC = preparedHostname; while (*pC && pos < WIFI_MAX_HOSTNAME_STRLEN) { // while !null and not over length diff --git a/src/NtpSettings.cpp b/src/NtpSettings.cpp index ce043384..b89904f3 100644 --- a/src/NtpSettings.cpp +++ b/src/NtpSettings.cpp @@ -19,12 +19,12 @@ void NtpSettingsClass::init() void NtpSettingsClass::setServer() { - configTime(0, 0, Configuration.get().Ntp_Server); + configTime(0, 0, Configuration.get().Ntp.Server); } void NtpSettingsClass::setTimezone() { - setenv("TZ", Configuration.get().Ntp_Timezone, 1); + setenv("TZ", Configuration.get().Ntp.Timezone, 1); tzset(); } diff --git a/src/SunPosition.cpp b/src/SunPosition.cpp index ccbaeb6b..48e30820 100644 --- a/src/SunPosition.cpp +++ b/src/SunPosition.cpp @@ -80,7 +80,7 @@ void SunPositionClass::updateSunData() CONFIG_T const& config = Configuration.get(); double sunset_type; - switch (config.Ntp_SunsetType) { + switch (config.Ntp.SunsetType) { case 0: sunset_type = SunSet::SUNSET_OFFICIAL; break; @@ -98,7 +98,7 @@ void SunPositionClass::updateSunData() int offset = Utils::getTimezoneOffset() / 3600; SunSet sun; - sun.setPosition(config.Ntp_Latitude, config.Ntp_Longitude, offset); + sun.setPosition(config.Ntp.Latitude, config.Ntp.Longitude, offset); sun.setCurrentDate(1900 + timeinfo.tm_year, timeinfo.tm_mon + 1, timeinfo.tm_mday); double sunriseRaw = sun.calcCustomSunrise(sunset_type); diff --git a/src/WebApi.cpp b/src/WebApi.cpp index 511a3845..717c3525 100644 --- a/src/WebApi.cpp +++ b/src/WebApi.cpp @@ -67,7 +67,7 @@ void WebApiClass::loop() bool WebApiClass::checkCredentials(AsyncWebServerRequest* request) { CONFIG_T& config = Configuration.get(); - if (request->authenticate(AUTH_USERNAME, config.Security_Password)) { + if (request->authenticate(AUTH_USERNAME, config.Security.Password)) { return true; } @@ -85,7 +85,7 @@ bool WebApiClass::checkCredentials(AsyncWebServerRequest* request) bool WebApiClass::checkCredentialsReadonly(AsyncWebServerRequest* request) { CONFIG_T& config = Configuration.get(); - if (config.Security_AllowReadonly) { + if (config.Security.AllowReadonly) { return true; } else { return checkCredentials(request); diff --git a/src/WebApi_device.cpp b/src/WebApi_device.cpp index 507a7e16..4dfbd146 100644 --- a/src/WebApi_device.cpp +++ b/src/WebApi_device.cpp @@ -77,11 +77,11 @@ void WebApiDeviceClass::onDeviceAdminGet(AsyncWebServerRequest* request) ledPinObj["led1"] = pin.led[1]; JsonObject display = root.createNestedObject("display"); - display["rotation"] = config.Display_Rotation; - display["power_safe"] = config.Display_PowerSafe; - display["screensaver"] = config.Display_ScreenSaver; - display["contrast"] = config.Display_Contrast; - display["language"] = config.Display_Language; + display["rotation"] = config.Display.Rotation; + display["power_safe"] = config.Display.PowerSafe; + display["screensaver"] = config.Display.ScreenSaver; + display["contrast"] = config.Display.Contrast; + display["language"] = config.Display.Language; response->setLength(); request->send(response); @@ -148,17 +148,17 @@ void WebApiDeviceClass::onDeviceAdminPost(AsyncWebServerRequest* request) bool performRestart = root["curPin"]["name"].as() != config.Dev_PinMapping; strlcpy(config.Dev_PinMapping, root["curPin"]["name"].as().c_str(), sizeof(config.Dev_PinMapping)); - config.Display_Rotation = root["display"]["rotation"].as(); - config.Display_PowerSafe = root["display"]["power_safe"].as(); - config.Display_ScreenSaver = root["display"]["screensaver"].as(); - config.Display_Contrast = root["display"]["contrast"].as(); - config.Display_Language = root["display"]["language"].as(); + config.Display.Rotation = root["display"]["rotation"].as(); + config.Display.PowerSafe = root["display"]["power_safe"].as(); + config.Display.ScreenSaver = root["display"]["screensaver"].as(); + config.Display.Contrast = root["display"]["contrast"].as(); + config.Display.Language = root["display"]["language"].as(); - Display.setOrientation(config.Display_Rotation); - Display.enablePowerSafe = config.Display_PowerSafe; - Display.enableScreensaver = config.Display_ScreenSaver; - Display.setContrast(config.Display_Contrast); - Display.setLanguage(config.Display_Language); + Display.setOrientation(config.Display.Rotation); + Display.enablePowerSafe = config.Display.PowerSafe; + Display.enableScreensaver = config.Display.ScreenSaver; + Display.setContrast(config.Display.Contrast); + Display.setLanguage(config.Display.Language); Configuration.write(); diff --git a/src/WebApi_dtu.cpp b/src/WebApi_dtu.cpp index 1ae7c408..ea130b1f 100644 --- a/src/WebApi_dtu.cpp +++ b/src/WebApi_dtu.cpp @@ -36,15 +36,15 @@ void WebApiDtuClass::onDtuAdminGet(AsyncWebServerRequest* request) // DTU Serial is read as HEX char buffer[sizeof(uint64_t) * 8 + 1]; snprintf(buffer, sizeof(buffer), "%0x%08x", - ((uint32_t)((config.Dtu_Serial >> 32) & 0xFFFFFFFF)), - ((uint32_t)(config.Dtu_Serial & 0xFFFFFFFF))); + ((uint32_t)((config.Dtu.Serial >> 32) & 0xFFFFFFFF)), + ((uint32_t)(config.Dtu.Serial & 0xFFFFFFFF))); root["serial"] = buffer; - root["pollinterval"] = config.Dtu_PollInterval; + root["pollinterval"] = config.Dtu.PollInterval; root["nrf_enabled"] = Hoymiles.getRadioNrf()->isInitialized(); - root["nrf_palevel"] = config.Dtu_NrfPaLevel; + root["nrf_palevel"] = config.Dtu.Nrf.PaLevel; root["cmt_enabled"] = Hoymiles.getRadioCmt()->isInitialized(); - root["cmt_palevel"] = config.Dtu_CmtPaLevel; - root["cmt_frequency"] = config.Dtu_CmtFrequency; + root["cmt_palevel"] = config.Dtu.Cmt.PaLevel; + root["cmt_frequency"] = config.Dtu.Cmt.Frequency; response->setLength(); request->send(response); @@ -149,11 +149,11 @@ void WebApiDtuClass::onDtuAdminPost(AsyncWebServerRequest* request) CONFIG_T& config = Configuration.get(); // Interpret the string as a hex value and convert it to uint64_t - config.Dtu_Serial = strtoll(root["serial"].as().c_str(), NULL, 16); - config.Dtu_PollInterval = root["pollinterval"].as(); - config.Dtu_NrfPaLevel = root["nrf_palevel"].as(); - config.Dtu_CmtPaLevel = root["cmt_palevel"].as(); - config.Dtu_CmtFrequency = root["cmt_frequency"].as(); + config.Dtu.Serial = strtoll(root["serial"].as().c_str(), NULL, 16); + config.Dtu.PollInterval = root["pollinterval"].as(); + config.Dtu.Nrf.PaLevel = root["nrf_palevel"].as(); + config.Dtu.Cmt.PaLevel = root["cmt_palevel"].as(); + config.Dtu.Cmt.Frequency = root["cmt_frequency"].as(); Configuration.write(); retMsg["type"] = "success"; @@ -163,10 +163,10 @@ void WebApiDtuClass::onDtuAdminPost(AsyncWebServerRequest* request) response->setLength(); request->send(response); - Hoymiles.getRadioNrf()->setPALevel((rf24_pa_dbm_e)config.Dtu_NrfPaLevel); - 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); + Hoymiles.getRadioNrf()->setPALevel((rf24_pa_dbm_e)config.Dtu.Nrf.PaLevel); + Hoymiles.getRadioCmt()->setPALevel(config.Dtu.Cmt.PaLevel); + Hoymiles.getRadioNrf()->setDtuSerial(config.Dtu.Serial); + Hoymiles.getRadioCmt()->setDtuSerial(config.Dtu.Serial); + Hoymiles.getRadioCmt()->setInverterTargetFrequency(config.Dtu.Cmt.Frequency); + Hoymiles.setPollInterval(config.Dtu.PollInterval); } \ No newline at end of file diff --git a/src/WebApi_mqtt.cpp b/src/WebApi_mqtt.cpp index aedcd51a..d31b1e91 100644 --- a/src/WebApi_mqtt.cpp +++ b/src/WebApi_mqtt.cpp @@ -36,25 +36,25 @@ void WebApiMqttClass::onMqttStatus(AsyncWebServerRequest* request) JsonObject root = response->getRoot(); const CONFIG_T& config = Configuration.get(); - root["mqtt_enabled"] = config.Mqtt_Enabled; - root["mqtt_hostname"] = config.Mqtt_Hostname; - root["mqtt_port"] = config.Mqtt_Port; - root["mqtt_username"] = config.Mqtt_Username; - root["mqtt_topic"] = config.Mqtt_Topic; + root["mqtt_enabled"] = config.Mqtt.Enabled; + root["mqtt_hostname"] = config.Mqtt.Hostname; + root["mqtt_port"] = config.Mqtt.Port; + root["mqtt_username"] = config.Mqtt.Username; + root["mqtt_topic"] = config.Mqtt.Topic; root["mqtt_connected"] = MqttSettings.getConnected(); - root["mqtt_retain"] = config.Mqtt_Retain; - root["mqtt_tls"] = config.Mqtt_Tls; - root["mqtt_root_ca_cert_info"] = getTlsCertInfo(config.Mqtt_RootCaCert); - root["mqtt_tls_cert_login"] = config.Mqtt_TlsCertLogin; - root["mqtt_client_cert_info"] = getTlsCertInfo(config.Mqtt_ClientCert); - root["mqtt_lwt_topic"] = String(config.Mqtt_Topic) + config.Mqtt_LwtTopic; - root["mqtt_publish_interval"] = config.Mqtt_PublishInterval; - root["mqtt_clean_session"] = config.Mqtt_CleanSession; - root["mqtt_hass_enabled"] = config.Mqtt_Hass_Enabled; - root["mqtt_hass_expire"] = config.Mqtt_Hass_Expire; - root["mqtt_hass_retain"] = config.Mqtt_Hass_Retain; - root["mqtt_hass_topic"] = config.Mqtt_Hass_Topic; - root["mqtt_hass_individualpanels"] = config.Mqtt_Hass_IndividualPanels; + root["mqtt_retain"] = config.Mqtt.Retain; + root["mqtt_tls"] = config.Mqtt.Tls.Enabled; + root["mqtt_root_ca_cert_info"] = getTlsCertInfo(config.Mqtt.Tls.RootCaCert); + root["mqtt_tls_cert_login"] = config.Mqtt.Tls.CertLogin; + root["mqtt_client_cert_info"] = getTlsCertInfo(config.Mqtt.Tls.ClientCert); + root["mqtt_lwt_topic"] = String(config.Mqtt.Topic) + config.Mqtt.Lwt.Topic; + root["mqtt_publish_interval"] = config.Mqtt.PublishInterval; + root["mqtt_clean_session"] = config.Mqtt.CleanSession; + root["mqtt_hass_enabled"] = config.Mqtt.Hass.Enabled; + root["mqtt_hass_expire"] = config.Mqtt.Hass.Expire; + root["mqtt_hass_retain"] = config.Mqtt.Hass.Retain; + root["mqtt_hass_topic"] = config.Mqtt.Hass.Topic; + root["mqtt_hass_individualpanels"] = config.Mqtt.Hass.IndividualPanels; response->setLength(); request->send(response); @@ -70,28 +70,28 @@ void WebApiMqttClass::onMqttAdminGet(AsyncWebServerRequest* request) JsonObject root = response->getRoot(); const CONFIG_T& config = Configuration.get(); - root["mqtt_enabled"] = config.Mqtt_Enabled; - root["mqtt_hostname"] = config.Mqtt_Hostname; - root["mqtt_port"] = config.Mqtt_Port; - root["mqtt_username"] = config.Mqtt_Username; - root["mqtt_password"] = config.Mqtt_Password; - root["mqtt_topic"] = config.Mqtt_Topic; - root["mqtt_retain"] = config.Mqtt_Retain; - root["mqtt_tls"] = config.Mqtt_Tls; - root["mqtt_root_ca_cert"] = config.Mqtt_RootCaCert; - root["mqtt_tls_cert_login"] = config.Mqtt_TlsCertLogin; - root["mqtt_client_cert"] = config.Mqtt_ClientCert; - root["mqtt_client_key"] = config.Mqtt_ClientKey; - root["mqtt_lwt_topic"] = config.Mqtt_LwtTopic; - root["mqtt_lwt_online"] = config.Mqtt_LwtValue_Online; - root["mqtt_lwt_offline"] = config.Mqtt_LwtValue_Offline; - root["mqtt_publish_interval"] = config.Mqtt_PublishInterval; - root["mqtt_clean_session"] = config.Mqtt_CleanSession; - root["mqtt_hass_enabled"] = config.Mqtt_Hass_Enabled; - root["mqtt_hass_expire"] = config.Mqtt_Hass_Expire; - root["mqtt_hass_retain"] = config.Mqtt_Hass_Retain; - root["mqtt_hass_topic"] = config.Mqtt_Hass_Topic; - root["mqtt_hass_individualpanels"] = config.Mqtt_Hass_IndividualPanels; + root["mqtt_enabled"] = config.Mqtt.Enabled; + root["mqtt_hostname"] = config.Mqtt.Hostname; + root["mqtt_port"] = config.Mqtt.Port; + root["mqtt_username"] = config.Mqtt.Username; + root["mqtt_password"] = config.Mqtt.Password; + root["mqtt_topic"] = config.Mqtt.Topic; + root["mqtt_retain"] = config.Mqtt.Retain; + root["mqtt_tls"] = config.Mqtt.Tls.Enabled; + root["mqtt_root_ca_cert"] = config.Mqtt.Tls.RootCaCert; + root["mqtt_tls_cert_login"] = config.Mqtt.Tls.CertLogin; + root["mqtt_client_cert"] = config.Mqtt.Tls.ClientCert; + root["mqtt_client_key"] = config.Mqtt.Tls.ClientKey; + root["mqtt_lwt_topic"] = config.Mqtt.Lwt.Topic; + root["mqtt_lwt_online"] = config.Mqtt.CleanSession; + root["mqtt_lwt_offline"] = config.Mqtt.Lwt.Value_Offline; + root["mqtt_publish_interval"] = config.Mqtt.PublishInterval; + root["mqtt_clean_session"] = config.Mqtt.CleanSession; + root["mqtt_hass_enabled"] = config.Mqtt.Hass.Enabled; + root["mqtt_hass_expire"] = config.Mqtt.Hass.Expire; + root["mqtt_hass_retain"] = config.Mqtt.Hass.Retain; + root["mqtt_hass_topic"] = config.Mqtt.Hass.Topic; + root["mqtt_hass_individualpanels"] = config.Mqtt.Hass.IndividualPanels; response->setLength(); request->send(response); @@ -300,28 +300,28 @@ void WebApiMqttClass::onMqttAdminPost(AsyncWebServerRequest* request) } CONFIG_T& config = Configuration.get(); - config.Mqtt_Enabled = root["mqtt_enabled"].as(); - config.Mqtt_Retain = root["mqtt_retain"].as(); - config.Mqtt_Tls = root["mqtt_tls"].as(); - strlcpy(config.Mqtt_RootCaCert, root["mqtt_root_ca_cert"].as().c_str(), sizeof(config.Mqtt_RootCaCert)); - config.Mqtt_TlsCertLogin = root["mqtt_tls_cert_login"].as(); - strlcpy(config.Mqtt_ClientCert, root["mqtt_client_cert"].as().c_str(), sizeof(config.Mqtt_ClientCert)); - strlcpy(config.Mqtt_ClientKey, root["mqtt_client_key"].as().c_str(), sizeof(config.Mqtt_ClientKey)); - config.Mqtt_Port = root["mqtt_port"].as(); - strlcpy(config.Mqtt_Hostname, root["mqtt_hostname"].as().c_str(), sizeof(config.Mqtt_Hostname)); - strlcpy(config.Mqtt_Username, root["mqtt_username"].as().c_str(), sizeof(config.Mqtt_Username)); - strlcpy(config.Mqtt_Password, root["mqtt_password"].as().c_str(), sizeof(config.Mqtt_Password)); - strlcpy(config.Mqtt_Topic, root["mqtt_topic"].as().c_str(), sizeof(config.Mqtt_Topic)); - strlcpy(config.Mqtt_LwtTopic, root["mqtt_lwt_topic"].as().c_str(), sizeof(config.Mqtt_LwtTopic)); - strlcpy(config.Mqtt_LwtValue_Online, root["mqtt_lwt_online"].as().c_str(), sizeof(config.Mqtt_LwtValue_Online)); - strlcpy(config.Mqtt_LwtValue_Offline, root["mqtt_lwt_offline"].as().c_str(), sizeof(config.Mqtt_LwtValue_Offline)); - config.Mqtt_PublishInterval = root["mqtt_publish_interval"].as(); - config.Mqtt_CleanSession = root["mqtt_clean_session"].as(); - config.Mqtt_Hass_Enabled = root["mqtt_hass_enabled"].as(); - config.Mqtt_Hass_Expire = root["mqtt_hass_expire"].as(); - config.Mqtt_Hass_Retain = root["mqtt_hass_retain"].as(); - config.Mqtt_Hass_IndividualPanels = root["mqtt_hass_individualpanels"].as(); - strlcpy(config.Mqtt_Hass_Topic, root["mqtt_hass_topic"].as().c_str(), sizeof(config.Mqtt_Hass_Topic)); + config.Mqtt.Enabled = root["mqtt_enabled"].as(); + config.Mqtt.Retain = root["mqtt_retain"].as(); + config.Mqtt.Tls.Enabled = root["mqtt_tls"].as(); + strlcpy(config.Mqtt.Tls.RootCaCert, root["mqtt_root_ca_cert"].as().c_str(), sizeof(config.Mqtt.Tls.RootCaCert)); + config.Mqtt.Tls.CertLogin = root["mqtt_tls_cert_login"].as(); + strlcpy(config.Mqtt.Tls.ClientCert, root["mqtt_client_cert"].as().c_str(), sizeof(config.Mqtt.Tls.ClientCert)); + strlcpy(config.Mqtt.Tls.ClientKey, root["mqtt_client_key"].as().c_str(), sizeof(config.Mqtt.Tls.ClientKey)); + config.Mqtt.Port = root["mqtt_port"].as(); + strlcpy(config.Mqtt.Hostname, root["mqtt_hostname"].as().c_str(), sizeof(config.Mqtt.Hostname)); + strlcpy(config.Mqtt.Username, root["mqtt_username"].as().c_str(), sizeof(config.Mqtt.Username)); + strlcpy(config.Mqtt.Password, root["mqtt_password"].as().c_str(), sizeof(config.Mqtt.Password)); + strlcpy(config.Mqtt.Topic, root["mqtt_topic"].as().c_str(), sizeof(config.Mqtt.Topic)); + strlcpy(config.Mqtt.Lwt.Topic, root["mqtt_lwt_topic"].as().c_str(), sizeof(config.Mqtt.Lwt.Topic)); + strlcpy(config.Mqtt.Lwt.Value_Online, root["mqtt_lwt_online"].as().c_str(), sizeof(config.Mqtt.Lwt.Value_Online)); + strlcpy(config.Mqtt.Lwt.Value_Offline, root["mqtt_lwt_offline"].as().c_str(), sizeof(config.Mqtt.Lwt.Value_Offline)); + config.Mqtt.PublishInterval = root["mqtt_publish_interval"].as(); + config.Mqtt.CleanSession = root["mqtt_clean_session"].as(); + config.Mqtt.Hass.Enabled = root["mqtt_hass_enabled"].as(); + config.Mqtt.Hass.Expire = root["mqtt_hass_expire"].as(); + config.Mqtt.Hass.Retain = root["mqtt_hass_retain"].as(); + config.Mqtt.Hass.IndividualPanels = root["mqtt_hass_individualpanels"].as(); + strlcpy(config.Mqtt.Hass.Topic, root["mqtt_hass_topic"].as().c_str(), sizeof(config.Mqtt.Hass.Topic)); Configuration.write(); retMsg["type"] = "success"; diff --git a/src/WebApi_network.cpp b/src/WebApi_network.cpp index 849c5f8a..3f2eb0dc 100644 --- a/src/WebApi_network.cpp +++ b/src/WebApi_network.cpp @@ -66,17 +66,17 @@ void WebApiNetworkClass::onNetworkAdminGet(AsyncWebServerRequest* request) JsonObject root = response->getRoot(); const CONFIG_T& config = Configuration.get(); - root["hostname"] = config.WiFi_Hostname; - root["dhcp"] = config.WiFi_Dhcp; - root["ipaddress"] = IPAddress(config.WiFi_Ip).toString(); - root["netmask"] = IPAddress(config.WiFi_Netmask).toString(); - root["gateway"] = IPAddress(config.WiFi_Gateway).toString(); - root["dns1"] = IPAddress(config.WiFi_Dns1).toString(); - root["dns2"] = IPAddress(config.WiFi_Dns2).toString(); - root["ssid"] = config.WiFi_Ssid; - root["password"] = config.WiFi_Password; - root["aptimeout"] = config.WiFi_ApTimeout; - root["mdnsenabled"] = config.Mdns_Enabled; + root["hostname"] = config.WiFi.Hostname; + root["dhcp"] = config.WiFi.Dhcp; + root["ipaddress"] = IPAddress(config.WiFi.Ip).toString(); + root["netmask"] = IPAddress(config.WiFi.Netmask).toString(); + root["gateway"] = IPAddress(config.WiFi.Gateway).toString(); + root["dns1"] = IPAddress(config.WiFi.Dns1).toString(); + root["dns2"] = IPAddress(config.WiFi.Dns2).toString(); + root["ssid"] = config.WiFi.Ssid; + root["password"] = config.WiFi.Password; + root["aptimeout"] = config.WiFi.ApTimeout; + root["mdnsenabled"] = config.Mdns.Enabled; response->setLength(); request->send(response); @@ -208,36 +208,36 @@ void WebApiNetworkClass::onNetworkAdminPost(AsyncWebServerRequest* request) } CONFIG_T& config = Configuration.get(); - config.WiFi_Ip[0] = ipaddress[0]; - config.WiFi_Ip[1] = ipaddress[1]; - config.WiFi_Ip[2] = ipaddress[2]; - config.WiFi_Ip[3] = ipaddress[3]; - config.WiFi_Netmask[0] = netmask[0]; - config.WiFi_Netmask[1] = netmask[1]; - config.WiFi_Netmask[2] = netmask[2]; - config.WiFi_Netmask[3] = netmask[3]; - config.WiFi_Gateway[0] = gateway[0]; - config.WiFi_Gateway[1] = gateway[1]; - config.WiFi_Gateway[2] = gateway[2]; - config.WiFi_Gateway[3] = gateway[3]; - config.WiFi_Dns1[0] = dns1[0]; - config.WiFi_Dns1[1] = dns1[1]; - config.WiFi_Dns1[2] = dns1[2]; - config.WiFi_Dns1[3] = dns1[3]; - config.WiFi_Dns2[0] = dns2[0]; - config.WiFi_Dns2[1] = dns2[1]; - config.WiFi_Dns2[2] = dns2[2]; - config.WiFi_Dns2[3] = dns2[3]; - strlcpy(config.WiFi_Ssid, root["ssid"].as().c_str(), sizeof(config.WiFi_Ssid)); - strlcpy(config.WiFi_Password, root["password"].as().c_str(), sizeof(config.WiFi_Password)); - strlcpy(config.WiFi_Hostname, root["hostname"].as().c_str(), sizeof(config.WiFi_Hostname)); + config.WiFi.Ip[0] = ipaddress[0]; + config.WiFi.Ip[1] = ipaddress[1]; + config.WiFi.Ip[2] = ipaddress[2]; + config.WiFi.Ip[3] = ipaddress[3]; + config.WiFi.Netmask[0] = netmask[0]; + config.WiFi.Netmask[1] = netmask[1]; + config.WiFi.Netmask[2] = netmask[2]; + config.WiFi.Netmask[3] = netmask[3]; + config.WiFi.Gateway[0] = gateway[0]; + config.WiFi.Gateway[1] = gateway[1]; + config.WiFi.Gateway[2] = gateway[2]; + config.WiFi.Gateway[3] = gateway[3]; + config.WiFi.Dns1[0] = dns1[0]; + config.WiFi.Dns1[1] = dns1[1]; + config.WiFi.Dns1[2] = dns1[2]; + config.WiFi.Dns1[3] = dns1[3]; + config.WiFi.Dns2[0] = dns2[0]; + config.WiFi.Dns2[1] = dns2[1]; + config.WiFi.Dns2[2] = dns2[2]; + config.WiFi.Dns2[3] = dns2[3]; + strlcpy(config.WiFi.Ssid, root["ssid"].as().c_str(), sizeof(config.WiFi.Ssid)); + strlcpy(config.WiFi.Password, root["password"].as().c_str(), sizeof(config.WiFi.Password)); + strlcpy(config.WiFi.Hostname, root["hostname"].as().c_str(), sizeof(config.WiFi.Hostname)); if (root["dhcp"].as()) { - config.WiFi_Dhcp = true; + config.WiFi.Dhcp = true; } else { - config.WiFi_Dhcp = false; + config.WiFi.Dhcp = false; } - config.WiFi_ApTimeout = root["aptimeout"].as(); - config.Mdns_Enabled = root["mdnsenabled"].as(); + config.WiFi.ApTimeout = root["aptimeout"].as(); + config.Mdns.Enabled = root["mdnsenabled"].as(); Configuration.write(); retMsg["type"] = "success"; diff --git a/src/WebApi_ntp.cpp b/src/WebApi_ntp.cpp index c0cfaa44..132b08ef 100644 --- a/src/WebApi_ntp.cpp +++ b/src/WebApi_ntp.cpp @@ -38,9 +38,9 @@ void WebApiNtpClass::onNtpStatus(AsyncWebServerRequest* request) JsonObject root = response->getRoot(); const CONFIG_T& config = Configuration.get(); - root["ntp_server"] = config.Ntp_Server; - root["ntp_timezone"] = config.Ntp_Timezone; - root["ntp_timezone_descr"] = config.Ntp_TimezoneDescr; + root["ntp_server"] = config.Ntp.Server; + root["ntp_timezone"] = config.Ntp.Timezone; + root["ntp_timezone_descr"] = config.Ntp.TimezoneDescr; struct tm timeinfo; if (!getLocalTime(&timeinfo, 5)) { @@ -83,12 +83,12 @@ void WebApiNtpClass::onNtpAdminGet(AsyncWebServerRequest* request) JsonObject root = response->getRoot(); const CONFIG_T& config = Configuration.get(); - root["ntp_server"] = config.Ntp_Server; - root["ntp_timezone"] = config.Ntp_Timezone; - root["ntp_timezone_descr"] = config.Ntp_TimezoneDescr; - root["longitude"] = config.Ntp_Longitude; - root["latitude"] = config.Ntp_Latitude; - root["sunsettype"] = config.Ntp_SunsetType; + root["ntp_server"] = config.Ntp.Server; + root["ntp_timezone"] = config.Ntp.Timezone; + root["ntp_timezone_descr"] = config.Ntp.TimezoneDescr; + root["longitude"] = config.Ntp.Longitude; + root["latitude"] = config.Ntp.Latitude; + root["sunsettype"] = config.Ntp.SunsetType; response->setLength(); request->send(response); @@ -173,12 +173,12 @@ void WebApiNtpClass::onNtpAdminPost(AsyncWebServerRequest* request) } CONFIG_T& config = Configuration.get(); - strlcpy(config.Ntp_Server, root["ntp_server"].as().c_str(), sizeof(config.Ntp_Server)); - strlcpy(config.Ntp_Timezone, root["ntp_timezone"].as().c_str(), sizeof(config.Ntp_Timezone)); - strlcpy(config.Ntp_TimezoneDescr, root["ntp_timezone_descr"].as().c_str(), sizeof(config.Ntp_TimezoneDescr)); - config.Ntp_Latitude = root["latitude"].as(); - config.Ntp_Longitude = root["longitude"].as(); - config.Ntp_SunsetType = root["sunsettype"].as(); + strlcpy(config.Ntp.Server, root["ntp_server"].as().c_str(), sizeof(config.Ntp.Server)); + strlcpy(config.Ntp.Timezone, root["ntp_timezone"].as().c_str(), sizeof(config.Ntp.Timezone)); + strlcpy(config.Ntp.TimezoneDescr, root["ntp_timezone_descr"].as().c_str(), sizeof(config.Ntp.TimezoneDescr)); + config.Ntp.Latitude = root["latitude"].as(); + config.Ntp.Longitude = root["longitude"].as(); + config.Ntp.SunsetType = root["sunsettype"].as(); Configuration.write(); retMsg["type"] = "success"; diff --git a/src/WebApi_security.cpp b/src/WebApi_security.cpp index a2221f9b..9e45be06 100644 --- a/src/WebApi_security.cpp +++ b/src/WebApi_security.cpp @@ -34,8 +34,8 @@ void WebApiSecurityClass::onSecurityGet(AsyncWebServerRequest* request) JsonObject root = response->getRoot(); const CONFIG_T& config = Configuration.get(); - root["password"] = config.Security_Password; - root["allow_readonly"] = config.Security_AllowReadonly; + root["password"] = config.Security.Password; + root["allow_readonly"] = config.Security.AllowReadonly; response->setLength(); request->send(response); @@ -99,8 +99,8 @@ void WebApiSecurityClass::onSecurityPost(AsyncWebServerRequest* request) } CONFIG_T& config = Configuration.get(); - strlcpy(config.Security_Password, root["password"].as().c_str(), sizeof(config.Security_Password)); - config.Security_AllowReadonly = root["allow_readonly"].as(); + strlcpy(config.Security.Password, root["password"].as().c_str(), sizeof(config.Security.Password)); + config.Security.AllowReadonly = root["allow_readonly"].as(); Configuration.write(); retMsg["type"] = "success"; diff --git a/src/WebApi_sysstatus.cpp b/src/WebApi_sysstatus.cpp index fbb392d9..eff4ca54 100644 --- a/src/WebApi_sysstatus.cpp +++ b/src/WebApi_sysstatus.cpp @@ -61,7 +61,7 @@ void WebApiSysstatusClass::onSystemStatus(AsyncWebServerRequest* request) reason = ResetReason.get_reset_reason_verbose(1); root["resetreason_1"] = reason; - root["cfgsavecount"] = Configuration.get().Cfg_SaveCount; + root["cfgsavecount"] = Configuration.get().Cfg.SaveCount; char version[16]; snprintf(version, sizeof(version), "%d.%d.%d", CONFIG_VERSION >> 24 & 0xff, CONFIG_VERSION >> 16 & 0xff, CONFIG_VERSION >> 8 & 0xff); diff --git a/src/WebApi_ws_console.cpp b/src/WebApi_ws_console.cpp index 2837fc39..6e522431 100644 --- a/src/WebApi_ws_console.cpp +++ b/src/WebApi_ws_console.cpp @@ -26,10 +26,10 @@ void WebApiWsConsoleClass::loop() if (millis() - _lastWsCleanup > 1000) { _ws.cleanupClients(); - if (Configuration.get().Security_AllowReadonly) { + if (Configuration.get().Security.AllowReadonly) { _ws.setAuthentication("", ""); } else { - _ws.setAuthentication(AUTH_USERNAME, Configuration.get().Security_Password); + _ws.setAuthentication(AUTH_USERNAME, Configuration.get().Security.Password); } _lastWsCleanup = millis(); diff --git a/src/WebApi_ws_live.cpp b/src/WebApi_ws_live.cpp index 7224de84..d0a88b73 100644 --- a/src/WebApi_ws_live.cpp +++ b/src/WebApi_ws_live.cpp @@ -71,10 +71,10 @@ void WebApiWsLiveClass::loop() if (buffer) { serializeJson(root, buffer); - if (Configuration.get().Security_AllowReadonly) { + if (Configuration.get().Security.AllowReadonly) { _ws.setAuthentication("", ""); } else { - _ws.setAuthentication(AUTH_USERNAME, Configuration.get().Security_Password); + _ws.setAuthentication(AUTH_USERNAME, Configuration.get().Security.Password); } _ws.textAll(buffer); @@ -172,7 +172,7 @@ void WebApiWsLiveClass::generateJsonResponse(JsonVariant& root) struct tm timeinfo; hintObj["time_sync"] = !getLocalTime(&timeinfo, 5); hintObj["radio_problem"] = (Hoymiles.getRadioNrf()->isInitialized() && (!Hoymiles.getRadioNrf()->isConnected() || !Hoymiles.getRadioNrf()->isPVariant())) || (Hoymiles.getRadioCmt()->isInitialized() && (!Hoymiles.getRadioCmt()->isConnected())); - if (!strcmp(Configuration.get().Security_Password, ACCESS_POINT_PASSWORD)) { + if (!strcmp(Configuration.get().Security.Password, ACCESS_POINT_PASSWORD)) { hintObj["default_password"] = true; } else { hintObj["default_password"] = false; diff --git a/src/main.cpp b/src/main.cpp index d12a3572..bc6cb86a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -61,7 +61,7 @@ void setup() MessageOutput.print("failed... "); } } - if (Configuration.get().Cfg_Version != CONFIG_VERSION) { + if (Configuration.get().Cfg.Version != CONFIG_VERSION) { MessageOutput.print("migrated... "); Configuration.migrate(); } @@ -116,11 +116,11 @@ void setup() pin.display_clk, pin.display_cs, pin.display_reset); - Display.setOrientation(config.Display_Rotation); - Display.enablePowerSafe = config.Display_PowerSafe; - Display.enableScreensaver = config.Display_ScreenSaver; - Display.setContrast(config.Display_Contrast); - Display.setLanguage(config.Display_Language); + Display.setOrientation(config.Display.Rotation); + Display.enablePowerSafe = config.Display.PowerSafe; + Display.enableScreensaver = config.Display.ScreenSaver; + Display.setContrast(config.Display.Contrast); + Display.setLanguage(config.Display.Language); Display.setStartupDisplay(); MessageOutput.println("done"); @@ -131,13 +131,13 @@ void setup() // Check for default DTU serial MessageOutput.print("Check for default DTU serial... "); - if (config.Dtu_Serial == DTU_SERIAL) { + if (config.Dtu.Serial == DTU_SERIAL) { MessageOutput.print("generate serial based on ESP chip id: "); uint64_t dtuId = Utils::generateDtuSerial(); MessageOutput.printf("%0x%08x... ", ((uint32_t)((dtuId >> 32) & 0xFFFFFFFF)), ((uint32_t)(dtuId & 0xFFFFFFFF))); - config.Dtu_Serial = dtuId; + config.Dtu.Serial = dtuId; Configuration.write(); } MessageOutput.println("done");