|
@@ -0,0 +1,179 @@
|
|
|
+#include "interface/ideasx_interface.h"
|
|
|
+
|
|
|
+static const char* TAG = "IdeasX";
|
|
|
+
|
|
|
+MQTT_Client mqttClient;
|
|
|
+static IdeasX_Config_t ideasX_config;
|
|
|
+static IdeasX_Health_t ideasX_health;
|
|
|
+static os_timer_t health_timer;
|
|
|
+
|
|
|
+
|
|
|
+static void ICACHE_FLASH_ATTR ideasX_publish_health(void)
|
|
|
+{
|
|
|
+ uint8_t topic[40], payload[40];
|
|
|
+ ideasX_health.vcell.value = Encoder_GetVoltage();
|
|
|
+ ideasX_health.soc.value = Encoder_GetSOC();
|
|
|
+ ideasX_health.rssi.value = wifi_station_get_rssi();
|
|
|
+
|
|
|
+ os_sprintf(topic, "%s%s", ideasX_config.health_topic, ideasX_health.vcell.topic);
|
|
|
+ os_sprintf(payload, "%d", ideasX_health.vcell.value);
|
|
|
+ MQTT_Publish(&mqttClient, topic, payload, os_strlen(payload), HEALTH_QOS, HEALTH_RETAIN);
|
|
|
+
|
|
|
+ os_sprintf(topic, "%s%s", ideasX_config.health_topic, ideasX_health.soc.topic);
|
|
|
+ os_sprintf(payload, "%d", ideasX_health.soc.value);
|
|
|
+ MQTT_Publish(&mqttClient, topic, payload, os_strlen(payload), HEALTH_QOS, HEALTH_RETAIN);
|
|
|
+
|
|
|
+ os_sprintf(topic, "%s%s", ideasX_config.health_topic, ideasX_health.rssi.topic);
|
|
|
+ os_sprintf(payload, "%d", ideasX_health.rssi.value);
|
|
|
+ MQTT_Publish(&mqttClient, topic, payload, os_strlen(payload), HEALTH_QOS, HEALTH_RETAIN);
|
|
|
+}
|
|
|
+
|
|
|
+static void ICACHE_FLASH_ATTR ideasX_connected_cb(uint32_t *args)
|
|
|
+{
|
|
|
+ struct station_config stationConfig;
|
|
|
+ wifi_station_get_config(&stationConfig);
|
|
|
+ uint8_t topic[40], payload[40];
|
|
|
+
|
|
|
+ ESP_LOGI(TAG, "Connected to IdeasX");
|
|
|
+
|
|
|
+ if (ideasX_config.success_cb != NULL)
|
|
|
+ ideasX_config.success_cb();
|
|
|
+
|
|
|
+
|
|
|
+ os_sprintf(topic, "%s%s", ideasX_config.health_topic, ideasX_health.hw_ver.topic);
|
|
|
+ os_sprintf(payload, "%d,%d", ideasX_health.hw_ver.major, ideasX_health.hw_ver.minor);
|
|
|
+ MQTT_Publish(&mqttClient, topic, payload, os_strlen(payload), HEALTH_QOS, HEALTH_RETAIN);
|
|
|
+
|
|
|
+ os_sprintf(topic, "%s%s", ideasX_config.health_topic, ideasX_health.fw_ver.topic);
|
|
|
+ os_sprintf(payload, "%d,%d", ideasX_health.fw_ver.major, ideasX_health.fw_ver.minor);
|
|
|
+ MQTT_Publish(&mqttClient, topic, payload, os_strlen(payload), HEALTH_QOS, HEALTH_RETAIN);
|
|
|
+
|
|
|
+ os_sprintf(topic, "%s%s", ideasX_config.health_topic, ideasX_health.alive.topic);
|
|
|
+ os_sprintf(payload, "%d", ideasX_health.alive.flag);
|
|
|
+ MQTT_Publish(&mqttClient, topic, payload, os_strlen(payload), HEALTH_QOS, HEALTH_RETAIN);
|
|
|
+
|
|
|
+ os_sprintf(ideasX_health.ssid.value, "%s", stationConfig.ssid);
|
|
|
+ os_sprintf(ideasX_health.bssid.value, MACSTR, MAC2STR(stationConfig.bssid));
|
|
|
+
|
|
|
+ os_sprintf(topic, "%s%s", ideasX_config.health_topic, ideasX_health.ssid.topic);
|
|
|
+ os_sprintf(payload, "%s", ideasX_health.ssid.value);
|
|
|
+ MQTT_Publish(&mqttClient, topic, payload, os_strlen(payload), HEALTH_QOS, HEALTH_RETAIN);
|
|
|
+
|
|
|
+ os_sprintf(topic, "%s%s", ideasX_config.health_topic, ideasX_health.bssid.topic);
|
|
|
+ os_sprintf(payload, "%s", ideasX_health.bssid.value);
|
|
|
+ MQTT_Publish(&mqttClient, topic, payload, os_strlen(payload), HEALTH_QOS, HEALTH_RETAIN);
|
|
|
+
|
|
|
+ os_sprintf(topic, "%s%s", ideasX_config.health_topic, ideasX_health.ota.topic);
|
|
|
+ os_sprintf(payload, "%d", ideasX_health.ota.flag);
|
|
|
+ MQTT_Publish(&mqttClient, topic, payload, os_strlen(payload), HEALTH_QOS, HEALTH_RETAIN);
|
|
|
+
|
|
|
+ ideasX_publish_health();
|
|
|
+
|
|
|
+
|
|
|
+ os_timer_disarm(&ideasX_health.health_timer);
|
|
|
+ os_timer_arm(&ideasX_health.health_timer, ideasX_health.health_report_rate*1000, true);
|
|
|
+}
|
|
|
+
|
|
|
+static void ICACHE_FLASH_ATTR ideasX_disconnected_cb(uint32_t *args)
|
|
|
+{
|
|
|
+ ESP_LOGI(TAG, "Disconnected from IdeasX");
|
|
|
+ os_timer_disarm(&ideasX_health.health_timer);
|
|
|
+ if (ideasX_config.fail_cb != NULL)
|
|
|
+ ideasX_config.fail_cb();
|
|
|
+}
|
|
|
+
|
|
|
+static void ICACHE_FLASH_ATTR ideasX_published_cb(uint32_t *args)
|
|
|
+{
|
|
|
+
|
|
|
+ ESP_LOGD(TAG, "Published Messaged");
|
|
|
+}
|
|
|
+
|
|
|
+void ICACHE_FLASH_ATTR IdeasX_Connect(void)
|
|
|
+{
|
|
|
+ MQTT_Connect(&mqttClient);
|
|
|
+}
|
|
|
+
|
|
|
+void ICACHE_FLASH_ATTR IdeasX_Disconnect(void)
|
|
|
+{
|
|
|
+ MQTT_Disconnect(&mqttClient);
|
|
|
+}
|
|
|
+
|
|
|
+void ICACHE_FLASH_ATTR ideasX_system_config_init()
|
|
|
+{
|
|
|
+ uint8_t mac_address[6];
|
|
|
+ wifi_get_macaddr(STATION_MODE, mac_address);
|
|
|
+ os_sprintf(ideasX_config.device_id, MACSTR, MAC2STR(mac_address));
|
|
|
+ os_sprintf(ideasX_config.mqtt_client_id, MACSTR, MAC2STR(mac_address));
|
|
|
+
|
|
|
+ os_sprintf(ideasX_config.command_topic, "encoder/%s/command/", ideasX_config.device_id);
|
|
|
+ os_sprintf(ideasX_config.health_topic, "encoder/%s/health/", ideasX_config.device_id);
|
|
|
+ os_sprintf(ideasX_config.mqtt_host, "%s", MQTT_HOST_DEFAULT);
|
|
|
+ ideasX_config.mqtt_port = MQTT_PORT_DEFAULT;
|
|
|
+ os_sprintf(ideasX_config.mqtt_user, "%s", "");
|
|
|
+ os_sprintf(ideasX_config.mqtt_pass, "%s", "");
|
|
|
+
|
|
|
+ #ifdef MQTT_USER_DEFAULT
|
|
|
+ os_sprintf(ideasX_config.mqtt_user, "%s", MQTT_USER_DEFAULT);
|
|
|
+ os_sprintf(ideasX_config.mqtt_pass, "%s", MQTT_PASS_DEFAULT);
|
|
|
+ #endif
|
|
|
+ ideasX_config.mqtt_keepalive = MQTT_KEEPALIVE_DEFAULT;
|
|
|
+
|
|
|
+ ideasX_config.success_cb = NULL;
|
|
|
+ ideasX_config.fail_cb = NULL;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+void ICACHE_FLASH_ATTR ideasX_health_config_init()
|
|
|
+{
|
|
|
+
|
|
|
+ os_sprintf(ideasX_health.hw_ver.topic, "%s", HW_VERSION_HEALTH_TOPIC);
|
|
|
+ os_sprintf(ideasX_health.fw_ver.topic, "%s", FW_VERSION_HEALTH_TOPIC);
|
|
|
+ os_sprintf(ideasX_health.alive.topic, "%s", ALIVE_HEALTH_TOPIC);
|
|
|
+ os_sprintf(ideasX_health.vcell.topic, "%s", VCELL_HEALTH_TOPIC);
|
|
|
+ os_sprintf(ideasX_health.soc.topic, "%s", SOC_HEALTH_TOPIC);
|
|
|
+ os_sprintf(ideasX_health.rom.topic, "%s", ROM_HEALTH_TOPIC);
|
|
|
+ os_sprintf(ideasX_health.ota.topic, "%s", OTA_HEALTH_TOPIC);
|
|
|
+ os_sprintf(ideasX_health.ssid.topic, "%s", SSID_HEALTH_TOPIC);
|
|
|
+ os_sprintf(ideasX_health.bssid.topic, "%s", BSSID_HEALTH_TOPIC);
|
|
|
+ os_sprintf(ideasX_health.rssi.topic, "%s", RSSI_HEALTH_TOPIC);
|
|
|
+ ideasX_health.health_report_rate = HEALTH_REPORT_RATE_DEFAULT;
|
|
|
+
|
|
|
+
|
|
|
+ ideasX_health.hw_ver.minor = HW_VERSION_MINOR_DEFAULT;
|
|
|
+ ideasX_health.hw_ver.major = HW_VERSION_MAJOR_DEFAULT;
|
|
|
+ ideasX_health.fw_ver.minor = FW_VERSION_MINOR_DEFAULT;
|
|
|
+ ideasX_health.fw_ver.major = FW_VERSION_MAJOR_DEFAULT;
|
|
|
+ ideasX_health.alive.flag = true;
|
|
|
+ ideasX_health.ota.flag = false;
|
|
|
+
|
|
|
+ ideasX_health.health_timer = health_timer;
|
|
|
+ os_timer_disarm(&ideasX_health.health_timer);
|
|
|
+ os_timer_setfn(&ideasX_health.health_timer, (os_timer_func_t *)ideasX_publish_health, NULL);
|
|
|
+}
|
|
|
+
|
|
|
+void ICACHE_FLASH_ATTR IdeasX_UpdateBatteryStatus(uint16_t vcell, uint16_t soc)
|
|
|
+{
|
|
|
+ ideasX_health.soc.value = soc;
|
|
|
+ ideasX_health.vcell.value = vcell;
|
|
|
+}
|
|
|
+
|
|
|
+void ICACHE_FLASH_ATTR IdeasX_SetStatusCallbacks(ideasX_function_t success, ideasX_function_t fail)
|
|
|
+{
|
|
|
+ ideasX_config.success_cb = success;
|
|
|
+ ideasX_config.fail_cb = fail;
|
|
|
+}
|
|
|
+
|
|
|
+void ICACHE_FLASH_ATTR IdeasX_Init(void)
|
|
|
+{
|
|
|
+ ideasX_system_config_init();
|
|
|
+ ideasX_health_config_init();
|
|
|
+
|
|
|
+ MQTT_InitConnection(&mqttClient, ideasX_config.mqtt_host, ideasX_config.mqtt_port, DEFAULT_SECURITY);
|
|
|
+ MQTT_InitClient(&mqttClient, ideasX_config.mqtt_client_id, ideasX_config.mqtt_user, ideasX_config.mqtt_pass,
|
|
|
+ ideasX_config.mqtt_keepalive, MQTT_CLEAN_SESSION);
|
|
|
+ MQTT_InitLWT(&mqttClient, ideasX_health.alive.topic, "0", 0, 0);
|
|
|
+ MQTT_OnConnected(&mqttClient, ideasX_connected_cb);
|
|
|
+ MQTT_OnDisconnected(&mqttClient, ideasX_disconnected_cb);
|
|
|
+
|
|
|
+
|
|
|
+}
|