89 /* |
89 /* |
90 * First count, then sent the data. |
90 * First count, then sent the data. |
91 */ |
91 */ |
92 if (xSemaphoreTake(xSemaphorePcounter, 10) == pdTRUE) { |
92 if (xSemaphoreTake(xSemaphorePcounter, 10) == pdTRUE) { |
93 count_pub++; |
93 count_pub++; |
94 //printf(" up %d\n", count_pub); |
|
95 xSemaphoreGive(xSemaphorePcounter); |
94 xSemaphoreGive(xSemaphorePcounter); |
96 } else { |
95 } else { |
97 ESP_LOGE(TAG, "Missed lock 1"); |
96 ESP_LOGE(TAG, "publisher() counter lock"); |
98 } |
97 } |
99 |
98 |
100 if (payload) |
99 if (payload) |
101 esp_mqtt_client_publish(client, topic, payload, strlen(payload), 1, 0); |
100 esp_mqtt_client_publish(client, topic, payload, strlen(payload), 1, 0); |
102 else |
101 else |
145 payload = xstrcat(payload, (char *)",\"bar\":"); |
144 payload = xstrcat(payload, (char *)",\"bar\":"); |
146 sprintf(buf, "%.2f", units[i].pressure / 1000.0); |
145 sprintf(buf, "%.2f", units[i].pressure / 1000.0); |
147 payload = xstrcat(payload, buf); |
146 payload = xstrcat(payload, buf); |
148 payload = xstrcat(payload, (char *)"}}"); |
147 payload = xstrcat(payload, (char *)"}}"); |
149 xSemaphoreGive(xSemaphoreUnits); |
148 xSemaphoreGive(xSemaphoreUnits); |
|
149 } else { |
|
150 ESP_LOGE(TAG, "unit_data(%d) lock error", i); |
150 } |
151 } |
151 return payload; |
152 return payload; |
152 } |
153 } |
153 |
154 |
154 |
155 |
202 payload = xstrcat(payload, (char *)",\"THB\":{\"temperature\":"); |
203 payload = xstrcat(payload, (char *)",\"THB\":{\"temperature\":"); |
203 sprintf(buf, "%.3f", ds18b20_state->sensor[0].temperature); |
204 sprintf(buf, "%.3f", ds18b20_state->sensor[0].temperature); |
204 payload = xstrcat(payload, buf); |
205 payload = xstrcat(payload, buf); |
205 payload = xstrcat(payload, (char *)"}"); |
206 payload = xstrcat(payload, (char *)"}"); |
206 xSemaphoreGive(xSemaphoreDS18B20); |
207 xSemaphoreGive(xSemaphoreDS18B20); |
|
208 } else { |
|
209 ESP_LOGE(TAG, "publishNode() lock DS18B20 error"); |
207 } |
210 } |
208 |
211 |
209 if (xSemaphoreTake(xSemaphoreWiFi, 10) == pdTRUE) { |
212 if (xSemaphoreTake(xSemaphoreWiFi, 10) == pdTRUE) { |
210 payload = xstrcat(payload, (char *)",\"net\":{\"address\":\""); |
213 payload = xstrcat(payload, (char *)",\"net\":{\"address\":\""); |
211 payload = xstrcat(payload, wifi_state->STA_ip); |
214 payload = xstrcat(payload, wifi_state->STA_ip); |
212 payload = xstrcat(payload, (char *)"\",\"ifname\":\"sta\",\"rssi\":"); |
215 payload = xstrcat(payload, (char *)"\",\"ifname\":\"sta\",\"rssi\":"); |
213 sprintf(buf, "%d", wifi_state->STA_rssi); |
216 sprintf(buf, "%d", wifi_state->STA_rssi); |
214 payload = xstrcat(payload, buf); |
217 payload = xstrcat(payload, buf); |
215 payload = xstrcat(payload, (char *)"}"); |
218 payload = xstrcat(payload, (char *)"}"); |
216 xSemaphoreGive(xSemaphoreWiFi); |
219 xSemaphoreGive(xSemaphoreWiFi); |
|
220 } else { |
|
221 ESP_LOGE(TAG, "publishNode() lock WiFi error"); |
217 } |
222 } |
218 |
223 |
219 payload = xstrcat(payload, (char *)"}}"); |
224 payload = xstrcat(payload, (char *)"}}"); |
220 // Only NBIRTH messages, no NDATA in this project. |
225 // Only NBIRTH messages, no NDATA in this project. |
221 topic = topic_base((char *)"NBIRTH"); |
226 topic = topic_base((char *)"NBIRTH"); |
286 case MQTT_EVENT_PUBLISHED: |
293 case MQTT_EVENT_PUBLISHED: |
287 ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id); |
294 ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id); |
288 if (xSemaphoreTake(xSemaphorePcounter, 10) == pdTRUE) { |
295 if (xSemaphoreTake(xSemaphorePcounter, 10) == pdTRUE) { |
289 if (count_pub) { |
296 if (count_pub) { |
290 count_pub--; |
297 count_pub--; |
291 //printf("down %d\n", count_pub); |
|
292 } |
298 } |
293 xSemaphoreGive(xSemaphorePcounter); |
299 xSemaphoreGive(xSemaphorePcounter); |
294 } else { |
300 } else { |
295 ESP_LOGE(TAG, "Missed lock 2"); |
301 ESP_LOGE(TAG, "mqtt_event_handler_cb(() lock error event"); |
296 } |
302 } |
297 break; |
303 break; |
298 |
304 |
299 case MQTT_EVENT_DATA: |
305 case MQTT_EVENT_DATA: |
300 ESP_LOGI(TAG, "MQTT_EVENT_DATA"); |
306 ESP_LOGI(TAG, "MQTT_EVENT_DATA"); |
377 |
383 |
378 if (uxBits & TASK_MQTT_CONNECT) { |
384 if (uxBits & TASK_MQTT_CONNECT) { |
379 ESP_LOGI(TAG, "Request MQTT connect"); |
385 ESP_LOGI(TAG, "Request MQTT connect"); |
380 err = esp_mqtt_client_start(client); |
386 err = esp_mqtt_client_start(client); |
381 if (err != ESP_OK) |
387 if (err != ESP_OK) |
382 ESP_LOGI(TAG, "Result %s", esp_err_to_name(err)); |
388 ESP_LOGE(TAG, "Result %s", esp_err_to_name(err)); |
383 xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_CONNECT); |
389 xEventGroupClearBits(xEventGroupMQTT, TASK_MQTT_CONNECT); |
384 |
390 |
385 } else if (uxBits & TASK_MQTT_DISCONNECT) { |
391 } else if (uxBits & TASK_MQTT_DISCONNECT) { |
386 ESP_LOGI(TAG, "Request MQTT disconnect"); |
392 ESP_LOGI(TAG, "Request MQTT disconnect"); |
387 esp_mqtt_client_stop(client); |
393 esp_mqtt_client_stop(client); |