]> git.basschouten.com Git - openhab-addons.git/blob
879569467cdcf119b486e17a6005988c71099083
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2020 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.onewire.internal.device;
14
15 import static org.openhab.binding.onewire.internal.OwBindingConstants.*;
16
17 import javax.measure.quantity.Dimensionless;
18 import javax.measure.quantity.Illuminance;
19 import javax.measure.quantity.Pressure;
20 import javax.measure.quantity.Temperature;
21
22 import org.eclipse.jdt.annotation.NonNullByDefault;
23 import org.openhab.binding.onewire.internal.OwException;
24 import org.openhab.binding.onewire.internal.SensorId;
25 import org.openhab.binding.onewire.internal.Util;
26 import org.openhab.binding.onewire.internal.handler.OwBaseThingHandler;
27 import org.openhab.binding.onewire.internal.handler.OwserverBridgeHandler;
28 import org.openhab.binding.onewire.internal.owserver.OwserverDeviceParameter;
29 import org.openhab.core.library.types.DecimalType;
30 import org.openhab.core.library.types.QuantityType;
31 import org.openhab.core.library.unit.MetricPrefix;
32 import org.openhab.core.library.unit.SIUnits;
33 import org.openhab.core.library.unit.SmartHomeUnits;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36
37 /**
38  * The {@link EDS006x} class defines an EDS006x device
39  *
40  * @author Jan N. Klug - Initial contribution
41  */
42 @NonNullByDefault
43 public class EDS006x extends AbstractOwDevice {
44     private final Logger logger = LoggerFactory.getLogger(EDS006x.class);
45     private OwserverDeviceParameter temperatureParameter = new OwserverDeviceParameter("/temperature");
46     private OwserverDeviceParameter humidityParameter = new OwserverDeviceParameter("/humidity");
47     private OwserverDeviceParameter pressureParameter = new OwserverDeviceParameter("/pressure");
48     private OwserverDeviceParameter lightParameter = new OwserverDeviceParameter("/light");
49
50     public EDS006x(SensorId sensorId, OwSensorType sensorType, OwBaseThingHandler callback) {
51         super(sensorId, callback);
52
53         String sensorTypeName = sensorType.name();
54         temperatureParameter = new OwserverDeviceParameter("/" + sensorTypeName + "/temperature");
55         humidityParameter = new OwserverDeviceParameter("/" + sensorTypeName + "/humidity");
56         pressureParameter = new OwserverDeviceParameter("/" + sensorTypeName + "/pressure");
57         lightParameter = new OwserverDeviceParameter("/" + sensorTypeName + "/light");
58     }
59
60     @Override
61     public void configureChannels() {
62         isConfigured = true;
63     }
64
65     @Override
66     public void refresh(OwserverBridgeHandler bridgeHandler, Boolean forcedRefresh) throws OwException {
67         if (isConfigured) {
68             logger.trace("refresh of sensor {} started", sensorId);
69             if (enabledChannels.contains(CHANNEL_TEMPERATURE) || enabledChannels.contains(CHANNEL_HUMIDITY)
70                     || enabledChannels.contains(CHANNEL_ABSOLUTE_HUMIDITY)
71                     || enabledChannels.contains(CHANNEL_DEWPOINT)) {
72                 QuantityType<Temperature> temperature = new QuantityType<>(
73                         (DecimalType) bridgeHandler.readDecimalType(sensorId, temperatureParameter), SIUnits.CELSIUS);
74
75                 if (enabledChannels.contains(CHANNEL_TEMPERATURE)) {
76                     callback.postUpdate(CHANNEL_TEMPERATURE, temperature);
77                 }
78
79                 if (enabledChannels.contains(CHANNEL_HUMIDITY) || enabledChannels.contains(CHANNEL_ABSOLUTE_HUMIDITY)
80                         || enabledChannels.contains(CHANNEL_DEWPOINT)) {
81                     QuantityType<Dimensionless> humidity = new QuantityType<>(
82                             (DecimalType) bridgeHandler.readDecimalType(sensorId, humidityParameter),
83                             SmartHomeUnits.PERCENT);
84
85                     if (enabledChannels.contains(CHANNEL_HUMIDITY)) {
86                         callback.postUpdate(CHANNEL_HUMIDITY, humidity);
87                     }
88
89                     if (enabledChannels.contains(CHANNEL_ABSOLUTE_HUMIDITY)) {
90                         callback.postUpdate(CHANNEL_ABSOLUTE_HUMIDITY,
91                                 Util.calculateAbsoluteHumidity(temperature, humidity));
92                     }
93
94                     if (enabledChannels.contains(CHANNEL_DEWPOINT)) {
95                         callback.postUpdate(CHANNEL_DEWPOINT, Util.calculateDewpoint(temperature, humidity));
96                     }
97                 }
98             }
99
100             if (enabledChannels.contains(CHANNEL_LIGHT)) {
101                 QuantityType<Illuminance> light = new QuantityType<>(
102                         (DecimalType) bridgeHandler.readDecimalType(sensorId, lightParameter), SmartHomeUnits.LUX);
103                 callback.postUpdate(CHANNEL_LIGHT, light);
104             }
105
106             if (enabledChannels.contains(CHANNEL_PRESSURE)) {
107                 QuantityType<Pressure> pressure = new QuantityType<>(
108                         (DecimalType) bridgeHandler.readDecimalType(sensorId, pressureParameter),
109                         MetricPrefix.HECTO(SIUnits.PASCAL));
110                 callback.postUpdate(CHANNEL_PRESSURE, pressure);
111             }
112         }
113     }
114 }