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