Files
home_automatization_control…/growbox/telemetry.cpp
T
cacto bb85c617a4 Добавлен локальный веб-интерфейс и распиновка в README
Плата поднимает страницу + JSON API (/api/state, /api/command) на порту 80
для наблюдения и управления актуаторами независимо от MQTT/Laravel.
Команда с веб-UI публикует тот же ack в devices/{id}/ack, что и MQTT-команда,
поэтому device shadow платформы не расходится с реальным состоянием.
Включается/выключается флагом ENABLE_WEB_UI в config.h.

В README добавлены ASCII-схема подключения DHT22/реле и раздел про сборку
через arduino-cli (включая обходной путь для проблемы с правами на
~/Documents/Arduino на macOS).
2026-08-11 19:27:41 +05:00

60 lines
1.5 KiB
C++

#include "telemetry.h"
#include <DHT.h>
#include "config.h"
#include "mqtt_link.h"
#include "time_sync.h"
static DHT dht(PIN_DHT22, DHT22);
static unsigned long lastPublish = 0;
static bool hasReading = false;
static float lastTemperature = 0;
static float lastHumidity = 0;
void telemetryBegin() {
dht.begin();
}
void telemetryTick() {
unsigned long now = millis();
if (now - lastPublish < TELEMETRY_INTERVAL_MS && lastPublish != 0) {
return;
}
// Без синхронизированного времени ingest-service отклонит timestamp
// (или он будет ложным), поэтому просто пропускаем цикл и ждём.
if (!timeSyncIsReady()) {
return;
}
lastPublish = now;
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("[telemetry] DHT22 read failed, skipping this cycle");
return;
}
lastTemperature = temperature;
lastHumidity = humidity;
hasReading = true;
mqttPublishTelemetry(DEVICE_ID_SENSOR, "temperature", temperature);
mqttPublishTelemetry(DEVICE_ID_SENSOR, "humidity", humidity);
Serial.print("[telemetry] temperature=");
Serial.print(temperature);
Serial.print(" humidity=");
Serial.println(humidity);
}
bool telemetryGetLast(float& temperature, float& humidity) {
if (!hasReading) {
return false;
}
temperature = lastTemperature;
humidity = lastHumidity;
return true;
}