2 * Copyright (c) 2010-2024 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.homewizard.internal;
15 import org.eclipse.jdt.annotation.NonNullByDefault;
16 import org.openhab.core.library.types.OnOffType;
17 import org.openhab.core.library.types.PercentType;
18 import org.openhab.core.library.types.QuantityType;
19 import org.openhab.core.library.unit.Units;
20 import org.openhab.core.thing.ChannelUID;
21 import org.openhab.core.thing.Thing;
22 import org.openhab.core.types.Command;
23 import org.openhab.core.types.RefreshType;
26 * The {@link HomeWizardEnergySocketHandler} implements functionality to handle a HomeWizard EnergySocket.
28 * @author Daniƫl van Os - Initial contribution
31 public class HomeWizardEnergySocketHandler extends HomeWizardStatefulDeviceHandler {
36 * @param thing The thing to handle
38 public HomeWizardEnergySocketHandler(Thing thing) {
43 * Converts a brightness value (0..255) to a percentage.
45 * @param brightness The brightness to convert.
46 * @return brightness percentage
48 private int brightnessToPercentage(int brightness) {
49 return (int) (100.0 * brightness / 255.0 + 0.5);
53 * Converts a percentage to a brightness value (0..255)
55 * @param percentage The percentage to convert.
56 * @return brightness value
58 private int percentageToBrightness(String percentage) {
59 return (int) (Double.valueOf(percentage) * 255.0 / 100.0 + 0.5);
63 * Handle incoming commands.
65 * Power on/off, Power lock/unlock and Ring brightness are supported.
68 public void handleCommand(ChannelUID channelUID, Command command) {
69 if (command instanceof RefreshType) {
70 // For now I prefer not updating immediately above firing a full update request for each channel
74 StatePayload result = null;
77 * The returned payloads below only contain the modified value, so each has it's own
78 * call to updateState instead of just calling handleStatePayload() with the returned
82 switch (channelUID.getId()) {
83 case HomeWizardBindingConstants.CHANNEL_RING_BRIGHTNESS: {
84 result = sendStateCommand(
85 String.format("{\"brightness\": %d}", percentageToBrightness(command.toFullString())));
87 updateState(HomeWizardBindingConstants.CHANNEL_RING_BRIGHTNESS,
88 new PercentType(brightnessToPercentage(result.getBrightness())));
92 case HomeWizardBindingConstants.CHANNEL_POWER_SWITCH: {
93 boolean onOff = command.equals(OnOffType.ON);
94 result = sendStateCommand(String.format("{\"power_on\": %b}", onOff));
96 updateState(HomeWizardBindingConstants.CHANNEL_POWER_SWITCH, OnOffType.from(result.getPowerOn()));
100 case HomeWizardBindingConstants.CHANNEL_POWER_LOCK: {
101 boolean onOff = command.equals(OnOffType.ON);
102 result = sendStateCommand(String.format("{\"switch_lock\": %b}", onOff));
103 if (result != null) {
104 updateState(HomeWizardBindingConstants.CHANNEL_POWER_LOCK, OnOffType.from(result.getSwitchLock()));
109 logger.warn("Should handle {} {}", channelUID.getIdWithoutGroup(), command);
115 * Device specific handling of the returned payload.
117 * @param payload The data parsed from the Json file
120 protected void handleDataPayload(DataPayload payload) {
121 updateState(HomeWizardBindingConstants.CHANNEL_ENERGY_IMPORT_T1,
122 new QuantityType<>(payload.getTotalEnergyImportT1Kwh(), Units.KILOWATT_HOUR));
123 updateState(HomeWizardBindingConstants.CHANNEL_ENERGY_EXPORT_T1,
124 new QuantityType<>(payload.getTotalEnergyExportT1Kwh(), Units.KILOWATT_HOUR));
125 updateState(HomeWizardBindingConstants.CHANNEL_ACTIVE_POWER,
126 new QuantityType<>(payload.getActivePowerW(), Units.WATT));
130 protected void handleStatePayload(StatePayload payload) {
131 updateState(HomeWizardBindingConstants.CHANNEL_POWER_SWITCH, OnOffType.from(payload.getPowerOn()));
132 updateState(HomeWizardBindingConstants.CHANNEL_POWER_LOCK, OnOffType.from(payload.getSwitchLock()));
133 updateState(HomeWizardBindingConstants.CHANNEL_RING_BRIGHTNESS,
134 new PercentType(brightnessToPercentage(payload.getBrightness())));