]> git.basschouten.com Git - openhab-addons.git/blob
b65df03387d7a56fd7e3e3924bae809d86b0ca0d
[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.rfxcom.internal.messages;
14
15 import static org.junit.jupiter.api.Assertions.*;
16 import static org.openhab.binding.rfxcom.internal.RFXComBindingConstants.*;
17 import static org.openhab.binding.rfxcom.internal.RFXComTestHelper.commandChannelUID;
18 import static org.openhab.binding.rfxcom.internal.messages.RFXComBaseMessage.PacketType.THERMOSTAT3;
19 import static org.openhab.binding.rfxcom.internal.messages.RFXComThermostat3Message.SubType.*;
20
21 import org.eclipse.jdt.annotation.NonNullByDefault;
22 import org.eclipse.jdt.annotation.Nullable;
23 import org.junit.jupiter.api.Test;
24 import org.openhab.binding.rfxcom.internal.RFXComTestHelper;
25 import org.openhab.binding.rfxcom.internal.config.RFXComGenericDeviceConfiguration;
26 import org.openhab.binding.rfxcom.internal.exceptions.RFXComException;
27 import org.openhab.core.library.types.OnOffType;
28 import org.openhab.core.library.types.StopMoveType;
29 import org.openhab.core.library.types.StringType;
30 import org.openhab.core.library.types.UpDownType;
31 import org.openhab.core.types.State;
32 import org.openhab.core.types.UnDefType;
33 import org.openhab.core.util.HexUtils;
34
35 /**
36  * Test for RFXCom-binding
37  *
38  * @author Martin van Wingerden - Initial contribution
39  */
40 @NonNullByDefault
41 public class RFXComThermostat3MessageTest {
42     private static RFXComGenericDeviceConfiguration config = new RFXComGenericDeviceConfiguration();
43
44     static {
45         config.deviceId = "106411";
46         config.subType = RFXComThermostat3Message.SubType.MERTIK__G6R_H4S_TRANSMIT_ONLY.toString();
47     }
48
49     private final MockDeviceState deviceState = new MockDeviceState();
50
51     @Test
52     public void checkForSupportTest() throws RFXComException {
53         RFXComMessageFactoryImpl.INSTANCE.createMessage(THERMOSTAT3, config, commandChannelUID, OnOffType.ON);
54     }
55
56     @Test
57     public void basicBoundaryCheck() throws RFXComException {
58         RFXComThermostat3Message message = (RFXComThermostat3Message) RFXComMessageFactoryImpl.INSTANCE
59                 .createMessage(THERMOSTAT3, config, commandChannelUID, OnOffType.ON);
60
61         RFXComTestHelper.basicBoundaryCheck(THERMOSTAT3, message);
62     }
63
64     @Test
65     public void testSomeMessages() throws RFXComException {
66         testMessage("08420101019FAB0280", MERTIK__G6R_H4TB__G6R_H4T__G6R_H4T21_Z22, 1, "106411",
67                 RFXComThermostat3Message.Commands.UP, (byte) 8, OnOffType.ON, null, UpDownType.UP,
68                 StringType.valueOf("UP"));
69         testMessage("084200000000410500", MERTIK__G6R_H4T1, 0, "65", RFXComThermostat3Message.Commands.RUN_DOWN,
70                 (byte) 0, OnOffType.OFF, null, UpDownType.DOWN, StringType.valueOf("RUN_DOWN"));
71     }
72
73     private void testMessage(String hexMessage, RFXComThermostat3Message.SubType subtype, int sequenceNumber,
74             String sensorId, RFXComThermostat3Message.Commands command, byte signalLevel, State commandChannel,
75             @Nullable State secondCommandChannel, State controlChannel, State commandStringChannel)
76             throws RFXComException {
77         byte[] message = HexUtils.hexToBytes(hexMessage);
78         RFXComThermostat3Message msg = (RFXComThermostat3Message) RFXComMessageFactoryImpl.INSTANCE
79                 .createMessage(message);
80         assertEquals(subtype, msg.subType, "SubType");
81         assertEquals(sequenceNumber, (short) (msg.seqNbr & 0xFF), "Seq Number");
82         assertEquals(sensorId, msg.getDeviceId(), "Sensor Id");
83         assertEquals(command, msg.command, CHANNEL_COMMAND);
84         assertEquals(signalLevel, msg.signalLevel, "Signal Level");
85
86         assertEquals(commandChannel, msg.convertToState(CHANNEL_COMMAND, config, deviceState));
87         assertEquals(secondCommandChannel, msg.convertToState(CHANNEL_COMMAND_SECOND, config, deviceState));
88         assertEquals(controlChannel, msg.convertToState(CHANNEL_CONTROL, config, deviceState));
89         assertEquals(commandStringChannel, msg.convertToState(CHANNEL_COMMAND_STRING, config, deviceState));
90
91         byte[] decoded = msg.decodeMessage();
92
93         assertEquals(hexMessage, HexUtils.bytesToHex(decoded), "Message converted back");
94     }
95
96     @Test
97     public void testCommandChannelOn() throws RFXComException {
98         RFXComThermostat3Message msg = new RFXComThermostat3Message();
99
100         msg.convertFromState(CHANNEL_COMMAND, OnOffType.ON);
101
102         assertEquals(OnOffType.ON, msg.convertToState(CHANNEL_COMMAND, config, deviceState));
103         assertEquals(OnOffType.ON, msg.convertToState(CHANNEL_CONTROL, config, deviceState));
104         assertEquals(StringType.valueOf("ON"), msg.convertToState(CHANNEL_COMMAND_STRING, config, deviceState));
105         assertNull(msg.convertToState(CHANNEL_COMMAND_SECOND, config, deviceState));
106     }
107
108     @Test
109     public void testCommandChannelOff() throws RFXComException {
110         RFXComThermostat3Message msg = new RFXComThermostat3Message();
111
112         msg.convertFromState(CHANNEL_COMMAND, OnOffType.OFF);
113
114         assertEquals(OnOffType.OFF, msg.convertToState(CHANNEL_COMMAND, config, deviceState));
115         assertEquals(OnOffType.OFF, msg.convertToState(CHANNEL_CONTROL, config, deviceState));
116         assertNull(msg.convertToState(CHANNEL_COMMAND_SECOND, config, deviceState));
117         assertEquals(StringType.valueOf("OFF"), msg.convertToState(CHANNEL_COMMAND_STRING, config, deviceState));
118     }
119
120     @Test
121     public void testSecondCommandChannelOn() throws RFXComException {
122         RFXComThermostat3Message msg = new RFXComThermostat3Message();
123
124         msg.convertFromState(CHANNEL_COMMAND_SECOND, OnOffType.ON);
125
126         assertNull(msg.convertToState(CHANNEL_COMMAND, config, deviceState));
127         assertEquals(OnOffType.ON, msg.convertToState(CHANNEL_COMMAND_SECOND, config, deviceState));
128         assertNull(msg.convertToState(CHANNEL_CONTROL, config, deviceState));
129         assertEquals(StringType.valueOf("SECOND_ON"), msg.convertToState(CHANNEL_COMMAND_STRING, config, deviceState));
130     }
131
132     @Test
133     public void testSecondCommandChannelOff() throws RFXComException {
134         RFXComThermostat3Message msg = new RFXComThermostat3Message();
135
136         msg.convertFromState(CHANNEL_COMMAND_SECOND, OnOffType.OFF);
137
138         assertNull(msg.convertToState(CHANNEL_COMMAND, config, deviceState));
139         assertEquals(OnOffType.OFF, msg.convertToState(CHANNEL_COMMAND_SECOND, config, deviceState));
140         assertNull(msg.convertToState(CHANNEL_CONTROL, config, deviceState));
141         assertEquals(StringType.valueOf("SECOND_OFF"), msg.convertToState(CHANNEL_COMMAND_STRING, config, deviceState));
142     }
143
144     @Test
145     public void testControlUp() throws RFXComException {
146         RFXComThermostat3Message msg = new RFXComThermostat3Message();
147
148         msg.convertFromState(CHANNEL_CONTROL, UpDownType.UP);
149
150         assertEquals(OnOffType.ON, msg.convertToState(CHANNEL_COMMAND, config, deviceState));
151         assertEquals(UpDownType.UP, msg.convertToState(CHANNEL_CONTROL, config, deviceState));
152         assertEquals(StringType.valueOf("UP"), msg.convertToState(CHANNEL_COMMAND_STRING, config, deviceState));
153
154         assertNull(msg.convertToState(CHANNEL_COMMAND_SECOND, config, deviceState));
155     }
156
157     @Test
158     public void testControlDown() throws RFXComException {
159         RFXComThermostat3Message msg = new RFXComThermostat3Message();
160
161         msg.convertFromState(CHANNEL_CONTROL, UpDownType.DOWN);
162
163         assertEquals(UnDefType.UNDEF, msg.convertToState(CHANNEL_COMMAND, config, deviceState));
164         assertEquals(UpDownType.DOWN, msg.convertToState(CHANNEL_CONTROL, config, deviceState));
165         assertEquals(StringType.valueOf("DOWN"), msg.convertToState(CHANNEL_COMMAND_STRING, config, deviceState));
166
167         assertNull(msg.convertToState(CHANNEL_COMMAND_SECOND, config, deviceState));
168     }
169
170     @Test
171     public void testControlStop() throws RFXComException {
172         RFXComThermostat3Message msg = new RFXComThermostat3Message();
173
174         msg.convertFromState(CHANNEL_CONTROL, StopMoveType.STOP);
175
176         assertEquals(UnDefType.UNDEF, msg.convertToState(CHANNEL_COMMAND, config, deviceState));
177         assertEquals(StringType.valueOf("STOP"), msg.convertToState(CHANNEL_COMMAND_STRING, config, deviceState));
178
179         assertNull(msg.convertToState(CHANNEL_CONTROL, config, deviceState));
180         assertNull(msg.convertToState(CHANNEL_COMMAND_SECOND, config, deviceState));
181     }
182
183     @Test
184     public void testCommandStringOff() throws RFXComException {
185         RFXComThermostat3Message msg = new RFXComThermostat3Message();
186
187         msg.convertFromState(CHANNEL_COMMAND_STRING, StringType.valueOf("OFF"));
188
189         assertEquals(OnOffType.OFF, msg.convertToState(CHANNEL_COMMAND, config, deviceState));
190         assertEquals(OnOffType.OFF, msg.convertToState(CHANNEL_CONTROL, config, deviceState));
191         assertEquals(StringType.valueOf("OFF"), msg.convertToState(CHANNEL_COMMAND_STRING, config, deviceState));
192         assertNull(msg.convertToState(CHANNEL_COMMAND_SECOND, config, deviceState));
193     }
194
195     @Test
196     public void testCommandStringOn() throws RFXComException {
197         RFXComThermostat3Message msg = new RFXComThermostat3Message();
198
199         msg.convertFromState(CHANNEL_COMMAND_STRING, StringType.valueOf("On"));
200
201         assertEquals(OnOffType.ON, msg.convertToState(CHANNEL_COMMAND, config, deviceState));
202         assertEquals(OnOffType.ON, msg.convertToState(CHANNEL_CONTROL, config, deviceState));
203         assertEquals(StringType.valueOf("ON"), msg.convertToState(CHANNEL_COMMAND_STRING, config, deviceState));
204         assertNull(msg.convertToState(CHANNEL_COMMAND_SECOND, config, deviceState));
205     }
206
207     @Test
208     public void testCommandStringUp() throws RFXComException {
209         RFXComThermostat3Message msg = new RFXComThermostat3Message();
210
211         msg.convertFromState(CHANNEL_COMMAND_STRING, StringType.valueOf("UP"));
212
213         assertEquals(OnOffType.ON, msg.convertToState(CHANNEL_COMMAND, config, deviceState));
214         assertEquals(UpDownType.UP, msg.convertToState(CHANNEL_CONTROL, config, deviceState));
215         assertEquals(StringType.valueOf("UP"), msg.convertToState(CHANNEL_COMMAND_STRING, config, deviceState));
216
217         assertNull(msg.convertToState(CHANNEL_COMMAND_SECOND, config, deviceState));
218     }
219
220     @Test
221     public void testCommandStringDown() throws RFXComException {
222         RFXComThermostat3Message msg = new RFXComThermostat3Message();
223
224         msg.convertFromState(CHANNEL_COMMAND_STRING, StringType.valueOf("down"));
225
226         assertEquals(UnDefType.UNDEF, msg.convertToState(CHANNEL_COMMAND, config, deviceState));
227         assertEquals(UpDownType.DOWN, msg.convertToState(CHANNEL_CONTROL, config, deviceState));
228         assertEquals(StringType.valueOf("DOWN"), msg.convertToState(CHANNEL_COMMAND_STRING, config, deviceState));
229         assertNull(msg.convertToState(CHANNEL_COMMAND_SECOND, config, deviceState));
230     }
231
232     @Test
233     public void testCommandStringRunUp() throws RFXComException {
234         RFXComThermostat3Message msg = new RFXComThermostat3Message();
235
236         msg.convertFromState(CHANNEL_COMMAND_STRING, StringType.valueOf("RUN_UP"));
237
238         assertEquals(OnOffType.ON, msg.convertToState(CHANNEL_COMMAND, config, deviceState));
239         assertEquals(UpDownType.UP, msg.convertToState(CHANNEL_CONTROL, config, deviceState));
240         assertEquals(StringType.valueOf("RUN_UP"), msg.convertToState(CHANNEL_COMMAND_STRING, config, deviceState));
241         assertNull(msg.convertToState(CHANNEL_COMMAND_SECOND, config, deviceState));
242     }
243
244     @Test
245     public void testCommandStringRunDown() throws RFXComException {
246         RFXComThermostat3Message msg = new RFXComThermostat3Message();
247
248         msg.convertFromState(CHANNEL_COMMAND_STRING, StringType.valueOf("RUN_DOWN"));
249
250         assertEquals(OnOffType.OFF, msg.convertToState(CHANNEL_COMMAND, config, deviceState));
251         assertEquals(UpDownType.DOWN, msg.convertToState(CHANNEL_CONTROL, config, deviceState));
252         assertEquals(StringType.valueOf("RUN_DOWN"), msg.convertToState(CHANNEL_COMMAND_STRING, config, deviceState));
253         assertNull(msg.convertToState(CHANNEL_COMMAND_SECOND, config, deviceState));
254     }
255
256     @Test
257     public void testCommandStringStop() throws RFXComException {
258         RFXComThermostat3Message msg = new RFXComThermostat3Message();
259
260         msg.convertFromState(CHANNEL_COMMAND_STRING, StringType.valueOf("STOP"));
261
262         assertEquals(UnDefType.UNDEF, msg.convertToState(CHANNEL_COMMAND, config, deviceState));
263         assertEquals(StringType.valueOf("STOP"), msg.convertToState(CHANNEL_COMMAND_STRING, config, deviceState));
264
265         assertNull(msg.convertToState(CHANNEL_CONTROL, config, deviceState));
266         assertNull(msg.convertToState(CHANNEL_COMMAND_SECOND, config, deviceState));
267     }
268
269     @Test
270     public void testCommandStringSecondOn() throws RFXComException {
271         RFXComThermostat3Message msg = new RFXComThermostat3Message();
272
273         msg.convertFromState(CHANNEL_COMMAND_STRING, StringType.valueOf("SECOND_ON"));
274
275         assertEquals(OnOffType.ON, msg.convertToState(CHANNEL_COMMAND_SECOND, config, deviceState));
276         assertEquals(StringType.valueOf("SECOND_ON"), msg.convertToState(CHANNEL_COMMAND_STRING, config, deviceState));
277
278         assertNull(msg.convertToState(CHANNEL_COMMAND, config, deviceState));
279         assertNull(msg.convertToState(CHANNEL_CONTROL, config, deviceState));
280     }
281
282     @Test
283     public void testCommandStringSecondOff() throws RFXComException {
284         RFXComThermostat3Message msg = new RFXComThermostat3Message();
285
286         msg.convertFromState(CHANNEL_COMMAND_STRING, StringType.valueOf("SECOND_OFF"));
287
288         assertEquals(OnOffType.OFF, msg.convertToState(CHANNEL_COMMAND_SECOND, config, deviceState));
289         assertEquals(StringType.valueOf("SECOND_OFF"), msg.convertToState(CHANNEL_COMMAND_STRING, config, deviceState));
290
291         assertNull(msg.convertToState(CHANNEL_COMMAND, config, deviceState));
292         assertNull(msg.convertToState(CHANNEL_CONTROL, config, deviceState));
293     }
294 }