| battery_low | Switch | R | Battery level low: `ON`; `OFF` | any battery-powered sensor |
| carbonmonoxide | Switch | R | `ON` = carbon monoxide detected | carbonmonoxide |
| color | Color | R | Color set by remote | colorcontrol |
+| windowopen | Contact | R | `windowopen` status is reported by some thermostats | thermostat |
**NOTE:** Beside other non mandatory channels, the `battery_level` and `battery_low` channels will be added to the Thing during runtime if the sensor is battery-powered.
The specification of your sensor depends on the deCONZ capabilities.
public @Nullable Integer gesture;
/** Thermostat may provide this value. */
public @Nullable Integer valve;
+ /** Thermostats may provide this value */
+ public @Nullable String windowopen;
/** deCONZ sends a last update string with every event. */
public @Nullable String lastupdated;
/** color controllers send xy values */
+ ", carbonmonoxide=" + carbonmonoxide + ", pressure=" + pressure + ", presence=" + presence
+ ", power=" + power + ", battery=" + battery + ", consumption=" + consumption + ", voltage=" + voltage
+ ", current=" + current + ", status=" + status + ", buttonevent=" + buttonevent + ", gesture="
- + gesture + ", valve=" + valve + ", lastupdated='" + lastupdated + '\'' + ", xy=" + Arrays.toString(xy)
- + '}';
+ + gesture + ", valve=" + valve + ", windowopen='" + windowopen + '\'' + ", lastupdated='" + lastupdated
+ + '\'' + ", xy=" + Arrays.toString(xy) + '}';
}
}
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
-import org.openhab.binding.deconz.internal.dto.SensorConfig;
-import org.openhab.binding.deconz.internal.dto.SensorState;
-import org.openhab.binding.deconz.internal.dto.ThermostatConfig;
+import org.openhab.binding.deconz.internal.dto.*;
import org.openhab.binding.deconz.internal.types.ThermostatMode;
import org.openhab.core.library.types.DecimalType;
+import org.openhab.core.library.types.OpenClosedType;
import org.openhab.core.library.types.QuantityType;
import org.openhab.core.library.types.StringType;
import org.openhab.core.thing.ChannelUID;
import org.openhab.core.thing.Thing;
import org.openhab.core.thing.ThingTypeUID;
+import org.openhab.core.thing.binding.builder.ChannelBuilder;
+import org.openhab.core.thing.binding.builder.ThingBuilder;
+import org.openhab.core.thing.type.ChannelTypeUID;
import org.openhab.core.types.Command;
import org.openhab.core.types.RefreshType;
import org.slf4j.Logger;
case CHANNEL_VALVE_POSITION:
updateQuantityTypeChannel(channelID, newState.valve, PERCENT, 100.0 / 255);
break;
+ case CHANNEL_WINDOWOPEN:
+ String open = newState.windowopen;
+ if (open != null) {
+ updateState(channelID, "Closed".equals(open) ? OpenClosedType.CLOSED : OpenClosedType.OPEN);
+ }
+ break;
}
}
}
return newTemperature.scaleByPowerOfTen(2).intValue();
}
+
+ @Override
+ protected void processStateResponse(DeconzBaseMessage stateResponse) {
+ if (!(stateResponse instanceof SensorMessage)) {
+ return;
+ }
+
+ SensorMessage sensorMessage = (SensorMessage) stateResponse;
+ if (sensorMessage.state.windowopen != null && thing.getChannel(CHANNEL_WINDOWOPEN) == null) {
+ ThingBuilder thingBuilder = editThing();
+ thingBuilder.withChannel(ChannelBuilder.create(new ChannelUID(thing.getUID(), CHANNEL_WINDOWOPEN), "String")
+ .withType(new ChannelTypeUID(BINDING_ID, "open")).build());
+ updateThing(thingBuilder.build());
+ }
+
+ super.processStateResponse(stateResponse);
+ }
}