]> git.basschouten.com Git - openhab-addons.git/blob
7e7339ee6e6f3bcf0e759e7b56a403aad66bc4b5
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
7  * This program and the accompanying materials are made available under the
8  * terms of the Eclipse Public License 2.0 which is available at
9  * http://www.eclipse.org/legal/epl-2.0
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.openthermgateway.internal;
14
15 import java.util.HashMap;
16 import java.util.Map;
17
18 import org.eclipse.jdt.annotation.NonNullByDefault;
19 import org.openhab.core.library.unit.SIUnits;
20 import org.openhab.core.library.unit.Units;
21
22 /**
23  * The {@link DataItemGroup} represents a list of all possible DataItem messages within the OpenTherm specification.
24  *
25  * @author Arjen Korevaar - Initial contribution
26  */
27 @NonNullByDefault
28 public class DataItemGroup {
29
30     public static final Map<Integer, DataItem[]> DATAITEMGROUPS = createDataItemGroups();
31
32     private static Map<Integer, DataItem[]> createDataItemGroups() {
33         HashMap<Integer, DataItem[]> g = new HashMap<>();
34
35         g.put(0, new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "ch_enable", CodeType.B),
36                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "ch_enablerequested", CodeType.T),
37                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "ch_enableoverride", CodeType.R),
38                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 1, "dhw_enable", CodeType.B),
39                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 2, "cooling_enabled", CodeType.B),
40                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 3, "otc_active", CodeType.B),
41                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 4, "ch2_enable", CodeType.B),
42                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 4, "ch2_enablerequested", CodeType.T),
43                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 4, "ch2_enableoverride", CodeType.R),
44                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 5, "0x00:5", CodeType.B),
45                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 6, "0x00:6", CodeType.B),
46                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 7, "0x00:7", CodeType.B),
47                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 0, "fault", CodeType.B),
48                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 1, "ch_mode", CodeType.B),
49                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 2, "dhw_mode", CodeType.B),
50                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 3, "flame", CodeType.B),
51                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 4, "cooling", CodeType.B),
52                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 5, "ch2E", CodeType.B),
53                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 6, "diag", CodeType.B),
54                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 7, "0x00:7", CodeType.B) });
55         g.put(1, new DataItem[] { new FloatDataItem(Msg.WRITE, "controlsetpoint", SIUnits.CELSIUS, CodeType.B),
56                 new FloatDataItem(Msg.WRITE, "controlsetpointrequested", SIUnits.CELSIUS, CodeType.T),
57                 new FloatDataItem(Msg.WRITE, "controlsetpointoverride", SIUnits.CELSIUS, CodeType.R) });
58         g.put(2, new DataItem[] { new FlagDataItem(Msg.WRITE, ByteType.HIGHBYTE, 0, "0x02:0"),
59                 new FlagDataItem(Msg.WRITE, ByteType.HIGHBYTE, 1, "0x02:1"),
60                 new FlagDataItem(Msg.WRITE, ByteType.HIGHBYTE, 2, "0x02:2"),
61                 new FlagDataItem(Msg.WRITE, ByteType.HIGHBYTE, 3, "0x02:3"),
62                 new FlagDataItem(Msg.WRITE, ByteType.HIGHBYTE, 4, "0x02:4"),
63                 new FlagDataItem(Msg.WRITE, ByteType.HIGHBYTE, 5, "0x02:5"),
64                 new FlagDataItem(Msg.WRITE, ByteType.HIGHBYTE, 6, "0x02:6"),
65                 new FlagDataItem(Msg.WRITE, ByteType.HIGHBYTE, 7, "0x02:7"),
66                 new UIntDataItem(Msg.WRITE, ByteType.LOWBYTE, "mastermemberid") });
67         g.put(3, new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "dhwpresent"),
68                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 1, "controltype"),
69                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 2, "coolingsupport"),
70                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 3, "dhwconfig"),
71                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 4, "masterlowoff"),
72                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 5, "ch2present"),
73                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 6, "0x03:6"),
74                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 7, "0x03:7"),
75                 new UIntDataItem(Msg.READ, ByteType.LOWBYTE, "slavememberid") });
76         g.put(4, new DataItem[] { new UIntDataItem(Msg.WRITE, ByteType.HIGHBYTE, "commandcode"),
77                 new UIntDataItem(Msg.READ, ByteType.LOWBYTE, "commandresponse") });
78         g.put(5, new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "servicerequest"),
79                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 1, "lockout-reset"),
80                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 2, "lowwaterpress"),
81                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 3, "gasflamefault"),
82                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 4, "airpressfault"),
83                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 5, "waterovtemp"),
84                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 6, "0x05:6"),
85                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 7, "0x05:7"),
86                 new IntDataItem(Msg.READ, ByteType.LOWBYTE, "oemfaultcode") });
87         g.put(6, new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "0x06:h0"),
88                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 1, "0x06:h1"),
89                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 2, "0x06:h2"),
90                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 3, "0x06:h3"),
91                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 4, "0x06:h4"),
92                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 5, "0x06:h5"),
93                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 6, "0x06:h6"),
94                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 7, "0x06:h7"),
95                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 0, "0x06:l0"),
96                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 1, "0x06:l1"),
97                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 2, "0x06:l2"),
98                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 3, "0x06:l3"),
99                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 4, "0x06:l4"),
100                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 5, "0x06:l5"),
101                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 6, "0x06:l6"),
102                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 7, "0x06:l7") });
103         g.put(7, new DataItem[] { new FloatDataItem(Msg.WRITE, "coolingcontrolsignal") });
104         g.put(8, new DataItem[] { new FloatDataItem(Msg.WRITE, "controlsetpoint2", SIUnits.CELSIUS, CodeType.B),
105                 new FloatDataItem(Msg.WRITE, "controlsetpoint2requested", SIUnits.CELSIUS, CodeType.T),
106                 new FloatDataItem(Msg.WRITE, "controlsetpoint2override", SIUnits.CELSIUS, CodeType.R) });
107         g.put(9, new DataItem[] { new FloatDataItem(Msg.READ, "overridesetpoint") });
108         g.put(10, new DataItem[] { new TspFhbSizeDataItem(Msg.WRITE, ByteType.HIGHBYTE, 11, "tspnumber") });
109         g.put(11, new DataItem[] { new TspFhbValueDataItem(Msg.READWRITE, "tspentry") });
110         g.put(12, new DataItem[] { new TspFhbSizeDataItem(Msg.READ, ByteType.HIGHBYTE, 13, "fhbnumber") });
111         g.put(13, new DataItem[] { new TspFhbValueDataItem(Msg.READ, "fhbentry") });
112         g.put(14, new DataItem[] { new FloatDataItem(Msg.READ, "maxrelmdulevel", Units.PERCENT) });
113         g.put(15, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.HIGHBYTE, "maxcapkw"),
114                 new UIntDataItem(Msg.READ, ByteType.LOWBYTE, "maxcapprc") });
115         g.put(16, new DataItem[] { new FloatDataItem(Msg.WRITE, "roomsetpoint", SIUnits.CELSIUS) });
116         g.put(17, new DataItem[] { new FloatDataItem(Msg.READ, "modulevel", Units.PERCENT) });
117         g.put(18, new DataItem[] { new FloatDataItem(Msg.READ, "waterpressure", Units.BAR) });
118         g.put(19, new DataItem[] { new FloatDataItem(Msg.READ, "dhwflow") });
119         g.put(20, new DataItem[] { new UIntDataItem(Msg.READWRITE, ByteType.BOTH, "dowtod") });
120         g.put(21, new DataItem[] { new UIntDataItem(Msg.READWRITE, ByteType.HIGHBYTE, "month"),
121                 new UIntDataItem(Msg.READWRITE, ByteType.LOWBYTE, "day") });
122         g.put(22, new DataItem[] { new UIntDataItem(Msg.READWRITE, ByteType.BOTH, "year") });
123         g.put(23, new DataItem[] { new FloatDataItem(Msg.WRITE, "setpointch2") });
124         g.put(24, new DataItem[] { new FloatDataItem(Msg.WRITE, "roomtemp", SIUnits.CELSIUS) });
125         g.put(25, new DataItem[] { new FloatDataItem(Msg.READ, "flowtemp", SIUnits.CELSIUS) });
126         g.put(26, new DataItem[] { new FloatDataItem(Msg.READ, "dhwtemp", SIUnits.CELSIUS) });
127         g.put(27, new DataItem[] { new FloatDataItem(Msg.READ, "outsidetemp", SIUnits.CELSIUS) });
128         g.put(28, new DataItem[] { new FloatDataItem(Msg.READ, "returntemp", SIUnits.CELSIUS) });
129
130         g.put(29, new DataItem[] { new FloatDataItem(Msg.READ, "ss_temperature") });
131         g.put(30, new DataItem[] { new FloatDataItem(Msg.READ, "ss_collectortemperature") });
132
133         g.put(31, new DataItem[] { new FloatDataItem(Msg.READ, "flowtemp2") });
134         g.put(32, new DataItem[] { new FloatDataItem(Msg.READ, "dhw2temp") });
135         g.put(33, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "exhausttemp") });
136         g.put(48, new DataItem[] { new IntDataItem(Msg.READ, ByteType.HIGHBYTE, "tdhwsetu"),
137                 new IntDataItem(Msg.READ, ByteType.LOWBYTE, "tdhwsetl") });
138         g.put(49, new DataItem[] { new IntDataItem(Msg.READ, ByteType.HIGHBYTE, "maxchu"),
139                 new IntDataItem(Msg.READ, ByteType.LOWBYTE, "maxchl") });
140         g.put(50, new DataItem[] { new IntDataItem(Msg.READ, ByteType.HIGHBYTE, "otcu"),
141                 new IntDataItem(Msg.READ, ByteType.LOWBYTE, "otcl") });
142         g.put(56, new DataItem[] { new FloatDataItem(Msg.READWRITE, "tdhwset", SIUnits.CELSIUS) });
143         g.put(57, new DataItem[] { new FloatDataItem(Msg.READWRITE, "tchmax") });
144         g.put(58, new DataItem[] { new FloatDataItem(Msg.READWRITE, "otchcratio") });
145         g.put(70,
146                 new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "vh_ventilationenable"),
147                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 1, "vh_bypassposition"),
148                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 2, "vh_bypassmode"),
149                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 3, "vh_freeventilationmode"),
150                         new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 0, "vh_faultindication"),
151                         new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 1, "vh_ventilationmode"),
152                         new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 2, "vh_bypassstatus"),
153                         new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 3, "vh_bypassautomaticstatus"),
154                         new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 4, "vh_freeventilationstatus"),
155                         new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 5, "vh_filtercheck"),
156                         new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 6, "vh_diagnosticindication") });
157         g.put(71, new DataItem[] { new UIntDataItem(Msg.WRITE, ByteType.LOWBYTE, "vh_controlsetpoint") });
158         g.put(72,
159                 new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "vh_servicerequest"),
160                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 1, "vh_exhaustfanfault"),
161                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 2, "vh_inletfanfault"),
162                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 3, "vh_frostprotection"),
163                         new UIntDataItem(Msg.READ, ByteType.LOWBYTE, "vh_faultcode") });
164         g.put(73, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "vh_diagnosticcode") });
165         g.put(74,
166                 new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "vh_systemtype"),
167                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 1, "vh_bypass"),
168                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 2, "vh_speedcontrol"),
169                         new UIntDataItem(Msg.READ, ByteType.LOWBYTE, "vh_memberid") });
170         g.put(75, new DataItem[] { new FloatDataItem(Msg.READ, "vh_openthermversion") });
171         g.put(76, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "vh_versiontype") });
172         g.put(77, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "vh_relativeventilation") });
173         g.put(78, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "vh_relativehumidity") });
174         g.put(79, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "vh_co2level") });
175         g.put(80, new DataItem[] { new FloatDataItem(Msg.READ, "vh_supplyinlettemp") });
176         g.put(81, new DataItem[] { new FloatDataItem(Msg.READ, "vh_supplyoutlettemp") });
177         g.put(82, new DataItem[] { new FloatDataItem(Msg.READ, "vh_exhaustinlettemp") });
178         g.put(83, new DataItem[] { new FloatDataItem(Msg.READ, "vh_exhaustoutlettemp") });
179         g.put(84, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "vh_actualexhaustfanspeed") });
180         g.put(85, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "vh_actualinletfanspeed") });
181         g.put(86, new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "vh_nominalventenable"),
182                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 0, "vh_nominalventrw") });
183         g.put(87, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.HIGHBYTE, "vh_nominalventilationvalue") });
184         g.put(88, new DataItem[] { new TspFhbSizeDataItem(Msg.READ, ByteType.HIGHBYTE, 89, "vh_tspnumber") });
185         g.put(89, new DataItem[] { new TspFhbValueDataItem(Msg.READ, "vh_tspentry") });
186         g.put(90, new DataItem[] { new TspFhbSizeDataItem(Msg.READ, ByteType.HIGHBYTE, 91, "vh_fhbnumber") });
187         g.put(91, new DataItem[] { new TspFhbValueDataItem(Msg.READ, "vh_fhbentry") });
188         g.put(100,
189                 new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "rof0"),
190                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 1, "rof1"),
191                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 2, "rof2"),
192                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 3, "rof3"),
193                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 4, "rof4"),
194                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 5, "rof5"),
195                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 6, "rof6"),
196                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 7, "rof7") });
197
198         g.put(101,
199                 new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "rof0"),
200                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 1, "rof1"),
201                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 2, "rof2"),
202                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 3, "rof3"),
203                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 4, "rof4"),
204                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 5, "rof5"),
205                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 6, "rof6"),
206                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 7, "rof7") });
207         g.put(102, new DataItem[] {});
208
209         g.put(105, new DataItem[] { new TspFhbSizeDataItem(Msg.READ, ByteType.HIGHBYTE, 106, "ss_tspnumber") });
210         g.put(106, new DataItem[] { new TspFhbValueDataItem(Msg.READ, "ss_tspentry") });
211
212         g.put(107, new DataItem[] { new TspFhbSizeDataItem(Msg.READ, ByteType.HIGHBYTE, 108, "ss_fhbnumber") });
213         g.put(108, new DataItem[] { new TspFhbValueDataItem(Msg.READ, "ss_fhbentry") });
214         g.put(113, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "unsuccessfulburnerstarts") });
215         g.put(115, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "oemdiagcode") });
216         g.put(116, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "burnerstarts") });
217         g.put(117, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "chpumpstarts") });
218         g.put(118, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "dhwpvstarts") });
219         g.put(119, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "dhwburnerstarts") });
220         g.put(120, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "burnerhours", Units.HOUR) });
221         g.put(121, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "chpumphours", Units.HOUR) });
222         g.put(122, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "dhwpvhours", Units.HOUR) });
223         g.put(123, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "dhwburnerhours", Units.HOUR) });
224         g.put(124, new DataItem[] { new FloatDataItem(Msg.WRITE, "masterotversion") });
225         g.put(125, new DataItem[] { new FloatDataItem(Msg.READ, "slaveotversion") });
226         g.put(126, new DataItem[] { new UIntDataItem(Msg.WRITE, ByteType.HIGHBYTE, "masterproducttype"),
227                 new UIntDataItem(Msg.WRITE, ByteType.LOWBYTE, "masterproductversion") });
228         g.put(127, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.HIGHBYTE, "slaveproducttype"),
229                 new UIntDataItem(Msg.READ, ByteType.LOWBYTE, "slaveproductversion") });
230
231         return g;
232     }
233 }