use of org.openhab.binding.tinkerforge.internal.model.MSensor in project openhab1-addons by openhab.
the class TinkerforgeBinding method updateItemValues.
/**
* Triggers an update of state values for all devices.
*
* @param provider The {@code TinkerforgeBindingProvider} which is bound to the device as
* {@code Item}
* @param itemName The name of the {@code Item} as String
* @param only_poll_enabled Fetch only the values of devices which do not support callback
* listeners. These devices are marked with poll "true" flag.
*/
protected void updateItemValues(TinkerforgeBindingProvider provider, String itemName, boolean only_poll_enabled) {
if (tinkerforgeEcosystem == null) {
logger.warn("tinkerforge ecosystem not yet ready");
return;
}
String deviceUid = provider.getUid(itemName);
Item item = provider.getItem(itemName);
String deviceSubId = provider.getSubId(itemName);
String deviceName = provider.getName(itemName);
if (deviceName != null) {
String[] ids = getDeviceIdsForDeviceName(deviceName);
deviceUid = ids[0];
deviceSubId = ids[1];
}
MBaseDevice mDevice = tinkerforgeEcosystem.getDevice(deviceUid, deviceSubId);
if (mDevice != null && mDevice.getEnabledA().get()) {
if (only_poll_enabled && !mDevice.isPoll()) {
// do nothing
logger.debug("{} omitting fetch value for no poll{}:{}", LoggerConstants.ITEMUPDATE, deviceUid, deviceSubId);
} else {
if (mDevice instanceof MSensor) {
((MSensor<?>) mDevice).fetchSensorValue();
} else if (mDevice instanceof SwitchSensor && item instanceof SwitchItem) {
((SwitchSensor) mDevice).fetchSwitchState();
} else if (mDevice instanceof DigitalActor) {
((DigitalActor) mDevice).fetchDigitalValue();
}
}
}
}
use of org.openhab.binding.tinkerforge.internal.model.MSensor in project openhab1-addons by openhab.
the class TinkerforgeBinding method processTFDeviceValues.
/**
* Processes change events from the {@link Ecosystem}. Sensor values from {@link MSensor} are
* handled by {@link #processSensorValue(MSensor, Notification) processSensorValue}, actor values
* from {@link MSwitchActore} are handled by
* {@link #processSwitchActorValue(MSwitchActor, Notification) processSwitchActorValue}. (no add
* or remove events, these are handled in {@link #initializeTFDevices(Notification)
* initializeTFDevices}).
*
*
* @param notification The {@link Notification} about changes to the {@link Ecosystem}.
*/
private void processTFDeviceValues(Notification notification) {
if (notification.getNotifier() instanceof MSensor) {
MSensor<?> sensor = (MSensor<?>) notification.getNotifier();
int featureID = notification.getFeatureID(MSensor.class);
if (featureID == ModelPackage.MSENSOR__SENSOR_VALUE) {
processValue((MBaseDevice) sensor, notification);
}
} else if (notification.getNotifier() instanceof SetPointActor<?>) {
SetPointActor<?> actor = (SetPointActor<?>) notification.getNotifier();
int setpointFeatureID = notification.getFeatureID(SetPointActor.class);
if (setpointFeatureID == ModelPackage.SET_POINT_ACTOR__PERCENT_VALUE) {
processValue((MBaseDevice) actor, notification);
}
} else if (notification.getNotifier() instanceof MoveActor) {
MoveActor actor = (MoveActor) notification.getNotifier();
int moveFeatureID = notification.getFeatureID(MoveActor.class);
if (moveFeatureID == ModelPackage.MOVE_ACTOR__DIRECTION) {
processValue((MBaseDevice) actor, notification);
}
} else if (notification.getNotifier() instanceof MSwitchActor) {
MSwitchActor switchActor = (MSwitchActor) notification.getNotifier();
int featureID = notification.getFeatureID(MSwitchActor.class);
if (featureID == ModelPackage.MSWITCH_ACTOR__SWITCH_STATE) {
processValue((MBaseDevice) switchActor, notification);
}
} else if (notification.getNotifier() instanceof ProgrammableSwitchActor) {
logger.trace("notification {}", notification);
logger.trace("notifier {}", notification.getNotifier());
ProgrammableSwitchActor switchActor = (ProgrammableSwitchActor) notification.getNotifier();
// use the super type class for getting the featureID. Should not be necessary according to
// the docs or I misunderstand it. But this approach works.
int featureID = notification.getFeatureID(SwitchSensor.class);
logger.trace("notification ProgrammableSwitchActor id {}", featureID);
if (featureID == ModelPackage.PROGRAMMABLE_SWITCH_ACTOR__SWITCH_STATE) {
logger.trace("ProgrammableSwitchActor switch state changed sending notification");
processValue((MBaseDevice) switchActor, notification);
}
} else if (notification.getNotifier() instanceof DigitalActor) {
DigitalActor actor = (DigitalActor) notification.getNotifier();
int featureID = notification.getFeatureID(DigitalActor.class);
if (featureID == ModelPackage.DIGITAL_ACTOR__DIGITAL_STATE) {
processValue((MBaseDevice) actor, notification);
}
} else if (notification.getNotifier() instanceof ColorActor) {
ColorActor actor = (ColorActor) notification.getNotifier();
int featureID = notification.getFeatureID(ColorActor.class);
if (featureID == ModelPackage.COLOR_ACTOR__COLOR) {
processValue((MBaseDevice) actor, notification);
}
} else if (notification.getNotifier() instanceof DimmableActor<?>) {
DimmableActor<?> actor = (DimmableActor<?>) notification.getNotifier();
processValue((MBaseDevice) actor, notification);
} else if (notification.getNotifier() instanceof MBrickd) {
MBrickd brickd = (MBrickd) notification.getNotifier();
int featureID = notification.getFeatureID(MBrickd.class);
if (featureID == ModelPackage.MBRICKD__CONNECTED_COUNTER) {
String subId = "connected_counter";
processValue(brickd, notification, subId);
} else if (featureID == ModelPackage.MBRICKD__IS_CONNECTED) {
String subId = "isconnected";
processValue(brickd, notification, subId);
}
} else // TODO hier muss noch was fuer die dimmer und rollershutter rein
{
logger.trace("{} ignored notifier {}", LoggerConstants.TFMODELUPDATE, notification.getNotifier());
}
}
Aggregations