]> git.basschouten.com Git - openhab-addons.git/blob
f4a30872cf2a72e7489922b6f4998e7f8961f526
[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.somfytahoma.internal.handler;
14
15 import static org.openhab.binding.somfytahoma.internal.SomfyTahomaBindingConstants.*;
16
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18 import org.openhab.core.thing.ChannelUID;
19 import org.openhab.core.thing.Thing;
20 import org.openhab.core.types.Command;
21 import org.openhab.core.types.RefreshType;
22
23 /**
24  * The {@link SomfyTahomaVenetianBlindHandler} is responsible for handling commands,
25  * which are sent to one of the channels of the venetian blind thing.
26  *
27  * @author Ondrej Pecta - Initial contribution
28  */
29 @NonNullByDefault
30 public class SomfyTahomaVenetianBlindHandler extends SomfyTahomaBaseThingHandler {
31
32     public SomfyTahomaVenetianBlindHandler(Thing thing) {
33         super(thing);
34         stateNames.put(CONTROL, "core:ClosureState");
35         stateNames.put(ORIENTATION, SLATE_ORIENTATION_STATE);
36     }
37
38     @Override
39     public void handleCommand(ChannelUID channelUID, Command command) {
40         super.handleCommand(channelUID, command);
41
42         if (command instanceof RefreshType) {
43             return;
44         }
45
46         switch (channelUID.getId()) {
47             case CLOSURE_AND_ORIENTATION:
48                 sendCommand(COMMAND_SET_CLOSURE_ORIENTATION, "[" + command.toString() + "]");
49                 break;
50             case CONTROL:
51             case ORIENTATION:
52                 String cmd = getTahomaCommand(command.toString(), channelUID.getId());
53                 if (COMMAND_MY.equals(cmd)) {
54                     sendCommand(COMMAND_MY);
55                 } else if (COMMAND_STOP.equals(cmd)) {
56                     String executionId = getCurrentExecutions();
57                     if (executionId != null) {
58                         // Check if the venetian blind is moving and STOP is sent => STOP it
59                         cancelExecution(executionId);
60                     } else {
61                         sendCommand(COMMAND_MY);
62                     }
63                 } else {
64                     String param = (COMMAND_SET_CLOSURE.equals(cmd) || COMMAND_SET_ORIENTATION.equals(cmd))
65                             ? "[" + toInteger(command) + "]"
66                             : "[]";
67                     sendCommand(cmd, param);
68                 }
69                 break;
70             default:
71                 return;
72         }
73     }
74
75     private String getTahomaCommand(String command, String channelId) {
76         switch (command) {
77             case "OFF":
78             case "DOWN":
79             case "CLOSE":
80                 return COMMAND_CLOSE;
81             case "ON":
82             case "UP":
83             case "OPEN":
84                 return COMMAND_OPEN;
85             case "MOVE":
86             case "MY":
87                 return COMMAND_MY;
88             case "STOP":
89                 return COMMAND_STOP;
90             default:
91                 if (CONTROL.equals(channelId)) {
92                     return COMMAND_SET_CLOSURE;
93                 } else {
94                     return COMMAND_SET_ORIENTATION;
95                 }
96         }
97     }
98 }