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