use of org.openhab.binding.homematic.internal.model.HmChannel in project openhab1-addons by openhab.
the class HomegearClient method parseChannel.
/**
* Parses the channel informations into the binding model.
*/
@SuppressWarnings("unchecked")
private HmChannel parseChannel(HmDevice device, Map<String, ?> channelData) throws IllegalAccessException {
HmChannel channel = new HmChannel();
FieldUtils.writeField(channel, "device", device, true);
FieldUtils.writeField(channel, "number", String.valueOf(channelData.get("INDEX")), true);
Map<String, ?> paramsList = (Map<String, ?>) channelData.get("PARAMSET");
for (String name : paramsList.keySet()) {
channel.addDatapoint(parseDatapoint(channel, name, (Map<String, ?>) paramsList.get(name)));
}
return channel;
}
use of org.openhab.binding.homematic.internal.model.HmChannel in project openhab1-addons by openhab.
the class BaseHomematicClient method addBatteryInfo.
/**
* Adds the battery info datapoint to the specified device if the device has
* batteries.
*/
protected void addBatteryInfo(HmDevice device) throws HomematicClientException {
HmBattery battery = HmBatteryTypeProvider.getBatteryType(device.getType());
if (battery != null) {
for (HmChannel channel : device.getChannels()) {
if ("0".equals(channel.getNumber())) {
try {
logger.debug("Adding battery type to device {}: {}", device.getType(), battery.getInfo());
HmDatapoint dp = new HmDatapoint();
FieldUtils.writeField(dp, "name", "BATTERY_TYPE", true);
FieldUtils.writeField(dp, "writeable", Boolean.FALSE, true);
FieldUtils.writeField(dp, "valueType", 20, true);
dp.setValue(battery.getInfo());
channel.addDatapoint(dp);
} catch (IllegalAccessException ex) {
throw new HomematicClientException(ex.getMessage(), ex);
}
}
}
}
}
use of org.openhab.binding.homematic.internal.model.HmChannel in project openhab1-addons by openhab.
the class CcuClient method iterateAllDatapoints.
/**
* {@inheritDoc}
*/
@Override
public void iterateAllDatapoints(HmValueItemIteratorCallback callback) throws HomematicClientException {
List<HmDevice> devices = sendScriptByName("getAllDevices", HmDeviceList.class).getDevices();
Map<String, HmRssiInfo> rssiList = rpcClient.getRssiInfo(HmInterface.RF);
for (HmDevice device : devices) {
addBatteryInfo(device);
boolean deviceHasRssiDatapoint = false;
for (HmChannel channel : device.getChannels()) {
boolean isChannelZero = "0".equals(channel.getNumber());
for (HmDatapoint dp : channel.getDatapoints()) {
DatapointConfig bindingConfig = new DatapointConfig(device.getAddress(), channel.getNumber(), dp.getName());
HmRssiInfo rssiInfo = rssiList.get(bindingConfig.getAddress());
if (rssiInfo != null) {
if ("RSSI_DEVICE".equals(bindingConfig.getParameter())) {
dp.setValue(rssiInfo.getDevice());
deviceHasRssiDatapoint = true;
} else if ("RSSI_PEER".equals(bindingConfig.getParameter())) {
dp.setValue(rssiInfo.getPeer());
deviceHasRssiDatapoint = true;
}
}
callback.iterate(bindingConfig, dp);
}
if (isChannelZero && !deviceHasRssiDatapoint) {
HmRssiInfo rssiInfo = rssiList.get(device.getAddress());
if (rssiInfo != null) {
logger.debug("Adding missing RSSI datapoints to device {} with address {}", device.getType(), device.getAddress());
addRssiDatapoint(channel, "RSSI_DEVICE", rssiInfo.getDevice(), callback);
addRssiDatapoint(channel, "RSSI_PEER", rssiInfo.getPeer(), callback);
}
}
}
}
}
use of org.openhab.binding.homematic.internal.model.HmChannel in project openhab1-addons by openhab.
the class HomegearClient method iterateAllDatapoints.
/**
* {@inheritDoc}
*/
@Override
public void iterateAllDatapoints(HmValueItemIteratorCallback callback) throws HomematicClientException {
Object[] result = rpcClient.getAllValues(getDefaultInterface());
try {
for (int i = 0; i < result.length; i++) {
@SuppressWarnings("unchecked") Map<String, ?> entryMap = (Map<String, ?>) result[i];
HmDevice device = parseDevice(entryMap);
addBatteryInfo(device);
logger.trace("{}", device);
for (HmChannel channel : device.getChannels()) {
for (HmDatapoint dp : channel.getDatapoints()) {
logger.trace(" {}", dp.toDumpString());
DatapointConfig bindingConfig = new DatapointConfig(device.getAddress(), channel.getNumber(), dp.getName());
callback.iterate(bindingConfig, dp);
}
}
}
} catch (Exception ex) {
throw new HomematicClientException(ex.getMessage(), ex);
}
}
use of org.openhab.binding.homematic.internal.model.HmChannel in project openhab1-addons by openhab.
the class ConverterTest method getDatapoint.
private HmDatapoint getDatapoint(String name, Object value, Number min, Number max, String channelNumber, String deviceType) throws Exception {
HmDatapoint dp = new HmDatapoint();
FieldUtils.writeField(dp, "name", name, true);
FieldUtils.writeField(dp, "minValue", min, true);
FieldUtils.writeField(dp, "maxValue", max, true);
Object convertedValue = new TypeGuessAdapter().unmarshal(value == null ? null : value.toString());
if (convertedValue instanceof Boolean) {
FieldUtils.writeField(dp, "valueType", 2, true);
} else if (convertedValue instanceof Integer) {
FieldUtils.writeField(dp, "valueType", 8, true);
} else if (convertedValue instanceof Double) {
FieldUtils.writeField(dp, "valueType", 4, true);
} else {
FieldUtils.writeField(dp, "valueType", -1, true);
}
dp.setValue(convertedValue);
HmChannel channel = new HmChannel();
FieldUtils.writeField(dp, "channel", channel, true);
FieldUtils.writeField(channel, "number", channelNumber, true);
HmDevice device = new HmDevice();
FieldUtils.writeField(device, "type", StringUtils.defaultString(deviceType, ""), true);
FieldUtils.writeField(channel, "device", device, true);
return dp;
}
Aggregations