This library allows to parse and work with data sent by the Paradigma pelletti oven.

Committer:
leihen
Date:
Thu Jun 27 00:29:33 2013 +0000
Revision:
2:27334bd6dc28
Parent:
1:9c48326ad8c9
Logger working locally
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
leihen 0:4873b21e0bca 1 #ifndef __PARADIGMA_DATA_H__
leihen 0:4873b21e0bca 2 #define __PARADIGMA_DATA_H__
leihen 0:4873b21e0bca 3
leihen 0:4873b21e0bca 4 #include "ParadigmaBase.h"
leihen 0:4873b21e0bca 5 #include "ParadigmaTemperature.h"
leihen 0:4873b21e0bca 6 #include "ParadigmaDateTime.h"
leihen 0:4873b21e0bca 7
leihen 0:4873b21e0bca 8 #include <string>
leihen 0:4873b21e0bca 9 using namespace std;
leihen 0:4873b21e0bca 10
leihen 1:9c48326ad8c9 11 namespace Paradigma
leihen 1:9c48326ad8c9 12 {
leihen 1:9c48326ad8c9 13
leihen 1:9c48326ad8c9 14 /** ParadigmaBlockType_t enumerates valid values for the block type. The block type is always the first
leihen 0:4873b21e0bca 15 * data byte in a response from paradigma. There are currently two known values.
leihen 0:4873b21e0bca 16 */
leihen 0:4873b21e0bca 17 typedef __packed enum {
leihen 0:4873b21e0bca 18 ParadigmaVariables = 0xFC,
leihen 0:4873b21e0bca 19 ParadigmaParameters = 0xFD,
leihen 0:4873b21e0bca 20 } ParadigmaBlockType_t;
leihen 0:4873b21e0bca 21
leihen 0:4873b21e0bca 22 /** ParadigmaMessageID_t specifies the content of the transmitted object. Currently only one valid value
leihen 0:4873b21e0bca 23 * is known which indicates a valuid variable or parameter block is being transmitted */
leihen 0:4873b21e0bca 24 typedef __packed enum {
leihen 0:4873b21e0bca 25 ParadigmaMessage = 0x0C,
leihen 0:4873b21e0bca 26 } ParadigmaMessageID_t;
leihen 0:4873b21e0bca 27
leihen 1:9c48326ad8c9 28 /** ParadigmaDatasetType_t specifies which type of information is contained in the datablock. Currently
leihen 0:4873b21e0bca 29 * known values are : Dataset1 and Dataset2 for Variables, and Parameters for different settings which
leihen 0:4873b21e0bca 30 * can be changed and queried by the user.
leihen 0:4873b21e0bca 31 */
leihen 0:4873b21e0bca 32 typedef __packed enum {
leihen 0:4873b21e0bca 33 ParadigmaMonitorDataset1 = 0x01,
leihen 0:4873b21e0bca 34 ParadigmaMonitorDataset2 = 0x02,
leihen 0:4873b21e0bca 35 ParadigmaParameterset = 0x03,
leihen 0:4873b21e0bca 36 ParadigmaUnknown1 = 0x14,
leihen 0:4873b21e0bca 37 Invalid = 0xFF
leihen 0:4873b21e0bca 38 } ParadigmaDatasetType_t;
leihen 0:4873b21e0bca 39
leihen 0:4873b21e0bca 40 typedef char ParadigmaParameterAddress_t[3];
leihen 0:4873b21e0bca 41
leihen 0:4873b21e0bca 42 const ParadigmaParameterAddress_t ParadigmaAdresses[] = {
leihen 0:4873b21e0bca 43 {0x00, 0x02, 0x2A}, // Heizkreis 1
leihen 0:4873b21e0bca 44 {0x01, 0x88, 0x2A}, // Heizkreis 2
leihen 0:4873b21e0bca 45 {0x03, 0x0E, 0x09}, // Warmwasser
leihen 0:4873b21e0bca 46 {0x03, 0xF7, 0x0F}, // Anlagendaten Kessel/Puffer und Zirkulation
leihen 0:4873b21e0bca 47 {0x03, 0xE6, 0x12}, // Wartung Telefonnummer
leihen 0:4873b21e0bca 48 {0x03, 0x17, 0x70}, // Warmwasserprogramm 1
leihen 0:4873b21e0bca 49 {0x03, 0x87, 0x70}, // Warmwasserprogramm 2
leihen 0:4873b21e0bca 50 {0x04, 0x06, 0x70}, // Zirkulationszeitprogramm 1
leihen 0:4873b21e0bca 51 {0x04, 0x76, 0x70}, // Zirkulationszeitprogramm 2
leihen 0:4873b21e0bca 52 {0x00, 0x2C, 0x70}, // Heizzeitprogramm 1 HK1
leihen 0:4873b21e0bca 53 {0x00, 0x9C, 0x70}, // Heizzeitprogramm 2 HK1
leihen 0:4873b21e0bca 54 {0x01, 0x0C, 0x70}, // Heizzeitprogramm 3 HK1
leihen 0:4873b21e0bca 55 {0x01, 0xB2, 0x70}, // Heizzeitprogramm 1 HK2
leihen 0:4873b21e0bca 56 {0x02, 0x22, 0x70}, // Heizzeitprogramm 2 HK2
leihen 0:4873b21e0bca 57 {0x02, 0x92, 0x70}, // Heizzeitprogramm 3 HK2
leihen 0:4873b21e0bca 58 {0x05, 0x08, 0x03} // Anlagendaten Kessel/Puffer 2
leihen 0:4873b21e0bca 59 };
leihen 0:4873b21e0bca 60
leihen 0:4873b21e0bca 61 /** ParadigmaBlockHeader_t represents the header of any sent block by paradigma. */
leihen 0:4873b21e0bca 62 typedef __packed struct {
leihen 0:4873b21e0bca 63 ParadigmaBlockType_t block_type; // 0xFC for normal observable variables, 0xFD for parameter blocks
leihen 0:4873b21e0bca 64 unsigned char block_length;
leihen 0:4873b21e0bca 65 ParadigmaMessageID_t message_id; // always 0x0C
leihen 1:9c48326ad8c9 66 ParadigmaDatasetType_t dataset_type;
leihen 0:4873b21e0bca 67 } ParadigmaBlockHeader_t;
leihen 0:4873b21e0bca 68
leihen 0:4873b21e0bca 69 typedef __packed struct {
leihen 0:4873b21e0bca 70 ParadigmaDateTime DateTime;
leihen 0:4873b21e0bca 71 ParadigmaTemperature Aussentemp; // (in 0,1 Grad Schritten)
leihen 0:4873b21e0bca 72 ParadigmaTemperature Warmwassertemp; // (in 0,1 Grad Schritten)
leihen 0:4873b21e0bca 73 ParadigmaTemperature Kesselvorlauf; // (in 0,1 Grad Schritten)
leihen 0:4873b21e0bca 74 ParadigmaTemperature Kesselruecklauf; // (in 0,1 Grad Schritten)
leihen 1:9c48326ad8c9 75
leihen 0:4873b21e0bca 76 ParadigmaTemperature RaumtemperaturHK1; // (in 0,1 Grad Schritten)
leihen 0:4873b21e0bca 77 ParadigmaTemperature RaumtemperaturHK2; // (in 0,1 Grad Schritten)
leihen 0:4873b21e0bca 78 ParadigmaTemperature VorlauftemperaturHK1; // (in 0,1 Grad Schritten)
leihen 0:4873b21e0bca 79 ParadigmaTemperature VorlauftemperaturHK2; // (in 0,1 Grad Schritten)
leihen 0:4873b21e0bca 80 ParadigmaTemperature RuecklauftemperaturHK1; // (in 0,1 Grad Schritten)
leihen 0:4873b21e0bca 81 ParadigmaTemperature RuecklauftemperaturHK2; // (in 0,1 Grad Schritten)
leihen 0:4873b21e0bca 82 ParadigmaTemperature PuffertemperaturOben; // (in 0,1 Grad Schritten)
leihen 0:4873b21e0bca 83 ParadigmaTemperature PuffertemperaturUnten; // (in 0,1 Grad Schritten)
leihen 0:4873b21e0bca 84 ParadigmaTemperature Zirkulationstemperatur; // (in 0,1 Grad Schritten)
leihen 0:4873b21e0bca 85
leihen 0:4873b21e0bca 86 byte Checksumme;
leihen 0:4873b21e0bca 87 } MonDta1_t;
leihen 0:4873b21e0bca 88
leihen 0:4873b21e0bca 89 typedef __packed struct {
leihen 0:4873b21e0bca 90 ParadigmaTemperature RaumsollHK1;
leihen 0:4873b21e0bca 91 ParadigmaTemperature RaumsollHK2;
leihen 0:4873b21e0bca 92 ParadigmaTemperature VorlaufsollHK1;
leihen 0:4873b21e0bca 93 ParadigmaTemperature VorlaufsollHK2;
leihen 0:4873b21e0bca 94 ParadigmaTemperature Warmwassersolltemp;
leihen 0:4873b21e0bca 95 ParadigmaTemperature Puffersolltemp;
leihen 0:4873b21e0bca 96 __packed struct {
leihen 0:4873b21e0bca 97 word PHK1:1;
leihen 0:4873b21e0bca 98 word PHK2:1;
leihen 0:4873b21e0bca 99 word PK:1;
leihen 0:4873b21e0bca 100 word Mischer1Auf:1;
leihen 0:4873b21e0bca 101 word Mischer1Zu:1;
leihen 0:4873b21e0bca 102 word Mischer2Auf:1;
leihen 0:4873b21e0bca 103 word Mischer2Zu:1;
leihen 0:4873b21e0bca 104 word ULV:1;
leihen 0:4873b21e0bca 105 word PZ:1;
leihen 0:4873b21e0bca 106 word B1:1;
leihen 0:4873b21e0bca 107 word Taster:1;
leihen 0:4873b21e0bca 108 word LONModul:1;
leihen 0:4873b21e0bca 109 word OTModul:1;
leihen 0:4873b21e0bca 110 word reserver:3;
leihen 0:4873b21e0bca 111 } ZustandAusgaenge;
leihen 0:4873b21e0bca 112 ParadigmaDword BetriebsstundenKessel;
leihen 0:4873b21e0bca 113 ParadigmaDword AnzahlKesselstarts;
leihen 0:4873b21e0bca 114 ParadigmaWord StoercodeKessel;
leihen 0:4873b21e0bca 115 byte StoercodeFuehler;
leihen 0:4873b21e0bca 116 byte BetriebsartHK1;
leihen 0:4873b21e0bca 117 byte NiveauHK1;
leihen 0:4873b21e0bca 118 byte BetriebsartHK2;
leihen 0:4873b21e0bca 119 byte NiveauHK2;
leihen 0:4873b21e0bca 120 byte LeistungPHK1;
leihen 0:4873b21e0bca 121 byte LeistungPHK2;
leihen 0:4873b21e0bca 122 byte LeistungPK;
leihen 1:9c48326ad8c9 123
leihen 1:9c48326ad8c9 124 byte Checksumme;
leihen 0:4873b21e0bca 125 } MonDta2_t;
leihen 0:4873b21e0bca 126
leihen 0:4873b21e0bca 127
leihen 0:4873b21e0bca 128 /** Class ParadigmaMonitorData encapsulates the data representation and parsing of the
leihen 0:4873b21e0bca 129 * data blocks that are being sent by the paradigma heater. The class also provides
leihen 0:4873b21e0bca 130 * a stream type functionality to detect and parse the data from a stream of chars.
leihen 0:4873b21e0bca 131 */
leihen 0:4873b21e0bca 132 class ParadigmaMonitorData
leihen 0:4873b21e0bca 133 {
leihen 2:27334bd6dc28 134 FunctionPointer m_CallbackData1;
leihen 2:27334bd6dc28 135 FunctionPointer m_CallbackData2;
leihen 1:9c48326ad8c9 136
leihen 1:9c48326ad8c9 137 MonDta1_t m_Data1;
leihen 1:9c48326ad8c9 138 MonDta2_t m_Data2;
leihen 1:9c48326ad8c9 139
leihen 1:9c48326ad8c9 140 ParadigmaBlockHeader_t m_Header;
leihen 1:9c48326ad8c9 141 ParadigmaDatasetType_t m_activeDataBlock;
leihen 1:9c48326ad8c9 142 int m_actualPos;
leihen 1:9c48326ad8c9 143 char m_checksum;
leihen 1:9c48326ad8c9 144
leihen 1:9c48326ad8c9 145 void invalidateHeader();
leihen 2:27334bd6dc28 146 void callBack1() {
leihen 2:27334bd6dc28 147 m_CallbackData1.call();
leihen 2:27334bd6dc28 148 }
leihen 2:27334bd6dc28 149 void callBack2() {
leihen 2:27334bd6dc28 150 m_CallbackData2.call();
leihen 1:9c48326ad8c9 151 }
leihen 1:9c48326ad8c9 152 word swapWord(word d) {
leihen 1:9c48326ad8c9 153 return ((d&0xFF)<<8) | ((d>>8)&0xFF);
leihen 1:9c48326ad8c9 154 }
leihen 1:9c48326ad8c9 155 ulong swapDWord(ulong d) {
leihen 1:9c48326ad8c9 156 return ((d>>24)&0xFF) | ((d>>8)&0x0000FF00) | ((d<<8)&0x00FF0000) | ((d<<24)&0xFF000000);
leihen 1:9c48326ad8c9 157 }
leihen 1:9c48326ad8c9 158 public:
leihen 1:9c48326ad8c9 159 /** Public constructor. Will initialize all internal data and variables. */
leihen 1:9c48326ad8c9 160 ParadigmaMonitorData(): m_checksum(0) {
leihen 1:9c48326ad8c9 161 memset(&m_Data1, 0, sizeof(m_Data1));
leihen 1:9c48326ad8c9 162 memset(&m_Data2, 0, sizeof(m_Data2));
leihen 1:9c48326ad8c9 163 invalidateHeader();
leihen 1:9c48326ad8c9 164 }
leihen 1:9c48326ad8c9 165 /** Access function to get the transmitted date time object.
leihen 1:9c48326ad8c9 166 * @returns : the date and time objects of the transmitted data.
leihen 1:9c48326ad8c9 167 */
leihen 1:9c48326ad8c9 168 ParadigmaDateTime getDateTime() {
leihen 1:9c48326ad8c9 169 return m_Data1.DateTime;
leihen 1:9c48326ad8c9 170 }
leihen 1:9c48326ad8c9 171 /** Access function to the Outside air temperature (AUSSENTEMP).
leihen 1:9c48326ad8c9 172 * @returns : the outside air temperature.
leihen 1:9c48326ad8c9 173 */
leihen 1:9c48326ad8c9 174 ParadigmaTemperature getAussentemp() {
leihen 1:9c48326ad8c9 175 return m_Data1.Aussentemp;
leihen 1:9c48326ad8c9 176 }
leihen 1:9c48326ad8c9 177 /** Access function to the warm water temperature (WARMWASSERTEMP).
leihen 1:9c48326ad8c9 178 * @returns : the warm water temperature.
leihen 1:9c48326ad8c9 179 */
leihen 1:9c48326ad8c9 180 ParadigmaTemperature getWarmwassertemp() {
leihen 1:9c48326ad8c9 181 return m_Data1.Warmwassertemp;
leihen 1:9c48326ad8c9 182 }
leihen 1:9c48326ad8c9 183 /** Access function to the 'kessel vorlauf' temperature.
leihen 1:9c48326ad8c9 184 * @returns : the temperature of the 'kessel vorlauf'.
leihen 1:9c48326ad8c9 185 */
leihen 1:9c48326ad8c9 186 ParadigmaTemperature getKesselvorlauf() {
leihen 1:9c48326ad8c9 187 return m_Data1.Kesselvorlauf;
leihen 1:9c48326ad8c9 188 }
leihen 1:9c48326ad8c9 189 /** Access function to the 'kessel ruecklauf' temperature.
leihen 1:9c48326ad8c9 190 * @returns : the temperature of the 'kessel ruecklauf'.
leihen 1:9c48326ad8c9 191 */
leihen 1:9c48326ad8c9 192 ParadigmaTemperature getKesselruecklauf() {
leihen 1:9c48326ad8c9 193 return m_Data1.Kesselruecklauf;
leihen 1:9c48326ad8c9 194 }
leihen 1:9c48326ad8c9 195 /** Access function to the room temperature of heating circuit 1.
leihen 1:9c48326ad8c9 196 * @returns : the room temperature of heating circuit 1.
leihen 1:9c48326ad8c9 197 */
leihen 1:9c48326ad8c9 198 ParadigmaTemperature getRaumtemperaturHK1() {
leihen 1:9c48326ad8c9 199 return m_Data1.RaumtemperaturHK1;
leihen 1:9c48326ad8c9 200 }
leihen 1:9c48326ad8c9 201 /** Access function to the room temperature of heating circuit 2.
leihen 1:9c48326ad8c9 202 * @returns : the room temperature of heating circuit 2.
leihen 1:9c48326ad8c9 203 */
leihen 1:9c48326ad8c9 204 ParadigmaTemperature getRaumtemperaturHK2() {
leihen 1:9c48326ad8c9 205 return m_Data1.RaumtemperaturHK2;
leihen 1:9c48326ad8c9 206 }
leihen 1:9c48326ad8c9 207 ParadigmaTemperature getVorlauftemperaturHK1() {
leihen 1:9c48326ad8c9 208 return m_Data1.VorlauftemperaturHK1;
leihen 1:9c48326ad8c9 209 }
leihen 1:9c48326ad8c9 210 ParadigmaTemperature getVorlauftemperaturHK2() {
leihen 1:9c48326ad8c9 211 return m_Data1.VorlauftemperaturHK2;
leihen 1:9c48326ad8c9 212 }
leihen 1:9c48326ad8c9 213 ParadigmaTemperature getRuecklauftemperaturHK1() {
leihen 1:9c48326ad8c9 214 return m_Data1.RuecklauftemperaturHK1;
leihen 1:9c48326ad8c9 215 }
leihen 1:9c48326ad8c9 216 ParadigmaTemperature getRuecklauftemperaturHK2() {
leihen 1:9c48326ad8c9 217 return m_Data1.RuecklauftemperaturHK2;
leihen 1:9c48326ad8c9 218 }
leihen 1:9c48326ad8c9 219 ParadigmaTemperature getPuffertemperaturOben() {
leihen 1:9c48326ad8c9 220 return m_Data1.PuffertemperaturOben;
leihen 1:9c48326ad8c9 221 }
leihen 1:9c48326ad8c9 222 ParadigmaTemperature getPuffertemperaturUnten() {
leihen 1:9c48326ad8c9 223 return m_Data1.PuffertemperaturUnten;
leihen 1:9c48326ad8c9 224 }
leihen 1:9c48326ad8c9 225 ParadigmaTemperature getZirkulationstemperatur() {
leihen 1:9c48326ad8c9 226 return m_Data1.Zirkulationstemperatur;
leihen 1:9c48326ad8c9 227 }
leihen 1:9c48326ad8c9 228
leihen 1:9c48326ad8c9 229 ParadigmaTemperature getRaumsollHK1() {
leihen 1:9c48326ad8c9 230 return m_Data2.RaumsollHK1;
leihen 1:9c48326ad8c9 231 }
leihen 1:9c48326ad8c9 232 ParadigmaTemperature getRaumsollHK2() {
leihen 1:9c48326ad8c9 233 return m_Data2.RaumsollHK2;
leihen 1:9c48326ad8c9 234 }
leihen 1:9c48326ad8c9 235 ParadigmaTemperature getVorlaufsollHK1() {
leihen 1:9c48326ad8c9 236 return m_Data2.VorlaufsollHK1;
leihen 1:9c48326ad8c9 237 }
leihen 1:9c48326ad8c9 238 ParadigmaTemperature getVorlaufsollHK2() {
leihen 1:9c48326ad8c9 239 return m_Data2.VorlaufsollHK2;
leihen 1:9c48326ad8c9 240 }
leihen 1:9c48326ad8c9 241 ParadigmaTemperature getWarmwassersolltemp() {
leihen 1:9c48326ad8c9 242 return m_Data2.Warmwassersolltemp;
leihen 1:9c48326ad8c9 243 }
leihen 1:9c48326ad8c9 244 ParadigmaTemperature getPuffersolltemp() {
leihen 1:9c48326ad8c9 245 return m_Data2.Puffersolltemp;
leihen 1:9c48326ad8c9 246 }
leihen 1:9c48326ad8c9 247
leihen 1:9c48326ad8c9 248 /** Function will let the user select the temperature to be returned.
leihen 1:9c48326ad8c9 249 * @param sel : Will specify which temperature value to return.
leihen 1:9c48326ad8c9 250 * @returns : the temperature object as selected by param sel.
leihen 1:9c48326ad8c9 251 */
leihen 1:9c48326ad8c9 252 ParadigmaTemperature getTemperature(ParadigmaTemperatureSelector_t sel);
leihen 1:9c48326ad8c9 253
leihen 1:9c48326ad8c9 254 ulong getBetriebsstundenKessel() {
leihen 1:9c48326ad8c9 255 return (ulong)m_Data2.BetriebsstundenKessel;
leihen 1:9c48326ad8c9 256 }
leihen 1:9c48326ad8c9 257 ulong getAnzahlKesselstarts() {
leihen 1:9c48326ad8c9 258 return (ulong)m_Data2.AnzahlKesselstarts;
leihen 1:9c48326ad8c9 259 }
leihen 1:9c48326ad8c9 260 word getStoercodeKessel() {
leihen 1:9c48326ad8c9 261 return (word)m_Data2.StoercodeKessel;
leihen 1:9c48326ad8c9 262 }
leihen 1:9c48326ad8c9 263 byte getStoercodeFuehler() {
leihen 1:9c48326ad8c9 264 return (byte)m_Data2.StoercodeFuehler;
leihen 1:9c48326ad8c9 265 }
leihen 1:9c48326ad8c9 266
leihen 1:9c48326ad8c9 267
leihen 1:9c48326ad8c9 268 ParadigmaMonitorData& operator<<( char c );
leihen 1:9c48326ad8c9 269 ParadigmaMonitorData& operator<<( char Buffer[] );
leihen 1:9c48326ad8c9 270
leihen 2:27334bd6dc28 271 void attach1( void (*fct)(void) ) {
leihen 2:27334bd6dc28 272 m_CallbackData1.attach(fct);
leihen 2:27334bd6dc28 273 }
leihen 2:27334bd6dc28 274 void attach2( void (*fct)(void) ) {
leihen 2:27334bd6dc28 275 m_CallbackData2.attach(fct);
leihen 1:9c48326ad8c9 276 }
leihen 1:9c48326ad8c9 277
leihen 1:9c48326ad8c9 278 template<typename T>
leihen 2:27334bd6dc28 279 void attach1(T* p, void (T::*mptr)(void)) {
leihen 2:27334bd6dc28 280 m_CallbackData1.attach(p, mptr);
leihen 1:9c48326ad8c9 281 }
leihen 2:27334bd6dc28 282 template<typename T>
leihen 2:27334bd6dc28 283 void attach2(T* p, void (T::*mptr)(void)) {
leihen 2:27334bd6dc28 284 m_CallbackData2.attach(p, mptr);
leihen 2:27334bd6dc28 285 }
leihen 2:27334bd6dc28 286
leihen 2:27334bd6dc28 287 MonDta1_t * getData1() { return &m_Data1; }
leihen 2:27334bd6dc28 288 MonDta2_t * getData2() { return &m_Data2; }
leihen 0:4873b21e0bca 289 };
leihen 1:9c48326ad8c9 290 }
leihen 0:4873b21e0bca 291 #endif