HB, OTA etc
This commit is contained in:
@@ -5,54 +5,88 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
|
||||
|
||||
#include "ws.h"
|
||||
|
||||
extern "C" {
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "esp_timer.h"
|
||||
}
|
||||
|
||||
static uint32_t msg_id = 1;
|
||||
static uint32_t last_send_ms = 0;
|
||||
static int64_t last_send_ts = 0;
|
||||
|
||||
static void sender_task(void *arg) {
|
||||
int data[RINGBUF_SIZE];
|
||||
static void sender_task(void* arg)
|
||||
{
|
||||
ringbuf_t* rb = sampler_get_buffer();
|
||||
|
||||
while (1) {
|
||||
vTaskDelay(pdMS_TO_TICKS(1000)); // 1 Гц
|
||||
last_send_ts = time(NULL);
|
||||
last_send_ms = esp_timer_get_time() / 1000;
|
||||
|
||||
while (1)
|
||||
{
|
||||
vTaskDelay(pdMS_TO_TICKS(50000)); // 1 мин^-1
|
||||
|
||||
char buf[512];
|
||||
uint32_t now_ms = esp_timer_get_time() / 1000;
|
||||
time_t now_ts = time(NULL);
|
||||
|
||||
ringbuf_t *rb = sampler_get_buffer();
|
||||
ringbuf_copy(rb, data);
|
||||
sample_t tmp[RINGBUF_SIZE];
|
||||
ringbuf_copy(rb, tmp);
|
||||
|
||||
time_t now = time(NULL);
|
||||
int out_values[RINGBUF_SIZE * 2];
|
||||
int count = 0;
|
||||
|
||||
for (int i = 0; i < RINGBUF_SIZE; i++)
|
||||
{
|
||||
if (tmp[i].ts_ms >= last_send_ms)
|
||||
{
|
||||
uint32_t delta = tmp[i].ts_ms - last_send_ms;
|
||||
|
||||
// кладём delta + value
|
||||
out_values[count * 2 + 0] = delta;
|
||||
out_values[count * 2 + 1] = tmp[i].value;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
int len = build_telemetry(
|
||||
buf,
|
||||
sizeof(buf),
|
||||
msg_id++,
|
||||
now,
|
||||
1, // device_id (пока захардкожен)
|
||||
"v", // metric
|
||||
"adc35", // source
|
||||
"raw", // unit
|
||||
data,
|
||||
RINGBUF_SIZE
|
||||
last_send_ts,
|
||||
1, // device_id (пока захардкожен)
|
||||
"t", // metric
|
||||
"ds18b20", // source
|
||||
"c_x100", // unit
|
||||
out_values,
|
||||
count
|
||||
);
|
||||
|
||||
if (len > 0) {
|
||||
if (ws_is_connected()) {
|
||||
if (len > 0)
|
||||
{
|
||||
if (ws_is_connected())
|
||||
{
|
||||
ws_send(buf);
|
||||
} else {
|
||||
printf("%s\n", buf); // fallback
|
||||
}
|
||||
} else {
|
||||
else
|
||||
{
|
||||
printf("%s\n", buf); // fallback
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("build_telemetry failed\n");
|
||||
}
|
||||
|
||||
last_send_ms = now_ms;
|
||||
last_send_ts = now_ts;
|
||||
}
|
||||
}
|
||||
|
||||
void sender_task_start() {
|
||||
void sender_task_start()
|
||||
{
|
||||
xTaskCreate(
|
||||
sender_task,
|
||||
"sender",
|
||||
@@ -61,4 +95,4 @@ void sender_task_start() {
|
||||
5,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user