1
mirror of https://github.com/rvdbreemen/OTGW-firmware synced 2024-09-29 20:04:13 +02:00
OTGW-firmware/OTGW-Core.h

565 lines
32 KiB
C
Raw Normal View History

/*
***************************************************************************
2021-01-30 15:24:54 +01:00
** Program : Header file: OTGW-Core.h
2022-03-13 23:03:27 +01:00
** Version : v0.9.4
**
2022-01-02 17:35:56 +01:00
** Copyright (c) 2021-2022 Robert van den Breemen
** Borrowed from OpenTherm library from:
** https://github.com/jpraus/arduino-opentherm
**
** TERMS OF USE: MIT License. See bottom of file.
2020-10-28 01:40:48 +01:00
***************************************************************************
*/
2021-01-30 15:24:54 +01:00
#ifndef OTGWCore_h
#define OTGWCore_h
2020-12-29 00:52:58 +01:00
// OTGW Serial 2 network port
// #include <TelnetStream.h> // https://github.com/jandrassy/TelnetStream/commit/1294a9ee5cc9b1f7e51005091e351d60c8cddecf
2021-01-25 09:31:31 +01:00
#define OTGW_SERIAL_PORT 25238 // changed the port to original default of OTmonitor
2020-12-29 00:52:58 +01:00
TelnetStreamClass OTGWstream(OTGW_SERIAL_PORT);
//Depends on the library
2020-11-09 08:24:47 +01:00
#define OTGW_COMMAND_TOPIC "command"
2020-11-02 08:09:26 +01:00
typedef struct {
uint16_t Statusflags = 0; // flag8 / flag8 Master and Slave Status flags.
uint8_t MasterStatus = 0;
uint8_t SlaveStatus = 0;
2021-03-15 20:41:17 +01:00
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)
2021-12-03 23:03:59 +01:00
float Theatexchanger = 0.0 ; // f8.8 Heat Exchanger (°C)
uint16_t FanSpeed = 0; // u16 Fan Speed (rpm)
2021-03-15 20:41:17 +01:00
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
2021-12-03 23:03:59 +01:00
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)
2021-12-03 23:03:59 +01:00
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;
2021-01-20 00:15:57 +01:00
//Ventilation/HeatRecovery Msgids
uint16_t StatusVH = 0;
uint8_t MasterStatusVH = 0;
uint8_t SlaveStatusVH = 0;
2021-03-09 00:32:27 +01:00
uint16_t ControlSetpointVH = 0; //should be uint8_t
uint16_t ASFFaultCodeVH = 0;
2021-01-20 00:15:57 +01:00
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;
2021-01-20 00:15:57 +01:00
float SupplyInletTemperature = 0.0;
float SupplyOutletTemperature = 0.0;
float ExhaustInletTemperature = 0.0;
float ExhaustOutletTemperature = 0.0;
uint16_t ActualExhaustFanSpeed = 0;
uint16_t ActualSupplyFanSpeed = 0;
2021-01-20 00:15:57 +01:00
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 SCUs
2021-02-10 01:47:02 +01:00
//errors
uint16_t error01 = 0;
uint16_t error02 = 0;
uint16_t error03 = 0;
uint16_t error04 = 0;
} OTdataStruct;
2021-12-22 16:37:46 +01:00
static OTdataStruct OTcurrentSystemState;
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 {
2021-03-23 21:47:36 +01:00
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
2021-03-23 21:47:36 +01:00
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)
2021-03-23 21:47:36 +01:00
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)
2021-12-03 23:03:59 +01:00
OT_Theatexchanger, // f8.8 Heat exchanger temperature (°C)
2021-03-23 21:47:36 +01:00
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
2021-12-03 23:03:59 +01:00
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
2021-03-23 21:47:36 +01:00
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)
2021-12-03 23:03:59 +01:00
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)
2021-03-23 21:47:36 +01:00
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
2021-03-23 21:47:36 +01:00
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)
2021-03-23 21:47:36 +01:00
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)
2021-03-23 21:47:36 +01:00
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
2021-03-23 21:47:36 +01:00
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
2021-03-23 21:47:36 +01:00
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 SCUs
};
2021-01-20 00:15:57 +01:00
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};
2020-12-12 00:20:31 +01:00
enum OTmsgcmd_t { OT_READ, OT_WRITE, OT_RW, OT_UNDEF };
2020-12-12 00:20:31 +01:00
struct OTlookup_t
{
int id;
2021-12-19 11:57:29 +01:00
OTmsgcmd_t msgcmd;
2020-12-12 00:20:31 +01:00
OTtype_t type;
const char* label;
const char* friendlyname;
const char* unit;
2020-12-12 00:20:31 +01:00
};
OTlookup_t OTlookupitem;
const OTlookup_t OTmap[] PROGMEM = {
2021-12-20 19:30:37 +01:00
{ 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", "°C" },
{ 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", "%" },
2021-12-20 19:30:37 +01:00
{ 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 starts", "" },
{ 119, OT_RW , ot_u16, "DHWBurnerStarts", "DHW burner starts", "" },
{ 120, OT_RW , ot_u16, "BurnerOperationHours", "Burner operation hours", "hrs" },
{ 121, OT_RW , ot_u16, "CHPumpOperationHours", "CH pump operation hours", "hrs" },
{ 122, OT_RW , ot_u16, "DHWPumpValveOperationHours", "DHW pump/valve operation hours", "hrs" },
{ 123, OT_RW , ot_u16, "DHWBurnerOperationHours", "DHW burner operation hours", "hrs" },
{ 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, "", "", "" },
2021-12-20 19:30:37 +01:00
{ 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 SCUs", "" },
2020-12-12 00:20:31 +01:00
// 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
2021-03-18 00:53:30 +01:00
struct OT_cmd_t { // see all possible commands for PIC here: https://otgw.tclcode.com/firmware.html
char cmd[15];
int cmdlen;
int retrycnt;
unsigned long due;
2021-03-18 00:53:30 +01:00
};
#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.
*/
2021-12-03 23:03:59 +01:00
enum OTGW_response_type {
OTGW_BOILER,
OTGW_THERMOSTAT,
OTGW_ANSWER_THERMOSTAT,
OTGW_REQUEST_BOILER,
OTGW_PARITY_ERROR,
2021-12-03 23:03:59 +01:00
OTGW_UNDEF
};
struct OpenthermData_t {
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
2021-12-03 23:03:59 +01:00
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);
};
2021-01-30 15:24:54 +01:00
#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.
*
***************************************************************************/