]> git.basschouten.com Git - openhab-addons.git/blob
290a9c8aad73a43383d8f43012ad1013d76cb9ba
[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.LOWBYTE, 0, "fault", CodeType.B),
45                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 1, "ch_mode", CodeType.B),
46                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 2, "dhw_mode", CodeType.B),
47                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 3, "flame", CodeType.B),
48                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 4, "cooling", CodeType.B),
49                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 5, "ch2E", CodeType.B),
50                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 6, "diag", CodeType.B) });
51         g.put(1, new DataItem[] { new FloatDataItem(Msg.WRITE, "controlsetpoint", SIUnits.CELSIUS, CodeType.B),
52                 new FloatDataItem(Msg.WRITE, "controlsetpointrequested", SIUnits.CELSIUS, CodeType.T),
53                 new FloatDataItem(Msg.WRITE, "controlsetpointoverride", SIUnits.CELSIUS, CodeType.R) });
54         g.put(2, new DataItem[] { new UIntDataItem(Msg.WRITE, ByteType.LOWBYTE, "mastermemberid") });
55         g.put(3, new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "dhwpresent"),
56                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 1, "controltype"),
57                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 2, "coolingsupport"),
58                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 3, "dhwconfig"),
59                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 4, "masterlowoff"),
60                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 5, "ch2present"),
61                 new UIntDataItem(Msg.READ, ByteType.LOWBYTE, "slavememberid") });
62         g.put(4, new DataItem[] { new UIntDataItem(Msg.WRITE, ByteType.HIGHBYTE, "commandcode"),
63                 new UIntDataItem(Msg.READ, ByteType.LOWBYTE, "commandresponse") });
64         g.put(5, new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "servicerequest"),
65                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 1, "lockout-reset"),
66                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 2, "lowwaterpress"),
67                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 3, "gasflamefault"),
68                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 4, "airpressfault"),
69                 new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 5, "waterovtemp"),
70                 new IntDataItem(Msg.READ, ByteType.LOWBYTE, "oemfaultcode") });
71         g.put(7, new DataItem[] { new FloatDataItem(Msg.WRITE, "coolingcontrolsignal") });
72         g.put(8, new DataItem[] { new FloatDataItem(Msg.WRITE, "controlsetpoint2", SIUnits.CELSIUS, CodeType.B),
73                 new FloatDataItem(Msg.WRITE, "controlsetpoint2requested", SIUnits.CELSIUS, CodeType.T),
74                 new FloatDataItem(Msg.WRITE, "controlsetpoint2override", SIUnits.CELSIUS, CodeType.R) });
75         g.put(9, new DataItem[] { new FloatDataItem(Msg.READ, "overridesetpoint") });
76         g.put(10, new DataItem[] { new TspFhbSizeDataItem(Msg.WRITE, ByteType.HIGHBYTE, 11, "tspnumber") });
77         g.put(11, new DataItem[] { new TspFhbValueDataItem(Msg.READWRITE, "tspentry") });
78         g.put(12, new DataItem[] { new TspFhbSizeDataItem(Msg.READ, ByteType.HIGHBYTE, 13, "fhbnumber") });
79         g.put(13, new DataItem[] { new TspFhbValueDataItem(Msg.READ, "fhbentry") });
80         g.put(14, new DataItem[] { new FloatDataItem(Msg.READ, "maxrelmdulevel", Units.PERCENT) });
81         g.put(15, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.HIGHBYTE, "maxcapkw"),
82                 new UIntDataItem(Msg.READ, ByteType.LOWBYTE, "maxcapprc") });
83         g.put(16, new DataItem[] { new FloatDataItem(Msg.WRITE, "roomsetpoint", SIUnits.CELSIUS) });
84         g.put(17, new DataItem[] { new FloatDataItem(Msg.READ, "modulevel", Units.PERCENT) });
85         g.put(18, new DataItem[] { new FloatDataItem(Msg.READ, "waterpressure", Units.BAR) });
86         g.put(19, new DataItem[] { new FloatDataItem(Msg.READ, "dhwflow") });
87         g.put(20, new DataItem[] { new UIntDataItem(Msg.READWRITE, ByteType.BOTH, "dowtod") });
88         g.put(21, new DataItem[] { new UIntDataItem(Msg.READWRITE, ByteType.HIGHBYTE, "month"),
89                 new UIntDataItem(Msg.READWRITE, ByteType.LOWBYTE, "day") });
90         g.put(22, new DataItem[] { new UIntDataItem(Msg.READWRITE, ByteType.BOTH, "year") });
91         g.put(23, new DataItem[] { new FloatDataItem(Msg.WRITE, "setpointch2") });
92         g.put(24, new DataItem[] { new FloatDataItem(Msg.WRITE, "roomtemp", SIUnits.CELSIUS) });
93         g.put(25, new DataItem[] { new FloatDataItem(Msg.READ, "flowtemp", SIUnits.CELSIUS) });
94         g.put(26, new DataItem[] { new FloatDataItem(Msg.READ, "dhwtemp", SIUnits.CELSIUS) });
95         g.put(27, new DataItem[] { new FloatDataItem(Msg.READ, "outsidetemp", SIUnits.CELSIUS) });
96         g.put(28, new DataItem[] { new FloatDataItem(Msg.READ, "returntemp", SIUnits.CELSIUS) });
97
98         g.put(29, new DataItem[] { new FloatDataItem(Msg.READ, "ss_temperature") });
99         g.put(30, new DataItem[] { new FloatDataItem(Msg.READ, "ss_collectortemperature") });
100
101         g.put(31, new DataItem[] { new FloatDataItem(Msg.READ, "flowtemp2") });
102         g.put(32, new DataItem[] { new FloatDataItem(Msg.READ, "dhw2temp") });
103         g.put(33, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "exhausttemp") });
104         g.put(48, new DataItem[] { new IntDataItem(Msg.READ, ByteType.HIGHBYTE, "tdhwsetu"),
105                 new IntDataItem(Msg.READ, ByteType.LOWBYTE, "tdhwsetl") });
106         g.put(49, new DataItem[] { new IntDataItem(Msg.READ, ByteType.HIGHBYTE, "maxchu"),
107                 new IntDataItem(Msg.READ, ByteType.LOWBYTE, "maxchl") });
108         g.put(50, new DataItem[] { new IntDataItem(Msg.READ, ByteType.HIGHBYTE, "otcu"),
109                 new IntDataItem(Msg.READ, ByteType.LOWBYTE, "otcl") });
110         g.put(56, new DataItem[] { new FloatDataItem(Msg.READWRITE, "tdhwset", SIUnits.CELSIUS) });
111         g.put(57, new DataItem[] { new FloatDataItem(Msg.READWRITE, "tchmax") });
112         g.put(58, new DataItem[] { new FloatDataItem(Msg.READWRITE, "otchcratio") });
113         g.put(70,
114                 new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "vh_ventilationenable"),
115                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 1, "vh_bypassposition"),
116                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 2, "vh_bypassmode"),
117                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 3, "vh_freeventilationmode"),
118                         new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 0, "vh_faultindication"),
119                         new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 1, "vh_ventilationmode"),
120                         new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 2, "vh_bypassstatus"),
121                         new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 3, "vh_bypassautomaticstatus"),
122                         new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 4, "vh_freeventilationstatus"),
123                         new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 5, "vh_filtercheck"),
124                         new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 6, "vh_diagnosticindication") });
125         g.put(71, new DataItem[] { new UIntDataItem(Msg.WRITE, ByteType.LOWBYTE, "vh_controlsetpoint") });
126         g.put(72,
127                 new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "vh_servicerequest"),
128                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 1, "vh_exhaustfanfault"),
129                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 2, "vh_inletfanfault"),
130                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 3, "vh_frostprotection"),
131                         new UIntDataItem(Msg.READ, ByteType.LOWBYTE, "vh_faultcode") });
132         g.put(73, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "vh_diagnosticcode") });
133         g.put(74,
134                 new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "vh_systemtype"),
135                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 1, "vh_bypass"),
136                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 2, "vh_speedcontrol"),
137                         new UIntDataItem(Msg.READ, ByteType.LOWBYTE, "vh_memberid") });
138         g.put(75, new DataItem[] { new FloatDataItem(Msg.READ, "vh_openthermversion") });
139         g.put(76, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "vh_versiontype") });
140         g.put(77, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "vh_relativeventilation") });
141         g.put(78, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "vh_relativehumidity") });
142         g.put(79, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "vh_co2level") });
143         g.put(80, new DataItem[] { new FloatDataItem(Msg.READ, "vh_supplyinlettemp") });
144         g.put(81, new DataItem[] { new FloatDataItem(Msg.READ, "vh_supplyoutlettemp") });
145         g.put(82, new DataItem[] { new FloatDataItem(Msg.READ, "vh_exhaustinlettemp") });
146         g.put(83, new DataItem[] { new FloatDataItem(Msg.READ, "vh_exhaustoutlettemp") });
147         g.put(84, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "vh_actualexhaustfanspeed") });
148         g.put(85, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "vh_actualinletfanspeed") });
149         g.put(86, new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "vh_nominalventenable"),
150                 new FlagDataItem(Msg.READ, ByteType.LOWBYTE, 0, "vh_nominalventrw") });
151         g.put(87, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.HIGHBYTE, "vh_nominalventilationvalue") });
152         g.put(88, new DataItem[] { new TspFhbSizeDataItem(Msg.READ, ByteType.HIGHBYTE, 89, "vh_tspnumber") });
153         g.put(89, new DataItem[] { new TspFhbValueDataItem(Msg.READ, "vh_tspentry") });
154         g.put(90, new DataItem[] { new TspFhbSizeDataItem(Msg.READ, ByteType.HIGHBYTE, 91, "vh_fhbnumber") });
155         g.put(91, new DataItem[] { new TspFhbValueDataItem(Msg.READ, "vh_fhbentry") });
156         g.put(100,
157                 new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "rof0"),
158                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 1, "rof1"),
159                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 2, "rof2"),
160                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 3, "rof3"),
161                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 4, "rof4"),
162                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 5, "rof5"),
163                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 6, "rof6"),
164                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 7, "rof7") });
165
166         g.put(101,
167                 new DataItem[] { new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 0, "rof0"),
168                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 1, "rof1"),
169                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 2, "rof2"),
170                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 3, "rof3"),
171                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 4, "rof4"),
172                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 5, "rof5"),
173                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 6, "rof6"),
174                         new FlagDataItem(Msg.READ, ByteType.HIGHBYTE, 7, "rof7") });
175         g.put(102, new DataItem[] {});
176
177         g.put(105, new DataItem[] { new TspFhbSizeDataItem(Msg.READ, ByteType.HIGHBYTE, 106, "ss_tspnumber") });
178         g.put(106, new DataItem[] { new TspFhbValueDataItem(Msg.READ, "ss_tspentry") });
179
180         g.put(107, new DataItem[] { new TspFhbSizeDataItem(Msg.READ, ByteType.HIGHBYTE, 108, "ss_fhbnumber") });
181         g.put(108, new DataItem[] { new TspFhbValueDataItem(Msg.READ, "ss_fhbentry") });
182         g.put(113, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "unsuccessfulburnerstarts") });
183         g.put(115, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "oemdiagcode") });
184         g.put(116, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "burnerstarts") });
185         g.put(117, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "chpumpstarts") });
186         g.put(118, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "dhwpvstarts") });
187         g.put(119, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "dhwburnerstarts") });
188         g.put(120, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "burnerhours", Units.HOUR) });
189         g.put(121, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "chpumphours", Units.HOUR) });
190         g.put(122, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "dhwpvhours", Units.HOUR) });
191         g.put(123, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.BOTH, "dhwburnerhours", Units.HOUR) });
192         g.put(124, new DataItem[] { new FloatDataItem(Msg.WRITE, "masterotversion") });
193         g.put(125, new DataItem[] { new FloatDataItem(Msg.READ, "slaveotversion") });
194         g.put(126, new DataItem[] { new UIntDataItem(Msg.WRITE, ByteType.HIGHBYTE, "masterproducttype"),
195                 new UIntDataItem(Msg.WRITE, ByteType.LOWBYTE, "masterproductversion") });
196         g.put(127, new DataItem[] { new UIntDataItem(Msg.READ, ByteType.HIGHBYTE, "slaveproducttype"),
197                 new UIntDataItem(Msg.READ, ByteType.LOWBYTE, "slaveproductversion") });
198
199         return g;
200     }
201 }