12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #include "send.h"
- #include "mqtt.h"
- #include "esp_log.h"
- #include <stdio.h>
- #include <string.h>
- #include "freertos/FreeRTOS.h"
- #include "freertos/task.h"
- #include "freertos/queue.h"
- #include "config.h"
- #ifdef ENABLE_SEND
- #define QUEUE_SIZE 3
- static QueueHandle_t dataQueue = NULL;
- static bool queueReady = false;
- void sendTask(void *pvParameters) {
- uint8_t aliveCnt = 0;
- DisplayData data;
- char txt[50];
- ESP_LOGI("DISPnSND", "SendTask starting. Core:%d",xPortGetCoreID());
- // Create the data input queue, now that all is setup
- dataQueue = xQueueCreate( QUEUE_SIZE, sizeof( DisplayData ) );
- if(dataQueue == NULL) {
- ESP_LOGE("DISPnSND","Error creating the queue");
- }
- ESP_LOGI("DISPnSND", "Data input queue ready.");
- queueReady = true;
- while( 1 ) {
- if( xQueueReceive(dataQueue,&data, 1000 / portTICK_PERIOD_MS) == pdTRUE ) {
- switch( data.type ) {
- case type_VPP: sprintf(txt," %d",data.iData);
- sprintf(txt,"%d",data.iData);
- sendMQTTMessage("homeEnergyMeter/waterHeater/totalEnergy", txt);
- aliveCnt++;
- break;
- case type_TempA:
- sprintf(txt,"%.2f",data.dData);
- sendMQTTMessage("homeEnergyMeter/internal/temp", txt);
- break;
- case type_TempB:
- sprintf(txt,"%.2f",data.dData);
- sendMQTTMessage("homeEnergyMeter/waterHeater/temp", txt);
- break;
- case type_kWh:
- sprintf(txt,"%.5f",data.dData);
- sendMQTTMessage("homeEnergyMeter/electricityMeter/kWh", txt);
- sprintf(txt,"%d",data.iData);
- sendMQTTMessage("homeEnergyMeter/electricityMeter/pulses", txt);
- break;
- default:
- break;
- }
- }
- }
- vTaskDelete(NULL);
- }
- void addDataToQueue(int data_type, double dData_in, int iData_in) {
- DisplayData d;
- d.type = data_type;
- d.dData = dData_in;
- d.iData = iData_in;
- if( queueReady == true && dataQueue != NULL ) {
- if( xQueueSend(dataQueue, &d, 0) != pdPASS ) {
- ESP_LOGE("DISPnSND","Queue full");
- }
- }
- else {
- ESP_LOGE("DISPnSND","Queue not ready.");
- }
- }
- void initSend() {
- xTaskCreate(sendTask, "Send-Task", 1024*10, NULL, 2, NULL);
- }
- #endif
|