2 * Copyright (c) 2010-2021 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
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
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.wlanthermo.internal.api.mini.builtin;
17 import org.openhab.binding.wlanthermo.internal.WlanThermoBindingConstants;
18 import org.openhab.core.library.types.DecimalType;
19 import org.openhab.core.library.types.HSBType;
20 import org.openhab.core.library.types.OnOffType;
21 import org.openhab.core.library.types.StringType;
22 import org.openhab.core.thing.ChannelUID;
23 import org.openhab.core.types.State;
24 import org.openhab.core.types.UnDefType;
27 * The {@link WlanThermoMiniCommandHandler} is responsible for mapping the Commands to the respective data fields
30 * @author Christian Schlipp - Initial contribution
32 public class WlanThermoMiniCommandHandler {
34 public State getState(ChannelUID channelUID, App app) {
36 if ("system".equals(channelUID.getGroupId())) {
37 switch (channelUID.getIdWithoutGroup()) {
38 case WlanThermoBindingConstants.SYSTEM_CPU_TEMP:
39 if (app.getCpuTemp() == null) {
40 state = UnDefType.UNDEF;
42 state = new DecimalType(app.getCpuTemp());
45 case WlanThermoBindingConstants.SYSTEM_CPU_LOAD:
46 if (app.getCpuLoad() == null) {
47 state = UnDefType.UNDEF;
49 state = new DecimalType(app.getCpuLoad());
53 } else if (channelUID.getId().startsWith("channel")) {
54 int channelId = Integer.parseInt(channelUID.getGroupId().substring("channel".length()));
55 if (channelId >= 0 && channelId <= 9) {
56 Channel channel = app.getChannel();
57 if (channel == null) {
58 return UnDefType.UNDEF;
60 Data data = channel.getData(channelId);
61 switch (channelUID.getIdWithoutGroup()) {
62 case WlanThermoBindingConstants.CHANNEL_NAME:
63 state = new StringType(data.getName());
65 case WlanThermoBindingConstants.CHANNEL_TEMP:
66 if (data.getState().equals("er")) {
67 state = UnDefType.UNDEF;
69 state = new DecimalType(data.getTemp());
72 case WlanThermoBindingConstants.CHANNEL_MIN:
73 state = new DecimalType(data.getTempMin());
75 case WlanThermoBindingConstants.CHANNEL_MAX:
76 state = new DecimalType(data.getTempMax());
78 case WlanThermoBindingConstants.CHANNEL_ALARM_DEVICE:
79 state = OnOffType.from(data.getAlert());
81 case WlanThermoBindingConstants.CHANNEL_ALARM_OPENHAB_HIGH:
82 if (!data.getState().equals("er") && data.getTemp() > data.getTempMax()) {
85 state = OnOffType.OFF;
88 case WlanThermoBindingConstants.CHANNEL_ALARM_OPENHAB_LOW:
89 if (!data.getState().equals("er") && data.getTemp() < data.getTempMin()) {
92 state = OnOffType.OFF;
95 case WlanThermoBindingConstants.CHANNEL_COLOR:
96 Color c = Color.decode(UtilMini.toHex(data.getColor()));
97 state = HSBType.fromRGB(c.getRed(), c.getGreen(), c.getBlue());
99 case WlanThermoBindingConstants.CHANNEL_COLOR_NAME:
100 state = new StringType(data.getColor());
104 } else if (channelUID.getId().startsWith("pit")) {
106 if (channelUID.getGroupId().equals("pit1")) {
108 } else if (channelUID.getGroupId().equals("pit2")) {
111 return UnDefType.UNDEF;
113 if (pit == null || !pit.getEnabled()) {
114 return UnDefType.UNDEF;
116 switch (channelUID.getIdWithoutGroup()) {
117 case WlanThermoBindingConstants.CHANNEL_PITMASTER_ENABLED:
118 state = OnOffType.from(pit.getEnabled());
120 case WlanThermoBindingConstants.CHANNEL_PITMASTER_CURRENT:
121 state = new DecimalType(pit.getCurrent());
123 case WlanThermoBindingConstants.CHANNEL_PITMASTER_SETPOINT:
124 state = new DecimalType(pit.getSetpoint());
126 case WlanThermoBindingConstants.CHANNEL_PITMASTER_DUTY_CYCLE:
127 state = new DecimalType(pit.getControlOut());
129 case WlanThermoBindingConstants.CHANNEL_PITMASTER_LID_OPEN:
130 state = OnOffType.from(pit.getOpenLid().equals("True"));
132 case WlanThermoBindingConstants.CHANNEL_PITMASTER_CHANNEL_ID:
133 state = new DecimalType(pit.getCh());
140 public String getTrigger(ChannelUID channelUID, App app) {
141 String trigger = null;
142 if (channelUID.getId().startsWith("channel")) {
143 int channelId = Integer.parseInt(channelUID.getGroupId().substring("channel".length())) - 1;
144 if (channelId >= 0 && channelId <= 9) {
145 Channel channel = app.getChannel();
146 if (channel == null) {
149 Data data = channel.getData(channelId);
150 switch (channelUID.getIdWithoutGroup()) {
151 case "alarm_openhab":
152 if (!data.getState().equals("er")) {
153 if (data.getTemp() > data.getTempMax()) {
154 trigger = WlanThermoBindingConstants.TRIGGER_ALARM_MAX;
155 } else if (data.getTemp() < data.getTempMin()) {
156 trigger = WlanThermoBindingConstants.TRIGGER_ALARM_MIN;