2 * Copyright (c) 2010-2020 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.avmfritz.internal.dto;
15 import java.math.BigDecimal;
17 import javax.xml.bind.annotation.XmlAttribute;
18 import javax.xml.bind.annotation.XmlElement;
21 * See {@link DeviceListModel}.
23 * In the functionbitmask element value the following bits are used:
26 * <li>Bit 0: HAN-FUN Gerät</li>
27 * <li>Bit 3: HAN-FUN Button - undocumented</li>
28 * <li>Bit 4: Alarm-Sensor</li>
29 * <li>Bit 5: AVM-Button</li>
30 * <li>Bit 6: Comet DECT, Heizkörperregler</li>
31 * <li>Bit 7: Energie Messgerät</li>
32 * <li>Bit 8: Temperatursensor</li>
33 * <li>Bit 9: Schaltsteckdose</li>
34 * <li>Bit 10: AVM DECT Repeater</li>
35 * <li>Bit 11: Mikrofon</li>
36 * <li>Bit 13: HAN-FUN Unit</li>
39 * @author Robert Bausdorf - Initial contribution
40 * @author Christoph Weitkamp - Added support for AVM FRITZ!DECT 300 and Comet DECT
41 * @author Christoph Weitkamp - Added support for groups
43 public abstract class AVMFritzBaseModel implements BatteryModel {
44 protected static final int HAN_FUN_DEVICE_BIT = 1; // Bit 0
45 protected static final int HAN_FUN_BUTTON_BIT = 1 << 3; // Bit 3 - undocumented
46 protected static final int HAN_FUN_ALARM_SENSOR_BIT = 1 << 4; // Bit 4
47 protected static final int BUTTON_BIT = 1 << 5; // Bit 5
48 protected static final int HEATING_THERMOSTAT_BIT = 1 << 6; // Bit 6
49 protected static final int POWERMETER_BIT = 1 << 7; // Bit 7
50 protected static final int TEMPERATURE_SENSOR_BIT = 1 << 8; // Bit 8
51 protected static final int OUTLET_BIT = 1 << 9; // Bit 9
52 protected static final int DECT_REPEATER_BIT = 1 << 10; // Bit 10
53 protected static final int MICROPHONE_BIT = 1 << 11; // Bit 11
54 protected static final int HAN_FUN_UNIT_BIT = 1 << 13; // Bit 13
55 protected static final int HUMIDITY_SENSOR_BIT = 1 << 20; // Bit 20 - undocumented
57 @XmlAttribute(name = "identifier")
60 @XmlAttribute(name = "id")
61 private String deviceId;
63 @XmlAttribute(name = "functionbitmask")
66 @XmlAttribute(name = "fwversion")
67 private String firmwareVersion;
69 @XmlAttribute(name = "manufacturer")
70 private String deviceManufacturer;
72 @XmlAttribute(name = "productname")
73 private String productName;
75 @XmlElement(name = "present")
76 private Integer present;
78 @XmlElement(name = "name")
81 @XmlElement(name = "battery")
82 private BigDecimal battery;
84 @XmlElement(name = "batterylow")
85 private BigDecimal batterylow;
87 @XmlElement(name = "switch")
88 private SwitchModel switchModel;
90 @XmlElement(name = "powermeter")
91 private PowerMeterModel powermeterModel;
93 @XmlElement(name = "hkr")
94 private HeatingModel heatingModel;
96 public PowerMeterModel getPowermeter() {
97 return powermeterModel;
100 public void setPowermeter(PowerMeterModel powermeter) {
101 this.powermeterModel = powermeter;
104 public HeatingModel getHkr() {
108 public void setHkr(HeatingModel heatingModel) {
109 this.heatingModel = heatingModel;
112 public SwitchModel getSwitch() {
116 public void setSwitch(SwitchModel switchModel) {
117 this.switchModel = switchModel;
120 public String getIdentifier() {
121 return ident != null ? ident.replace(" ", "") : null;
124 public void setIdentifier(String identifier) {
125 this.ident = identifier;
128 public String getDeviceId() {
132 public boolean isHANFUNDevice() {
133 return (bitmask & HAN_FUN_DEVICE_BIT) > 0;
136 public boolean isHANFUNButton() {
137 return (bitmask & HAN_FUN_BUTTON_BIT) > 0;
140 public boolean isHANFUNAlarmSensor() {
141 return (bitmask & HAN_FUN_ALARM_SENSOR_BIT) > 0;
144 public boolean isButton() {
145 return (bitmask & BUTTON_BIT) > 0;
148 public boolean isSwitchableOutlet() {
149 return (bitmask & OUTLET_BIT) > 0;
152 public boolean isTempSensor() {
153 return (bitmask & TEMPERATURE_SENSOR_BIT) > 0;
156 public boolean isHumiditySensor() {
157 return (bitmask & HUMIDITY_SENSOR_BIT) > 0;
160 public boolean isPowermeter() {
161 return (bitmask & POWERMETER_BIT) > 0;
164 public boolean isDectRepeater() {
165 return (bitmask & DECT_REPEATER_BIT) > 0;
168 public boolean isHeatingThermostat() {
169 return (bitmask & HEATING_THERMOSTAT_BIT) > 0;
172 public boolean isMicrophone() {
173 return (bitmask & MICROPHONE_BIT) > 0;
176 public boolean isHANFUNUnit() {
177 return (bitmask & HAN_FUN_UNIT_BIT) > 0;
180 public String getFirmwareVersion() {
181 return firmwareVersion;
184 public String getManufacturer() {
185 return deviceManufacturer;
188 public String getProductName() {
192 public int getPresent() {
196 public String getName() {
201 public BigDecimal getBattery() {
206 public BigDecimal getBatterylow() {
211 public String toString() {
212 return new StringBuilder().append("[ain=").append(ident).append(",bitmask=").append(bitmask)
213 .append(",isHANFUNDevice=").append(isHANFUNDevice()).append(",isHANFUNButton=").append(isHANFUNButton())
214 .append(",isHANFUNAlarmSensor=").append(isHANFUNAlarmSensor()).append(",isButton=").append(isButton())
215 .append(",isSwitchableOutlet=").append(isSwitchableOutlet()).append(",isTempSensor=")
216 .append(isTempSensor()).append(",isHumiditySensor=").append(isHumiditySensor()).append(",isPowermeter=")
217 .append(isPowermeter()).append(",isDectRepeater=").append(isDectRepeater())
218 .append(",isHeatingThermostat=").append(isHeatingThermostat()).append(",isMicrophone=")
219 .append(isMicrophone()).append(",isHANFUNUnit=").append(isHANFUNUnit()).append(",id=").append(deviceId)
220 .append(",manufacturer=").append(deviceManufacturer).append(",productname=").append(productName)
221 .append(",fwversion=").append(firmwareVersion).append(",present=").append(present).append(",name=")
222 .append(name).append(",battery=").append(getBattery()).append(",batterylow=").append(getBatterylow())
223 .append(",").append(getSwitch()).append(",").append(getPowermeter()).append(",").append(getHkr())
224 .append(",").toString();