This library allows to parse and work with data sent by the Paradigma pelletti oven.
ParadigmaData.h@0:4873b21e0bca, 2013-06-22 (annotated)
- Committer:
- leihen
- Date:
- Sat Jun 22 10:59:05 2013 +0000
- Revision:
- 0:4873b21e0bca
- Child:
- 1:9c48326ad8c9
Fixes
Who changed what in which revision?
User | Revision | Line number | New 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 |