use of org.openhab.binding.satel.internal.event.NewStatesEvent in project openhab1-addons by openhab.
the class SatelBinding method incomingEvent.
/**
* {@inheritDoc}
*/
@Override
public void incomingEvent(SatelEvent event) {
logger.trace("Handling incoming event: {}", event);
// refresh all states that have changed
if (event instanceof NewStatesEvent) {
List<SatelCommand> commands = getRefreshCommands((NewStatesEvent) event);
for (SatelCommand command : commands) {
this.satelModule.sendCommand(command);
}
}
// if just connected, force refreshing
if (event instanceof ConnectionStatusEvent) {
ConnectionStatusEvent statusEvent = (ConnectionStatusEvent) event;
if (statusEvent.isConnected()) {
switchForceRefresh(true);
}
}
// update items
for (SatelBindingProvider provider : providers) {
for (String itemName : provider.getItemNames()) {
SatelBindingConfig itemConfig = provider.getItemConfig(itemName);
Item item = provider.getItem(itemName);
State newState = itemConfig.convertEventToState(item, event);
if (newState != null) {
logger.debug("Updating item state: item = {}, state = {}, event = {}", itemName, newState, event);
eventPublisher.postUpdate(itemName, newState);
itemConfig.setItemInitialized();
}
}
}
}
use of org.openhab.binding.satel.internal.event.NewStatesEvent in project openhab1-addons by openhab.
the class ConnectionStatusBindingConfig method convertEventToState.
/**
* {@inheritDoc}
*/
@Override
public State convertEventToState(Item item, SatelEvent event) {
if (!(event instanceof ConnectionStatusEvent)) {
// if current items state is uninitialized, "generate" fake event to update its state
if (event instanceof NewStatesEvent && this.connectedSince == null) {
event = new ConnectionStatusEvent(true);
} else {
return null;
}
}
ConnectionStatusEvent statusEvent = (ConnectionStatusEvent) event;
boolean invertState = hasOptionEnabled(Options.INVERT_STATE);
// update internal values
if (statusEvent.isConnected()) {
this.connectionFailures = 0;
if (this.connectedSince == null) {
this.connectedSince = Calendar.getInstance();
}
} else {
this.connectionFailures += 1;
this.connectedSince = null;
}
switch(this.statusType) {
case CONNECTED:
return booleanToState(item, statusEvent.isConnected() ^ invertState);
case CONNECTED_SINCE:
if (this.connectedSince == null) {
return UnDefType.NULL;
} else if (item.getAcceptedDataTypes().contains(DateTimeType.class)) {
return new DateTimeType(this.connectedSince);
}
break;
case CONNECTION_ERRORS:
if (item.getAcceptedDataTypes().contains(DecimalType.class)) {
return new DecimalType(this.connectionFailures);
}
break;
}
return null;
}
Aggregations