mirror of
https://github.com/rvdbreemen/OTGW-firmware
synced 2024-11-16 04:33:49 +01:00
fbbf8ee603
- Skipping MQTT when override - Lowering delays after sendMQTT
564 lines
32 KiB
C
564 lines
32 KiB
C
/*
|
||
***************************************************************************
|
||
** Program : Header file: OTGW-Core.h
|
||
** Version : v0.9.0
|
||
**
|
||
** Copyright (c) 2021 Robert van den Breemen
|
||
** Borrowed from OpenTherm library from:
|
||
** https://github.com/jpraus/arduino-opentherm
|
||
**
|
||
** TERMS OF USE: MIT License. See bottom of file.
|
||
***************************************************************************
|
||
*/
|
||
|
||
#ifndef OTGWCore_h
|
||
#define OTGWCore_h
|
||
|
||
// OTGW Serial 2 network port
|
||
// #include <TelnetStream.h> // https://github.com/jandrassy/TelnetStream/commit/1294a9ee5cc9b1f7e51005091e351d60c8cddecf
|
||
#define OTGW_SERIAL_PORT 25238 // changed the port to original default of OTmonitor
|
||
TelnetStreamClass OTGWstream(OTGW_SERIAL_PORT);
|
||
|
||
//Depends on the library
|
||
#define OTGW_COMMAND_TOPIC "command"
|
||
|
||
typedef struct {
|
||
uint16_t Statusflags = 0; // flag8 / flag8 Master and Slave Status flags.
|
||
uint8_t MasterStatus = 0;
|
||
uint8_t SlaveStatus = 0;
|
||
float TSet = 0.0; // f8.8 Control setpoint ie CH water temperature setpoint (°C)
|
||
uint16_t MasterConfigMemberIDcode = 0; // flag8 / u8 Master Configuration Flags / Master MemberID Code
|
||
uint16_t SlaveConfigMemberIDcode = 0; // flag8 / u8 Slave Configuration Flags / Slave MemberID Code
|
||
uint16_t Command = 0; // u8 / u8 Remote Command
|
||
uint16_t ASFflags = 0; // / OEM-fault-code flag8 / u8 Application-specific fault flags and OEM fault code
|
||
uint16_t RBPflags = 0; // flag8 / flag8 Remote boiler parameter transfer-enable & read/write flags
|
||
float CoolingControl = 0.0 ; // f8.8 Cooling control signal (%)
|
||
float TsetCH2 = 0.0 ; // f8.8 Control setpoint for 2e CH circuit (°C)
|
||
float TrOverride = 0.0 ; // f8.8 Remote override room setpoint
|
||
uint16_t TSP = 0; // u8 / u8 Number of Transparent-Slave-Parameters supported by slave
|
||
uint16_t TSPindexTSPvalue = 0; // u8 / u8 Index number / Value of referred-to transparent slave parameter.
|
||
uint16_t FHBsize = 0; // u8 / u8 Size of Fault-History-Buffer supported by slave
|
||
uint16_t FHBindexFHBvalue = 0; // u8 / u8 Index number / Value of referred-to fault-history buffer entry.
|
||
float MaxRelModLevelSetting = 0.0 ; // f8.8 Maximum relative modulation level setting (%)
|
||
uint16_t MaxCapacityMinModLevel = 0; // u8 / u8 Maximum boiler capacity (kW) / Minimum boiler modulation level(%)
|
||
float TrSet = 0.0 ; // f8.8 Room Setpoint (°C)
|
||
float RelModLevel = 0.0 ; // f8.8 Relative Modulation Level (%)
|
||
float CHPressure = 0.0 ; // f8.8 Water pressure in CH circuit (bar)
|
||
float DHWFlowRate = 0.0 ; // f8.8 Water flow rate in DHW circuit. (litres/minute)
|
||
uint16_t DayTime = 0; // special / u8 Day of Week and Time of Day
|
||
uint16_t Date = 0; // u8 / u8 Calendar date
|
||
uint16_t Year = 0; // u16 Calendar year
|
||
float TrSetCH2 = 0.0 ; // f8.8 Room Setpoint for 2nd CH circuit (°C)
|
||
float Tr = 0.0 ; // f8.8 Room temperature (°C)
|
||
float Tboiler = 0.0 ; // f8.8 Boiler flow water temperature (°C)
|
||
float Tdhw = 0.0 ; // f8.8 DHW temperature (°C)
|
||
float Toutside = 0.0 ; // f8.8 Outside temperature (°C)
|
||
float Tret = 0.0 ; // f8.8 Return water temperature (°C)
|
||
float Tsolarstorage = 0.0 ; // f8.8 Solar storage temperature (°C)
|
||
int16_t Tsolarcollector = 0.0 ; // s16 Solar collector temperature (°C)
|
||
float TflowCH2 = 0.0 ; // f8.8 Flow water temperature CH2 circuit (°C)
|
||
float Tdhw2 = 0.0 ; // f8.8 Domestic hot water temperature 2 (°C)
|
||
int16_t Texhaust = 0; // s16 Boiler exhaust temperature (°C)
|
||
float Theatexchanger = 0.0 ; // f8.8 Heat Exchanger (°C)
|
||
uint16_t FanSpeed = 0; // u16 Fan Speed (rpm)
|
||
float ElectricalCurrentBurnerFlame = 0.0; // f88 Electrical current through burner flame (µA)
|
||
float TRoomCH2= 0.0; // f88 Room Temperature for 2nd CH circuit ("°C)
|
||
uint16_t RelativeHumidity = 0; // u8 / u8 Relative Humidity (%)
|
||
uint16_t TdhwSetUBTdhwSetLB = 0 ; // s8 / s8 DHW setpoint upper & lower bounds for adjustment (°C)
|
||
uint16_t MaxTSetUBMaxTSetLB = 0; // s8 / s8 Max CH water setpoint upper & lower bounds for adjustment (°C)
|
||
uint16_t HcratioUBHcratioLB = 0; // s8 / s8 OTC heat curve ratio upper & lower bounds for adjustment
|
||
uint16_t Remoteparameter4boundaries = 0; // s8 / s8 Remote parameter 4 upper & lower bounds for adjustment
|
||
uint16_t Remoteparameter5boundaries = 0; // s8 / s8 Remote parameter 5 upper & lower bounds for adjustment
|
||
uint16_t Remoteparameter6boundaries = 0; // s8 / s8 Remote parameter 6 upper & lower bounds for adjustment
|
||
uint16_t Remoteparameter7boundaries = 0; // s8 / s8 Remote parameter 7 upper & lower bounds for adjustment
|
||
uint16_t Remoteparameter8boundaries = 0; // s8 / s8 Remote parameter 8 upper & lower bounds for adjustment
|
||
float TdhwSet = 0.0 ; // f8.8 DHW setpoint (°C) (Remote parameter 1)
|
||
float MaxTSet = 0.0 ; // f8.8 Max CH water setpoint (°C) (Remote parameters 2)
|
||
float Hcratio = 0.0 ; // f8.8 OTC heat curve ratio (°C) (Remote parameter 3)
|
||
float Remoteparameter4 = 0.0 ; // f8.8 Remote parameter 4
|
||
float Remoteparameter5 = 0.0 ; // f8.8 Remote parameter 5
|
||
float Remoteparameter6 = 0.0 ; // f8.8 Remote parameter 6
|
||
float Remoteparameter7 = 0.0 ; // f8.8 Remote parameter 7
|
||
float Remoteparameter8 = 0.0 ; // f8.8 Remote parameter 8
|
||
|
||
//RF
|
||
uint16_t RFstrengthbatterylevel = 0; // u8/ u8 RF strength and battery level
|
||
uint16_t OperatingMode_HC1_HC2_DHW = 0; // u8 / u8 Operating Mode HC1, HC2/ DHW
|
||
uint16_t RoomRemoteOverrideFunction = 0; // Function of manual and program changes in master and remote room setpoint
|
||
|
||
//Electric Producer
|
||
uint16_t ElectricityProducerStarts = 0; // u16 Electricity producer starts
|
||
uint16_t ElectricityProducerHours = 0; // u16 Electricity producer hours
|
||
uint16_t ElectricityProduction = 0; // u16 Electricity production
|
||
uint16_t CumulativElectricityProduction = 0; // u16 Cumulativ Electricity production
|
||
|
||
//Solar Storage
|
||
uint16_t SolarStorageStatus = 0;
|
||
uint8_t SolarMasterStatus = 0;
|
||
uint8_t SolarSlaveStatus = 0;
|
||
uint16_t SolarStorageASFflags = 0;
|
||
uint16_t SolarStorageSlaveConfigMemberIDcode = 0;
|
||
uint16_t SolarStorageVersionType = 0;
|
||
uint16_t SolarStorageTSP = 0;
|
||
uint16_t SolarStorageTSPindexTSPvalue = 0;
|
||
uint16_t SolarStorageFHBsize = 0;
|
||
uint16_t SolarStorageFHBindexFHBvalue = 0;
|
||
|
||
//Ventilation/HeatRecovery Msgids
|
||
uint16_t StatusVH = 0;
|
||
uint8_t MasterStatusVH = 0;
|
||
uint8_t SlaveStatusVH = 0;
|
||
uint16_t ControlSetpointVH = 0; //should be uint8_t
|
||
uint16_t ASFFaultCodeVH = 0;
|
||
uint16_t DiagnosticCodeVH = 0;
|
||
uint16_t ConfigMemberIDVH = 0;
|
||
float OpenthermVersionVH = 0.0;
|
||
uint16_t VersionTypeVH = 0;
|
||
uint16_t RelativeVentilation = 0;
|
||
uint16_t RelativeHumidityExhaustAir = 0;
|
||
uint16_t CO2LevelExhaustAir = 0;
|
||
float SupplyInletTemperature = 0.0;
|
||
float SupplyOutletTemperature = 0.0;
|
||
float ExhaustInletTemperature = 0.0;
|
||
float ExhaustOutletTemperature = 0.0;
|
||
uint16_t ActualExhaustFanSpeed = 0;
|
||
uint16_t ActualSupplyFanSpeed = 0;
|
||
uint16_t RemoteParameterSettingVH = 0;
|
||
uint16_t NominalVentilationValue = 0;
|
||
uint16_t TSPNumberVH = 0;
|
||
uint16_t TSPEntryVH = 0;
|
||
uint16_t FaultBufferSizeVH = 0;
|
||
uint16_t FaultBufferEntryVH = 0;
|
||
|
||
//Statitics
|
||
uint16_t BurnerUnsuccessfulStarts = 0;
|
||
uint16_t FlameSignalTooLow = 0;
|
||
uint16_t RemoteOverrideFunction = 0; // flag8 / - Function of manual and program changes in master and remote room setpoint.
|
||
uint16_t OEMDiagnosticCode = 0; // u16 OEM-specific diagnostic/service code
|
||
uint16_t BurnerStarts = 0; // u16 Number of starts burner
|
||
uint16_t CHPumpStarts = 0; // u16 Number of starts CH pump
|
||
uint16_t DHWPumpValveStarts = 0; // u16 Number of starts DHW pump/valve
|
||
uint16_t DHWBurnerStarts = 0; // u16 Number of starts burner during DHW mode
|
||
uint16_t BurnerOperationHours = 0; // u16 Number of hours that burner is in operation (i.e. flame on)
|
||
uint16_t CHPumpOperationHours = 0; // u16 Number of hours that CH pump has been running
|
||
uint16_t DHWPumpValveOperationHours = 0; // u16 Number of hours that DHW pump has been running or DHW valve has been opened
|
||
uint16_t DHWBurnerOperationHours = 0; // u16 Number of hours that burner is in operation during DHW mode
|
||
float OpenThermVersionMaster = 0.0 ; // f8.8 The implemented version of the OpenTherm Protocol Specification in the master.
|
||
float OpenThermVersionSlave = 0.0 ; // f8.8 The implemented version of the OpenTherm Protocol Specification in the slave.
|
||
uint16_t MasterVersion = 0; // u8 / u8 Master product version number and type
|
||
uint16_t SlaveVersion = 0; // u8 / u8 Slave product version number and type
|
||
|
||
//Rehmea
|
||
uint16_t RemehadFdUcodes = 0; // u16 Remeha dF-/dU-codes
|
||
uint16_t RemehaServicemessage = 0; // u16 Remeha Servicemessage
|
||
uint16_t RemehaDetectionConnectedSCU =0; // u16 Remeha detection connected SCU’s
|
||
|
||
//errors
|
||
uint16_t error01 = 0;
|
||
uint16_t error02 = 0;
|
||
uint16_t error03 = 0;
|
||
uint16_t error04 = 0;
|
||
|
||
} OTdataStruct;
|
||
|
||
static OTdataStruct OTdataObject;
|
||
|
||
|
||
enum OpenThermResponseStatus {
|
||
OT_NONE,
|
||
OT_SUCCESS,
|
||
OT_INVALID,
|
||
OT_TIMEOUT
|
||
};
|
||
|
||
enum OpenThermMessageType {
|
||
/* Master to Slave */
|
||
OT_READ_DATA = B000,
|
||
OT_WRITE_DATA = B001,
|
||
OT_INVALID_DATA = B010,
|
||
OT_RESERVED = B011,
|
||
/* Slave to Master */
|
||
OT_READ_ACK = B100,
|
||
OT_WRITE_ACK = B101,
|
||
OT_DATA_INVALID = B110,
|
||
OT_UNKNOWN_DATA_ID = B111
|
||
};
|
||
|
||
enum OpenThermMessageID {
|
||
OT_Statusflags, // flag8 / flag8 Master and Slave Status flags.
|
||
OT_TSet, // f8.8 Control setpoint ie CH water temperature setpoint (°C)
|
||
OT_MasterConfigMemberIDcode, // flag8 / u8 Master Configuration Flags / Master MemberID Code
|
||
OT_SlaveConfigMemberIDcode, // flag8 / u8 Slave Configuration Flags / Slave MemberID Code
|
||
OT_Command, // u8 / u8 Remote Command
|
||
OT_ASFflags, // / OEM-fault-code flag8 / u8 Application-specific fault flags and OEM fault code
|
||
OT_RBPflags, // flag8 / flag8 Remote boiler parameter transfer-enable & read/write flags
|
||
OT_CoolingControl, // f8.8 Cooling control signal (%)
|
||
OT_TsetCH2, // f8.8 Control setpoint for 2e CH circuit (°C)
|
||
OT_TrOverride, // f8.8 Remote override room setpoint
|
||
OT_TSP, // u8 / u8 Number of Transparent-Slave-Parameters supported by slave
|
||
OT_TSPindexTSPvalue, // u8 / u8 Index number / Value of referred-to transparent slave parameter.
|
||
OT_FHBsize, // u8 / u8 Size of Fault-History-Buffer supported by slave
|
||
OT_FHBindexFHBvalue, // u8 / u8 Index number / Value of referred-to fault-history buffer entry.
|
||
OT_MaxRelModLevelSetting, // f8.8 Maximum relative modulation level setting (%)
|
||
OT_MaxCapacityMinModLevel, // u8 / u8 Maximum boiler capacity (kW) / Minimum boiler modulation level(%)
|
||
OT_TrSet, // f8.8 Room Setpoint (°C)
|
||
OT_RelModLevel, // f8.8 Relative Modulation Level (%)
|
||
OT_CHPressure, // f8.8 Water pressure in CH circuit (bar)
|
||
OT_DHWFlowRate, // f8.8 Water flow rate in DHW circuit. (litres/minute)
|
||
OT_DayTime, // special / u8 Day of Week and Time of Day
|
||
OT_Date, // u8 / u8 Calendar date
|
||
OT_Year, // u16 Calendar year
|
||
OT_TrSetCH2, // f8.8 Room Setpoint for 2nd CH circuit (°C)
|
||
OT_Tr, // f8.8 Room temperature (°C)
|
||
OT_Tboiler, // f8.8 Boiler flow water temperature (°C)
|
||
OT_Tdhw, // f8.8 DHW temperature (°C)
|
||
OT_Toutside, // f8.8 Outside temperature (°C)
|
||
OT_Tret, // f8.8 Return water temperature (°C)
|
||
OT_Tsolarstorage, // f8.8 Solar storage temperature (°C)
|
||
OT_Tsolarcollector, // s16 Solar collector temperature (°C)
|
||
OT_TflowCH2, // f8.8 Flow water temperature CH2 circuit (°C)
|
||
OT_Tdhw2, // f8.8 Domestic hot water temperature 2 (°C)
|
||
OT_Texhaust, // s16 Boiler exhaust temperature (°C)
|
||
OT_Theatexchanger, // f8.8 Heat exchanger temperature (°C)
|
||
OT_FanSpeed = 35, // u16 Fan Speed (rpm)
|
||
OT_ElectricalCurrentBurnerFlame, // f88 Electrical current through burner flame (µA)
|
||
OT_TRoomCH2, // f88 Room Temperature for 2nd CH circuit ("°C)
|
||
OT_RelativeHumidity, // u8 / u8 Relative Humidity (%)
|
||
OT_TdhwSetUBTdhwSetLB = 48, // s8 / s8 DHW setpoint upper & lower bounds for adjustment (°C)
|
||
OT_MaxTSetUBMaxTSetLB, // s8 / s8 Max CH water setpoint upper & lower bounds for adjustment (°C)
|
||
OT_HcratioUBHcratioLB, // s8 / s8 OTC heat curve ratio upper & lower bounds for adjustment
|
||
OT_Remoteparameter4boundaries, // s8 / s8 Remote Parameter ratio upper & lower bounds for adjustment
|
||
OT_Remoteparameter5boundaries, // s8 / s8 Remote Parameter upper & lower bounds for adjustment
|
||
OT_Remoteparameter6boundaries, // s8 / s8 Remote Parameter upper & lower bounds for adjustment
|
||
OT_Remoteparameter7boundaries, // s8 / s8 Remote Parameter upper & lower bounds for adjustment
|
||
OT_Remoteparameter8boundaries, // s8 / s8 Remote Parameter upper & lower bounds for adjustment
|
||
OT_TdhwSet = 56, // f8.8 DHW setpoint (°C) (Remote parameter 1)
|
||
OT_MaxTSet, // f8.8 Max CH water setpoint (°C) (Remote parameters 2)
|
||
OT_Hcratio, // f8.8 OTC heat curve ratio (°C) (Remote parameter 3)
|
||
OT_Remoteparameter4, // f8.8 Remote parameter 4 (°C) (Remote parameter 4)
|
||
OT_Remoteparameter5, // f8.8 Remote parameter 5 (°C) (Remote parameter 5)
|
||
OT_Remoteparameter6, // f8.8 Remote parameter 6 (°C) (Remote parameter 6)
|
||
OT_Remoteparameter7, // f8.8 Remote parameter 7 (°C) (Remote parameter 7)
|
||
OT_Remoteparameter8, // f8.8 Remote parameter 8 (°C) (Remote parameter 8)
|
||
OT_StatusVH = 70, // flag8 / flag8 Status Ventilation/Heat recovery
|
||
OT_ControlSetpointVH, // u8 Control setpoint V/H
|
||
OT_ASFFaultCodeVH, // flag8 / u8 Aplication Specific Fault Flags/Code V/H
|
||
OT_DiagnosticCodeVH, // u16 Diagnostic Code V/H
|
||
OT_ConfigMemberIDVH, // flag8 / u8 Config/Member ID V/H
|
||
OT_OpenthermVersionVH, // f8.8 OpenTherm Version V/H
|
||
OT_VersionTypeVH, // u8 / u8 Version & Type V/H
|
||
OT_RelativeVentilation, // u8 Relative Ventilation (%)
|
||
OT_RelativeHumidityExhaustAir, // u8 / u8 Relative Humidity (%)
|
||
OT_CO2LevelExhaustAir, // u16 CO2 Level (ppm)
|
||
OT_SupplyInletTemperature, // f8.8 Supply Inlet Temperature (°C)
|
||
OT_SupplyOutletTemperature, // f8.8 Supply Outlet Temperature(°C)
|
||
OT_ExhaustInletTemperature, // f8.8 Exhaust Inlet Temperature (°C)
|
||
OT_ExhaustOutletTemperature, // f8.8 Exhaust Outlet Temperature (°C)
|
||
OT_ActualExhaustFanSpeed, // u16 Actual Exhaust Fan Speed (rpm)
|
||
OT_ActualSupplyFanSpeed, // u16 Actual Supply Fan Speed (rpm)
|
||
OT_RemoteParameterSettingVH, // flag8 / flag8 Remote Parameter Setting V/H
|
||
OT_NominalVentilationValue, // u8 Nominal Ventilation Value
|
||
OT_TSPNumberVH, // u8 / u8 TSP Number V/H
|
||
OT_TSPEntryVH, // u8 / u8 TSP Entry V/H
|
||
OT_FaultBufferSizeVH, // u8 / u8 Fault Buffer Size V/H
|
||
OT_FaultBufferEntryVH, // u8 / u8 Fault Buffer Entry V/H
|
||
OT_RFstrengthbatterylevel=98, // u8 / u8 RF strength and battery level
|
||
OT_OperatingMode_HC1_HC2_DHW, // u8 / u8 Operating Mode HC1, HC2/ DHW
|
||
OT_RemoteOverrideFunction, // flag8 / - Function of manual and program changes in master and remote room setpoint.
|
||
OT_SolarStorageMaster, // flag8 / flag8 Solar Storage Master flags.
|
||
OT_SolarStorageASFflags, // flag8 / u8 / Solar Storage OEM-fault-code flag8 / u8 Application-specific fault flags and OEM fault code
|
||
OT_SolarStorageSlaveConfigMemberIDcode, // flag8 / u8 Solar Storage Master Configuration Flags / Master MemberID Code
|
||
OT_SolarStorageVersionType, // u8 / u8 / Solar Storage product version number and type
|
||
OT_SolarStorageTSP, // u8 / u8 / Solar Storage Number of Transparent-Slave-Parameters supported
|
||
OT_SolarStorageTSPindexTSPvalue, // u8 / u8 / Solar Storage Index number / Value of referred-to transparent slave parameter
|
||
OT_SolarStorageFHBsize, // u8 /u8 / Solar Storage Size of Fault-History-Buffer supported by slave
|
||
OT_SolarStorageFHBindexFHBvalue, // u8 /u8 / Solar Storage Index number / Value of referred-to fault-history buffer entry
|
||
OT_ElectricityProducerStarts, // u16 Electricity producer starts
|
||
OT_ElectricityProducerHours, //u16 Electricity producer hours
|
||
OT_ElectricityProduction, //u16 Electricity production
|
||
OT_CumulativElectricityProduction, // u16 Cumulativ Electricity production
|
||
OT_BurnerUnsuccessfulStarts, // u16 Number of Un-successful burner starts
|
||
OT_FlameSignalTooLow, //u16 Number of times flame signal too low
|
||
OT_OEMDiagnosticCode, // u16 OEM-specific diagnostic/service code
|
||
OT_BurnerStarts, // u16 Number of starts burner
|
||
OT_CHPumpStarts, // u16 Number of starts CH pump
|
||
OT_DHWPumpValveStarts, // u16 Number of starts DHW pump/valve
|
||
OT_DHWBurnerStarts, // u16 Number of starts burner during DHW mode
|
||
OT_BurnerOperationHours, // u16 Number of hours that burner is in operation (i.e. flame on)
|
||
OT_CHPumpOperationHours, // u16 Number of hours that CH pump has been running
|
||
OT_DHWPumpValveOperationHours, // u16 Number of hours that DHW pump has been running or DHW valve has been opened
|
||
OT_DHWBurnerOperationHours, // u16 Number of hours that burner is in operation during DHW mode
|
||
OT_OpenThermVersionMaster, // f8.8 The implemented version of the OpenTherm Protocol Specification in the master.
|
||
OT_OpenThermVersionSlave, // f8.8 The implemented version of the OpenTherm Protocol Specification in the slave.
|
||
OT_MasterVersion, // u8 / u8 Master product version number and type
|
||
OT_SlaveVersion, // u8 / u8 Slave product version number and type
|
||
OT_RemehadFdUcodes, // u8 / u8 Remeha dF-/dU-codes
|
||
OT_RemehaServicemessage, // u8 / u8 Remeha Servicemessage
|
||
OT_RemehaDetectionConnectedSCU, // u8 / u8 Remeha detection connected SCU’s
|
||
};
|
||
enum OTtype_t { ot_f88, ot_s16, ot_s8s8, ot_u16, ot_u8u8, ot_flag8, ot_flag8flag8, ot_special, ot_flag8u8, ot_u8, ot_undef};
|
||
enum OTmsgcmd_t { OT_READ, OT_WRITE, OT_RW, OT_UNDEF };
|
||
|
||
struct OTlookup_t
|
||
{
|
||
int id;
|
||
OTmsgcmd_t msg;
|
||
OTtype_t type;
|
||
char* label;
|
||
char* friendlyname;
|
||
char* unit;
|
||
};
|
||
|
||
OTlookup_t OTlookupitem;
|
||
|
||
const OTlookup_t OTmap[] PROGMEM = {
|
||
{ 0, OT_READ , ot_flag8flag8, "Status", "Master and Slave status", "" },
|
||
{ 1, OT_WRITE , ot_f88, "TSet", "Control setpoint", "°C" },
|
||
{ 2, OT_WRITE , ot_flag8u8, "MasterConfigMemberIDcode", "Master Config / Member ID", "" },
|
||
{ 3, OT_READ , ot_flag8u8, "SlaveConfigMemberIDcode", "Slave Config / Member ID", "" },
|
||
{ 4, OT_RW , ot_u8u8, "Command", "Command-Code", "" },
|
||
{ 5, OT_READ , ot_flag8u8, "ASFflags", "Application-specific fault", "" },
|
||
{ 6, OT_READ , ot_flag8u8, "RBPflags", "Remote-parameter flags", "" },
|
||
{ 7, OT_WRITE , ot_f88, "CoolingControl", "Cooling control signal", "%" },
|
||
{ 8, OT_WRITE , ot_f88, "TsetCH2", "Control setpoint for 2e CH circuit", "°C" },
|
||
{ 9, OT_READ , ot_f88, "TrOverride", "Remote override room setpoint", "" },
|
||
{ 10, OT_READ , ot_u8u8, "TSP", "Number of TSPs", "" },
|
||
{ 11, OT_RW , ot_u8u8, "TSPindexTSPvalue", "Index number / Value of referred-to transparent slave parameter", "" },
|
||
{ 12, OT_READ , ot_u8u8, "FHBsize", "Size of Fault-History-Buffer supported by slave", "" },
|
||
{ 13, OT_READ , ot_u8u8, "FHBindexFHBvalue", "Index number / Value of referred-to fault-history buffer entry", "" },
|
||
{ 14, OT_WRITE , ot_f88, "MaxRelModLevelSetting", "Maximum relative modulation level setting", "%" },
|
||
{ 15, OT_READ , ot_u8u8, "MaxCapacityMinModLevell", "Maximum boiler capacity (kW) / Minimum boiler modulation level(%)", "kW/%" },
|
||
{ 16, OT_WRITE , ot_f88, "TrSet", "Room Setpoint", "°C" },
|
||
{ 17, OT_READ , ot_f88, "RelModLevel", "Relative Modulation Level", "%" },
|
||
{ 18, OT_READ , ot_f88, "CHPressure", "CH water pressure", "bar" },
|
||
{ 19, OT_READ , ot_f88, "DHWFlowRate", "DHW flow rate", "l/m" },
|
||
{ 20, OT_RW , ot_special, "DayTime", "Day of Week and Time of Day", "" },
|
||
{ 21, OT_RW , ot_u8u8, "Date", "Calendar date ", "" },
|
||
{ 22, OT_RW , ot_u16, "Year", "Calendar year", "" },
|
||
{ 23, OT_WRITE , ot_f88, "TrSetCH2", "Room Setpoint CH2", "°C" },
|
||
{ 24, OT_WRITE , ot_f88, "Tr", "Room Temperature", "°C" },
|
||
{ 25, OT_READ , ot_f88, "Tboiler", "Boiler water temperature", "°C" },
|
||
{ 26, OT_READ , ot_f88, "Tdhw", "DHW temperature", "°C" },
|
||
{ 27, OT_READ , ot_f88, "Toutside", "Outside temperature", "°C" },
|
||
{ 28, OT_READ , ot_f88, "Tret", "Return water temperature", "°C" },
|
||
{ 29, OT_READ , ot_f88, "Tsolarstorage", "Solar storage temperature", "°C" },
|
||
{ 30, OT_READ , ot_s16, "Tsolarcollector", "Solar collector temperature", "°C" },
|
||
{ 31, OT_READ , ot_f88, "TflowCH2", "Flow water temperature CH2", "°C" },
|
||
{ 32, OT_READ , ot_f88, "Tdhw2", "DHW2 temperature", "°C" },
|
||
{ 33, OT_READ , ot_s16, "Texhaust", "Exhaust temperature", "°C" },
|
||
{ 34, OT_READ , ot_f88, "Theatexchanger", "Boiler heat exchanger temperature", "°C" },
|
||
{ 35, OT_READ , ot_u8u8, "FanSpeed", "Boiler fan speed and setpoint", "rpm" },
|
||
{ 36, OT_READ , ot_f88, "ElectricalCurrentBurnerFlame", "Electrical current through burner flame", "µA" },
|
||
{ 37, OT_READ , ot_f88, "TRoomCH2", "Room temperature for 2nd CH circuit", "°C" },
|
||
{ 38, OT_READ , ot_u8u8, "RelativeHumidity", "Relative Humidity", "%" },
|
||
{ 39, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 40, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 41, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 42, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 43, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 44, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 45, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 46, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 47, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 48, OT_READ , ot_s8s8, "TdhwSetUBTdhwSetLB", "DHW setpoint upper & lower bounds for adjustment", "°C" },
|
||
{ 49, OT_READ , ot_s8s8, "MaxTSetUBMaxTSetLB", "Max CH water setpoint upper & lower bounds for adjustment", "°C" },
|
||
{ 50, OT_READ , ot_s8s8, "HcratioUBHcratioLB", "OTC heat curve ratio upper & lower bounds for adjustment", "°C" },
|
||
{ 51, OT_READ , ot_s8s8, "Remoteparameter4boundaries", "Remote parameter 4 boundaries", "" },
|
||
{ 52, OT_READ , ot_s8s8, "Remoteparameter5boundaries", "Remote parameter 5 boundaries", "" },
|
||
{ 53, OT_READ , ot_s8s8, "Remoteparameter6boundaries", "Remote parameter 6 boundaries", "" },
|
||
{ 54, OT_READ , ot_s8s8, "Remoteparameter7boundaries", "Remote parameter 7 boundaries", "" },
|
||
{ 55, OT_READ , ot_s8s8, "Remoteparameter8boundaries", "Remote parameter 8 boundaries", "" },
|
||
{ 56, OT_RW , ot_f88, "TdhwSet", "DHW setpoint", "°C" },
|
||
{ 57, OT_RW , ot_f88, "MaxTSet", "Max CH water setpoint", "°C" },
|
||
{ 58, OT_RW , ot_f88, "Hcratio", "OTC heat curve ratio", "°C" },
|
||
{ 59, OT_RW , ot_f88, "Remoteparameter4", "Remote parameter 4", "" },
|
||
{ 60, OT_RW , ot_f88, "Remoteparameter5", "Remote parameter 5", "" },
|
||
{ 61, OT_RW , ot_f88, "Remoteparameter6", "Remote parameter 6", "" },
|
||
{ 62, OT_RW , ot_f88, "Remoteparameter7", "Remote parameter 7", "" },
|
||
{ 63, OT_RW , ot_f88, "Remoteparameter8", "Remote parameter 8", "" },
|
||
{ 64, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 65, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 66, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 67, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 68, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 69, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 70, OT_READ , ot_flag8flag8, "StatusVH", "Status Ventilation/Heat recovery", "" },
|
||
{ 71, OT_WRITE , ot_u8, "ControlSetpointVH", "Control setpoint V/H", "" },
|
||
{ 72, OT_READ , ot_flag8u8, "ASFFaultCodeVH", "Application-specific Fault Flags/Code V/H", "" },
|
||
{ 73, OT_READ , ot_u16, "DiagnosticCodeVH", "Diagnostic code V/H", "" },
|
||
{ 74, OT_READ , ot_flag8u8, "ConfigMemberIDVH", "Config/Member ID V/H", "" },
|
||
{ 75, OT_READ , ot_f88, "OpenthermVersionVH", "OpenTherm version V/H", "" },
|
||
{ 76, OT_READ , ot_u8u8, "VersionTypeVH", "Product version & type V/H", "" },
|
||
{ 77, OT_READ , ot_u8, "RelativeVentilation", "Relative ventilation", "%" },
|
||
{ 78, OT_RW , ot_u8u8, "RelativeHumidityExhaustAir", "Relative humidity exhaust air", "%" },
|
||
{ 79, OT_RW , ot_u16, "CO2LevelExhaustAir", "CO2 level exhaust air", "ppm" },
|
||
{ 80, OT_READ , ot_f88, "SupplyInletTemperature", "Supply inlet temperature", "°C" },
|
||
{ 81, OT_READ , ot_f88, "SupplyOutletTemperature", "Supply outlet temperature", "°C" },
|
||
{ 82, OT_READ , ot_f88, "ExhaustInletTemperature", "Exhaust inlet temperature", "°C" },
|
||
{ 83, OT_READ , ot_f88, "ExhaustOutletTemperature", "Exhaust outlet temperature", "°C" },
|
||
{ 84, OT_READ , ot_u16, "ActualExhaustFanSpeed", "Actual exhaust fan speed", "rpm" },
|
||
{ 85, OT_READ , ot_u16, "ActualSupplyFanSpeed", "Actual supply fan speed", "rpm" },
|
||
{ 86, OT_READ , ot_flag8flag8, "RemoteParameterSettingVH", "Remote Parameter Setting V/H", "" },
|
||
{ 87, OT_RW , ot_u8, "NominalVentilationValue", "Nominal Ventilation Value", "" },
|
||
{ 88, OT_READ , ot_u8u8, "TSPNumberVH", "TSP Number V/H", "" },
|
||
{ 89, OT_RW , ot_u8u8, "TSPEntryVH", "TSP setting V/H", "" },
|
||
{ 90, OT_READ , ot_u8u8, "FaultBufferSizeVH", "Fault Buffer Size V/H", "" },
|
||
{ 91, OT_READ , ot_u8u8, "FaultBufferEntryVH", "Fault Buffer Entry V/H", "" },
|
||
{ 92, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 93, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 94, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 95, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 96, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 97, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 98, OT_READ , ot_u8u8, "RFstrengthbatterylevel", "RF strength and battery level", "" },
|
||
{ 99, OT_READ , ot_u8u8, "OperatingMode_HC1_HC2_DHW", "Operating Mode HC1, HC2/ DHW", "" },
|
||
{ 100, OT_READ , ot_flag8, "RoomRemoteOverrideFunction", "Function of manual and program changes in master and remote room setpoint.", "" },
|
||
{ 101, OT_READ , ot_flag8flag8, "SolarStorageMaster", "Solar Storage Master mode", "" },
|
||
{ 102, OT_READ , ot_flag8u8, "SolarStorageASFflags", "Solar Storage Application-specific flags and OEM fault", "" },
|
||
{ 103, OT_READ , ot_flag8u8, "SolarStorageSlaveConfigMemberIDcode", "Solar Storage Slave Config / Member ID", "" },
|
||
{ 104, OT_READ , ot_u8u8, "SolarStorageVersionType", "Solar Storage product version number and type", "" },
|
||
{ 105, OT_READ , ot_u8u8, "SolarStorageTSP", "Solar Storage Number of Transparent-Slave-Parameters supported", "" },
|
||
{ 106, OT_RW , ot_u8u8, "SolarStorageTSPindexTSPvalue", "Solar Storage Index number / Value of referred-to transparent slave parameter", "" },
|
||
{ 107, OT_READ , ot_u8u8, "SolarStorageFHBsize", "Solar Storage Size of Fault-History-Buffer supported by slave", "" },
|
||
{ 108, OT_READ , ot_u8u8, "SolarStorageFHBindexFHBvalue", "Solar Storage Index number / Value of referred-to fault-history buffer entry", "" },
|
||
{ 109, OT_READ , ot_u16, "ElectricityProducerStarts", "Electricity producer starts", "" },
|
||
{ 110, OT_READ , ot_u16, "ElectricityProducerHours", "Electricity producer hours", "" },
|
||
{ 111, OT_READ , ot_u16, "ElectricityProduction", "Electricity production", "" },
|
||
{ 112, OT_READ , ot_u16, "CumulativElectricityProduction", "Cumulativ Electricity production", "" },
|
||
{ 113, OT_RW , ot_u16, "BurnerUnsuccessfulStarts", "Unsuccessful burner starts", "" },
|
||
{ 114, OT_RW , ot_u16, "FlameSignalTooLow", "Flame signal too low count", "" },
|
||
{ 115, OT_READ , ot_u16, "OEMDiagnosticCode", "OEM-specific diagnostic/service code", "" },
|
||
{ 116, OT_RW , ot_u16, "BurnerStarts", "Burner starts", "" },
|
||
{ 117, OT_RW , ot_u16, "CHPumpStarts", "CH pump starts", "" },
|
||
{ 118, OT_RW , ot_u16, "DHWPumpValveStarts", "DHW pump/valve startse", "" },
|
||
{ 119, OT_RW , ot_u16, "DHWBurnerStarts", "DHW burner startse", "" },
|
||
{ 120, OT_RW , ot_u16, "BurnerOperationHours", "Burner operation hours", "" },
|
||
{ 121, OT_RW , ot_u16, "CHPumpOperationHours", "CH pump operation hours", "" },
|
||
{ 122, OT_RW , ot_u16, "DHWPumpValveOperationHours", "DHW pump/valve operation hours", "" },
|
||
{ 123, OT_RW , ot_u16, "DHWBurnerOperationHours", "DHW burner operation hours", "" },
|
||
{ 124, OT_READ , ot_f88, "OpenThermVersionMaster", "Master Version OpenTherm Protocol Specification", "" },
|
||
{ 125, OT_READ , ot_f88, "OpenThermVersionSlave", "Slave Version OpenTherm Protocol Specification", "" },
|
||
{ 126, OT_READ , ot_u8u8, "MasterVersion", "Master product version number and type", "" },
|
||
{ 127, OT_READ , ot_u8u8, "SlaveVersion", "Slave product version number and type", "" },
|
||
{ 128, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 129, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 130, OT_UNDEF , ot_undef, "", "", "" },
|
||
{ 131, OT_RW , ot_u8u8, "RemehadFdUcodes", "Remeha dF-/dU-codes", "" },
|
||
{ 132, OT_READ , ot_u8u8, "RemehaServicemessage", "Remeha Servicemessage", "" },
|
||
{ 133, OT_READ , ot_u8u8, "RemehaDetectionConnectedSCU", "Remeha detection connected SCU’s", "" },
|
||
// all data ids are not defined above are resevered for future use
|
||
};
|
||
|
||
#define OT_MSGID_MAX 133
|
||
|
||
time_t msglastupdated[255] = {0}; //all msg, even if they are unknown
|
||
|
||
struct OT_cmd_t { // see all possible commands for PIC here: https://otgw.tclcode.com/firmware.html
|
||
char cmd[15];
|
||
int cmdlen;
|
||
int retrycnt;
|
||
time_t due;
|
||
};
|
||
|
||
#define CMDQUEUE_MAX 20
|
||
struct OT_cmd_t cmdqueue[CMDQUEUE_MAX];
|
||
static int cmdptr = 0;
|
||
|
||
enum OpenThermStatus {
|
||
OT_NOT_INITIALIZED,
|
||
OT_READY,
|
||
OT_DELAY,
|
||
OT_REQUEST_SENDING,
|
||
OT_RESPONSE_WAITING,
|
||
OT_RESPONSE_START_BIT,
|
||
OT_RESPONSE_RECEIVING,
|
||
OT_RESPONSE_READY,
|
||
OT_RESPONSE_INVALID
|
||
};
|
||
|
||
/**
|
||
* Structure to hold Opentherm data packet content.
|
||
* Use f88(), u16() or s16() functions to get appropriate value of data packet accoridng to id of message.
|
||
*/
|
||
/**
|
||
* Structure to hold Opentherm data packet content.
|
||
* Use f88(), u16() or s16() functions to get appropriate value of data packet according to id of message.
|
||
*/
|
||
|
||
enum OTGW_response_type {
|
||
OTGW_BOILER,
|
||
OTGW_THERMOSTAT,
|
||
OTGW_ANSWER_THERMOSTAT,
|
||
OTGW_REQUEST_BOILER,
|
||
OTGW_PARITY_ERROR,
|
||
OTGW_UNDEF
|
||
};
|
||
struct OpenthermData {
|
||
char buf[10];
|
||
byte len;
|
||
uint32_t value;
|
||
byte masterslave; //0=master, 1=slave
|
||
byte type;
|
||
byte id;
|
||
byte valueHB;
|
||
byte valueLB;
|
||
byte rsptype;
|
||
byte skipthis; //when true, then do not send to MQTT
|
||
time_t time;
|
||
/**
|
||
* @return float representation of data packet value
|
||
*/
|
||
float f88();
|
||
|
||
/**
|
||
* @param float number to set as value of this data packet
|
||
*/
|
||
void f88(float value);
|
||
|
||
/**
|
||
* @return unsigned 16b integer representation of data packet value
|
||
*/
|
||
uint16_t u16();
|
||
|
||
/**
|
||
* @param unsigned 16b integer number to set as value of this data packet
|
||
*/
|
||
void u16(uint16_t value);
|
||
|
||
/**
|
||
* @return signed 16b integer representation of data packet value
|
||
*/
|
||
int16_t s16();
|
||
|
||
/**
|
||
* @param signed 16b integer number to set as value of this data packet
|
||
*/
|
||
void s16(int16_t value);
|
||
};
|
||
|
||
#endif
|
||
|
||
|
||
/***************************************************************************
|
||
*
|
||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||
* copy of this software and associated documentation files (the
|
||
* "Software"), to deal in the Software without restriction, including
|
||
* without limitation the rights to use, copy, modify, merge, publish,
|
||
* distribute, sublicense, and/or sell copies of the Software, and to permit
|
||
* persons to whom the Software is furnished to do so, subject to the
|
||
* following conditions:
|
||
*
|
||
* The above copyright notice and this permission notice shall be included
|
||
* in all copies or substantial portions of the Software.
|
||
*
|
||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
|
||
* OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
|
||
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||
*
|
||
***************************************************************************/
|