Add DS18B20 temperature sensor support
This commit is contained in:
@@ -1,10 +1,87 @@
|
||||
#include <Arduino.h>
|
||||
#include <OneWire.h>
|
||||
#include <DallasTemperature.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "sensors.h"
|
||||
|
||||
SensorData sensors;
|
||||
|
||||
OneWire oneWire(ONEWIRE_PIN);
|
||||
DallasTemperature ds18b20(&oneWire);
|
||||
|
||||
DeviceAddress sensorAddresses[4];
|
||||
int sensorCount = 0;
|
||||
|
||||
float cToF(float c) {
|
||||
return (c * 9.0 / 5.0) + 32.0;
|
||||
}
|
||||
|
||||
bool validTempC(float tempC) {
|
||||
return tempC != DEVICE_DISCONNECTED_C && tempC > -55 && tempC < 125;
|
||||
}
|
||||
|
||||
void printAddress(DeviceAddress address) {
|
||||
for (uint8_t i = 0; i < 8; i++) {
|
||||
if (address[i] < 16) Serial.print("0");
|
||||
Serial.print(address[i], HEX);
|
||||
if (i < 7) Serial.print(":");
|
||||
}
|
||||
}
|
||||
|
||||
void printSensorAddresses() {
|
||||
Serial.println("DS18B20 Sensors Found:");
|
||||
|
||||
for (int i = 0; i < sensorCount; i++) {
|
||||
Serial.print("Sensor ");
|
||||
Serial.print(i);
|
||||
Serial.print(": ");
|
||||
printAddress(sensorAddresses[i]);
|
||||
Serial.println();
|
||||
}
|
||||
|
||||
if (sensorCount == 0) {
|
||||
Serial.println("No DS18B20 sensors found.");
|
||||
}
|
||||
}
|
||||
|
||||
void initSensors() {
|
||||
ds18b20.begin();
|
||||
sensorCount = ds18b20.getDeviceCount();
|
||||
|
||||
if (sensorCount > 4) {
|
||||
sensorCount = 4;
|
||||
}
|
||||
|
||||
for (int i = 0; i < sensorCount; i++) {
|
||||
ds18b20.getAddress(sensorAddresses[i], i);
|
||||
}
|
||||
|
||||
printSensorAddresses();
|
||||
}
|
||||
|
||||
void updateSensors() {
|
||||
// Placeholder until DS18B20 support is added
|
||||
ds18b20.requestTemperatures();
|
||||
|
||||
float tempsF[4] = {-127, -127, -127, -127};
|
||||
bool online[4] = {false, false, false, false};
|
||||
|
||||
for (int i = 0; i < sensorCount; i++) {
|
||||
float tempC = ds18b20.getTempC(sensorAddresses[i]);
|
||||
|
||||
if (validTempC(tempC)) {
|
||||
tempsF[i] = cToF(tempC);
|
||||
online[i] = true;
|
||||
}
|
||||
}
|
||||
|
||||
sensors.fridgeZone1 = tempsF[0];
|
||||
sensors.fridgeZone2 = tempsF[1];
|
||||
sensors.rearSeat = tempsF[2];
|
||||
sensors.outsideAir = tempsF[3];
|
||||
|
||||
sensors.fridgeZone1Online = online[0];
|
||||
sensors.fridgeZone2Online = online[1];
|
||||
sensors.rearSeatOnline = online[2];
|
||||
sensors.outsideAirOnline = online[3];
|
||||
}
|
||||
|
||||
@@ -1,13 +1,19 @@
|
||||
#pragma once
|
||||
|
||||
struct SensorData {
|
||||
float fridgeZone1 = 36.0;
|
||||
float fridgeZone2 = 12.0;
|
||||
float rearSeat = 78.0;
|
||||
float outsideAir = 88.0;
|
||||
float fridgeZone1 = -127.0;
|
||||
float fridgeZone2 = -127.0;
|
||||
float rearSeat = -127.0;
|
||||
float outsideAir = -127.0;
|
||||
|
||||
bool fridgeZone1Online = false;
|
||||
bool fridgeZone2Online = false;
|
||||
bool rearSeatOnline = false;
|
||||
bool outsideAirOnline = false;
|
||||
};
|
||||
|
||||
extern SensorData sensors;
|
||||
|
||||
void initSensors();
|
||||
void updateSensors();
|
||||
void printSensorAddresses();
|
||||
|
||||
@@ -30,10 +30,16 @@ void handleStatus() {
|
||||
battery["temperature_f"] = batteryTemp;
|
||||
|
||||
JsonObject temps = doc.createNestedObject("temps");
|
||||
temps["fridge_zone_1"] = sensors.fridgeZone1;
|
||||
temps["fridge_zone_2"] = sensors.fridgeZone2;
|
||||
temps["rear_seat"] = sensors.rearSeat;
|
||||
temps["outside"] = sensors.outsideAir;
|
||||
temps["fridge_zone_1"] = sensors.fridgeZone1Online ? sensors.fridgeZone1 : nullptr;
|
||||
temps["fridge_zone_2"] = sensors.fridgeZone2Online ? sensors.fridgeZone2 : nullptr;
|
||||
temps["rear_seat"] = sensors.rearSeatOnline ? sensors.rearSeat : nullptr;
|
||||
temps["outside"] = sensors.outsideAirOnline ? sensors.outsideAir : nullptr;
|
||||
|
||||
JsonObject sensorHealth = doc.createNestedObject("sensor_health");
|
||||
sensorHealth["fridge_zone_1"] = sensors.fridgeZone1Online;
|
||||
sensorHealth["fridge_zone_2"] = sensors.fridgeZone2Online;
|
||||
sensorHealth["rear_seat"] = sensors.rearSeatOnline;
|
||||
sensorHealth["outside"] = sensors.outsideAirOnline;
|
||||
|
||||
JsonObject relayObj = doc.createNestedObject("relays");
|
||||
relayObj["starlink"] = relays.starlink;
|
||||
|
||||
Reference in New Issue
Block a user