main/task_mqtt.c

changeset 12
bb72d448e282
parent 10
eee990609da7
child 15
64028e178ff1
--- a/main/task_mqtt.c	Mon Apr 03 11:08:09 2023 +0200
+++ b/main/task_mqtt.c	Mon Apr 03 16:07:34 2023 +0200
@@ -26,12 +26,14 @@
 extern SemaphoreHandle_t        xSemaphoreBMP280;	///< BMP280 lock semaphore
 extern INA219_State		*ina219_state;		///< INA219 state
 extern SemaphoreHandle_t	xSemaphoreINA219;	///< INA219 lock semaphore
+extern APDS9930_State		*apds9930_state;	///< APDS9930 state
+extern SemaphoreHandle_t	xSemaphoreAPDS9930;	///< APDS9930 lock semaphore
 extern WIFI_State		*wifi_state;		///< WiFi state
 extern SemaphoreHandle_t	xSemaphoreWiFi;		///< WiFi lock semaphore
 extern const esp_app_desc_t	*app_desc;
 
 extern uint32_t			Alarm;
-extern float			batteryState;
+extern int			batteryState;
 extern float			batteryVolts;
 extern float			batteryCurrent;
 extern float			batteryPower;
@@ -133,11 +135,11 @@
 {
     char        		*topic = NULL, *payload = NULL, buf[64];
     const esp_app_desc_t	*app_desc = esp_app_get_description();
+    int				Quality = 0;
 
-    // {"system":{"battery":70,"alarm":0,"version":"0.2.6","rssi":-56,"wifi":88,"light":{"lux":12.34,"gain":2}},"solar":{"voltage":13.98,"current":234.1,"power":3.272718},"battery":{"voltage":13.21,"current":4.942289,"power":0.065288},"real":{"current":229.1577},"TH":{"temperature":20.2,"humidity":48.3},"output":{"relay1":0,"relay2":0,"dimmer3":0,"dimmer4":0}}
     // {"system":{"battery":40,"alarm":0,"version":"0.3.1","rssi":-77,"wifi":46,"light":{"lux":0.1,"gain":3,"agl":0}},"solar":{"voltage":0.31,"current":0,"power":0},"battery":{"voltage":12.27,"current":53.5,"power":0.657},"real":{"current":-53.5},"TH":{"temperature":8.88,"humidity":0},"output":{"relay1":0,"relay2":0,"dimmer3":90,"dimmer4":80}}
     payload = xstrcpy((char *)"{\"system\":{\"battery\":");
-    sprintf(buf, "%.0f", batteryState);
+    sprintf(buf, "%d", batteryState);
     payload = xstrcat(payload, buf);
     payload = xstrcat(payload, (char *)",\"alarm\":");
     sprintf(buf, "%ld", Alarm);
@@ -148,12 +150,30 @@
     if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
 	sprintf(buf, "%d", wifi_state->STA_rssi);
 	payload = xstrcat(payload, buf);
+	payload = xstrcat(payload, (char *)",\"wifi\":");
+	if (wifi_state->STA_rssi <= -100) {
+	    Quality = 0;
+	} else if (wifi_state->STA_rssi >= -50) {
+	    Quality = 100;
+	} else {
+	    Quality = 2 * (wifi_state->STA_rssi + 100);
+	}
+	sprintf(buf, "%d", Quality);
+	payload = xstrcat(payload, buf);
 	xSemaphoreGive(xSemaphoreWiFi);
     }
     payload = xstrcat(payload, (char *)",\"light\":{\"lux\":");
-
-    payload = xstrcat(payload, (char *)",\"gain\":");
-
+    if (xSemaphoreTake(xSemaphoreAPDS9930, 25) == pdTRUE) {
+	sprintf(buf, "%.1f", apds9930_state->ambient_light);
+	payload = xstrcat(payload, buf);
+	payload = xstrcat(payload, (char *)",\"gain\":");
+	sprintf(buf, "%d", apds9930_state->gain);
+	payload = xstrcat(payload, buf);
+	payload = xstrcat(payload, (char *)",\"agl\":");
+	sprintf(buf, "%d", apds9930_state->aglbit);
+	payload = xstrcat(payload, buf);
+	xSemaphoreGive(xSemaphoreAPDS9930);
+    }
     payload = xstrcat(payload, (char *)"}},\"solar\":{\"voltage\":");
     sprintf(buf, "%.2f", solarVolts);
     payload = xstrcat(payload, buf);
@@ -200,7 +220,7 @@
     topic = topic_base();
     topic = xstrcat(topic, (char *)"status");
     ESP_LOGI(TAG, "%s %s", topic, payload);
-//    publisher(topic, payload);
+    publisher(topic, payload);
     free(topic);
     topic = NULL;
     free(payload);

mercurial