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

Committer:
leihen
Date:
Sat Jun 22 10:59:05 2013 +0000
Revision:
0:4873b21e0bca
Child:
1:9c48326ad8c9
Fixes

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