#include "telemetry.h" #include #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; }