WIP meteostation with ESP8266
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
esp8266-meteo/main/nvsconfig.c

125 lines
3.5 KiB

/**
* TODO file description
*/
#include <esp_err.h>
#include <nvs.h>
#include <esp_log.h>
#include <string.h>
#include <lwip/ip4_addr.h>
#include <nvs_flash.h>
#include "nvsconfig.h"
#define TAG_CONFIG "config"
void initialize_nvs()
{
esp_err_t rv;
nvs_handle_t hnvs;
char tmps[128];
size_t len;
uint8_t u8val;
esp_err_t err = nvs_flash_init();
if (err == ESP_ERR_NVS_NO_FREE_PAGES) {
ESP_ERROR_CHECK( nvs_flash_erase() );
err = nvs_flash_init();
}
ESP_ERROR_CHECK(err);
/* Wifi namespace */
ESP_ERROR_CHECK( nvs_open("wifi", NVS_READWRITE, &hnvs) );
u8val = 99;
rv = nvs_get_u8(hnvs, "use_dhcpc", &u8val);
if (rv != ESP_OK || (u8val != 0 && u8val != 1)) {
ESP_LOGW(TAG_CONFIG, "Invalid dhcp option - set to default");
u8val = 1;
nvs_set_u8(hnvs, "use_dhcpc", u8val);
}
ESP_LOGI(TAG_CONFIG, "wifi.use_dhcpc = %d", u8val);
len = 16;
tmps[0] = 0;
rv = nvs_get_str(hnvs, "static_ip", tmps, &len);
if (rv != ESP_OK || IPADDR_NONE == ipaddr_addr(tmps)) {
strcpy(tmps, "192.168.56.2");
ESP_LOGW(TAG_CONFIG, "Invalid static ip - set to default");
ESP_ERROR_CHECK(nvs_set_str(hnvs, "static_ip", tmps));
}
ESP_LOGI(TAG_CONFIG, "wifi.static_ip = %s", tmps);
len = 16;
tmps[0] = 0;
rv = nvs_get_str(hnvs, "static_gw", tmps, &len);
if (rv != ESP_OK || IPADDR_NONE == ipaddr_addr(tmps)) {
strcpy(tmps, "192.168.0.1");
ESP_LOGW(TAG_CONFIG, "Invalid static gw - set to default");
ESP_ERROR_CHECK(nvs_set_str(hnvs, "static_gw", tmps));
}
ESP_LOGI(TAG_CONFIG, "wifi.static_gw = %s", tmps);
len = 16;
tmps[0] = 0;
rv = nvs_get_str(hnvs, "static_mask", tmps, &len);
if (rv != ESP_OK || IPADDR_NONE == ipaddr_addr(tmps)) {
strcpy(tmps, "255.255.255.0");
ESP_LOGW(TAG_CONFIG, "Invalid static mask - set to default");
ESP_ERROR_CHECK(nvs_set_str(hnvs, "static_mask", tmps));
}
ESP_LOGI(TAG_CONFIG, "wifi.static_mask = %s", tmps);
len = 16;
tmps[0] = 0;
rv = nvs_get_str(hnvs, "static_dns1", tmps, &len);
if (rv != ESP_OK || IPADDR_NONE == ipaddr_addr(tmps)) {
strcpy(tmps, "8.8.8.8");
ESP_LOGW(TAG_CONFIG, "Invalid static DNS1 - set to default");
ESP_ERROR_CHECK(nvs_set_str(hnvs, "static_dns1", tmps));
}
ESP_LOGI(TAG_CONFIG, "wifi.static_dns1 = %s", tmps);
len = 16;
tmps[0] = 0;
rv = nvs_get_str(hnvs, "static_dns2", tmps, &len);
if (rv != ESP_OK) {
strcpy(tmps, "");
ESP_LOGW(TAG_CONFIG, "Invalid static DNS2 - set to empty");
ESP_ERROR_CHECK(nvs_set_str(hnvs, "static_dns2", tmps));
}
ESP_LOGI(TAG_CONFIG, "wifi.static_dns2 = %s", tmps);
nvs_close(hnvs);
/* MQTT namespace */
ESP_ERROR_CHECK( nvs_open("mqtt", NVS_READWRITE, &hnvs) );
len = 128;
tmps[0] = 0;
rv = nvs_get_str(hnvs, "broker", tmps, &len);
if (rv != ESP_OK) {
strcpy(tmps, "");
ESP_LOGW(TAG_CONFIG, "Invalid broker addr - set to empty");
ESP_ERROR_CHECK(nvs_set_str(hnvs, "broker", tmps));
}
ESP_LOGI(TAG_CONFIG, "mqtt.broker = %s", tmps);
len = 128;
tmps[0] = 0;
rv = nvs_get_str(hnvs, "topic", tmps, &len);
if (rv != ESP_OK || tmps[0] == 0) {
strcpy(tmps, "/meteo/");
ESP_LOGW(TAG_CONFIG, "Invalid mqtt topic - set to default");
ESP_ERROR_CHECK(nvs_set_str(hnvs, "topic", tmps)); // default
}
ESP_LOGI(TAG_CONFIG, "mqtt.topic = %s", tmps);
nvs_close(hnvs);
}