24 |
24 |
25 extern BMP280_State *bmp280_state; ///< BMP280 state |
25 extern BMP280_State *bmp280_state; ///< BMP280 state |
26 extern SemaphoreHandle_t xSemaphoreBMP280; ///< BMP280 lock semaphore |
26 extern SemaphoreHandle_t xSemaphoreBMP280; ///< BMP280 lock semaphore |
27 extern INA219_State *ina219_state; ///< INA219 state |
27 extern INA219_State *ina219_state; ///< INA219 state |
28 extern SemaphoreHandle_t xSemaphoreINA219; ///< INA219 lock semaphore |
28 extern SemaphoreHandle_t xSemaphoreINA219; ///< INA219 lock semaphore |
|
29 extern APDS9930_State *apds9930_state; ///< APDS9930 state |
|
30 extern SemaphoreHandle_t xSemaphoreAPDS9930; ///< APDS9930 lock semaphore |
29 extern WIFI_State *wifi_state; ///< WiFi state |
31 extern WIFI_State *wifi_state; ///< WiFi state |
30 extern SemaphoreHandle_t xSemaphoreWiFi; ///< WiFi lock semaphore |
32 extern SemaphoreHandle_t xSemaphoreWiFi; ///< WiFi lock semaphore |
31 extern const esp_app_desc_t *app_desc; |
33 extern const esp_app_desc_t *app_desc; |
32 |
34 |
33 extern uint32_t Alarm; |
35 extern uint32_t Alarm; |
34 extern float batteryState; |
36 extern int batteryState; |
35 extern float batteryVolts; |
37 extern float batteryVolts; |
36 extern float batteryCurrent; |
38 extern float batteryCurrent; |
37 extern float batteryPower; |
39 extern float batteryPower; |
38 extern float solarVolts; |
40 extern float solarVolts; |
39 extern float solarCurrent; |
41 extern float solarCurrent; |
131 |
133 |
132 void publish(void) |
134 void publish(void) |
133 { |
135 { |
134 char *topic = NULL, *payload = NULL, buf[64]; |
136 char *topic = NULL, *payload = NULL, buf[64]; |
135 const esp_app_desc_t *app_desc = esp_app_get_description(); |
137 const esp_app_desc_t *app_desc = esp_app_get_description(); |
136 |
138 int Quality = 0; |
137 // {"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}} |
139 |
138 // {"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}} |
140 // {"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}} |
139 payload = xstrcpy((char *)"{\"system\":{\"battery\":"); |
141 payload = xstrcpy((char *)"{\"system\":{\"battery\":"); |
140 sprintf(buf, "%.0f", batteryState); |
142 sprintf(buf, "%d", batteryState); |
141 payload = xstrcat(payload, buf); |
143 payload = xstrcat(payload, buf); |
142 payload = xstrcat(payload, (char *)",\"alarm\":"); |
144 payload = xstrcat(payload, (char *)",\"alarm\":"); |
143 sprintf(buf, "%ld", Alarm); |
145 sprintf(buf, "%ld", Alarm); |
144 payload = xstrcat(payload, buf); |
146 payload = xstrcat(payload, buf); |
145 payload = xstrcat(payload, (char *)",\"version\":\""); |
147 payload = xstrcat(payload, (char *)",\"version\":\""); |
146 payload = xstrcat(payload, (char *)app_desc->version); |
148 payload = xstrcat(payload, (char *)app_desc->version); |
147 payload = xstrcat(payload, (char *)"\",\"rssi\":"); |
149 payload = xstrcat(payload, (char *)"\",\"rssi\":"); |
148 if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) { |
150 if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) { |
149 sprintf(buf, "%d", wifi_state->STA_rssi); |
151 sprintf(buf, "%d", wifi_state->STA_rssi); |
150 payload = xstrcat(payload, buf); |
152 payload = xstrcat(payload, buf); |
|
153 payload = xstrcat(payload, (char *)",\"wifi\":"); |
|
154 if (wifi_state->STA_rssi <= -100) { |
|
155 Quality = 0; |
|
156 } else if (wifi_state->STA_rssi >= -50) { |
|
157 Quality = 100; |
|
158 } else { |
|
159 Quality = 2 * (wifi_state->STA_rssi + 100); |
|
160 } |
|
161 sprintf(buf, "%d", Quality); |
|
162 payload = xstrcat(payload, buf); |
151 xSemaphoreGive(xSemaphoreWiFi); |
163 xSemaphoreGive(xSemaphoreWiFi); |
152 } |
164 } |
153 payload = xstrcat(payload, (char *)",\"light\":{\"lux\":"); |
165 payload = xstrcat(payload, (char *)",\"light\":{\"lux\":"); |
154 |
166 if (xSemaphoreTake(xSemaphoreAPDS9930, 25) == pdTRUE) { |
155 payload = xstrcat(payload, (char *)",\"gain\":"); |
167 sprintf(buf, "%.1f", apds9930_state->ambient_light); |
156 |
168 payload = xstrcat(payload, buf); |
|
169 payload = xstrcat(payload, (char *)",\"gain\":"); |
|
170 sprintf(buf, "%d", apds9930_state->gain); |
|
171 payload = xstrcat(payload, buf); |
|
172 payload = xstrcat(payload, (char *)",\"agl\":"); |
|
173 sprintf(buf, "%d", apds9930_state->aglbit); |
|
174 payload = xstrcat(payload, buf); |
|
175 xSemaphoreGive(xSemaphoreAPDS9930); |
|
176 } |
157 payload = xstrcat(payload, (char *)"}},\"solar\":{\"voltage\":"); |
177 payload = xstrcat(payload, (char *)"}},\"solar\":{\"voltage\":"); |
158 sprintf(buf, "%.2f", solarVolts); |
178 sprintf(buf, "%.2f", solarVolts); |
159 payload = xstrcat(payload, buf); |
179 payload = xstrcat(payload, buf); |
160 payload = xstrcat(payload, (char *)",\"current\":"); |
180 payload = xstrcat(payload, (char *)",\"current\":"); |
161 sprintf(buf, "%.1f", solarCurrent); |
181 sprintf(buf, "%.1f", solarCurrent); |