use of org.openhab.binding.satel.SatelBindingProvider in project openhab1-addons by openhab.
the class SatelBinding method internalReceiveCommand.
/**
* {@inheritDoc}
*/
@Override
protected void internalReceiveCommand(String itemName, Command command) {
if (!isProperlyConfigured()) {
logger.warn("Binding not properly configured, exiting");
return;
}
if (!this.satelModule.isInitialized()) {
logger.debug("Module not initialized yet, ignoring command");
return;
}
for (SatelBindingProvider provider : providers) {
SatelBindingConfig itemConfig = provider.getItemConfig(itemName);
if (itemConfig != null) {
logger.trace("Sending internal command for item {}: {}", itemName, command);
SatelCommand satelCmd = itemConfig.convertCommand(command, this.satelModule.getIntegraType(), getUserCode());
if (satelCmd != null) {
this.satelModule.sendCommand(satelCmd);
}
break;
}
}
}
use of org.openhab.binding.satel.SatelBindingProvider 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.SatelBindingProvider in project openhab1-addons by openhab.
the class SatelBinding method getRefreshCommands.
private List<SatelCommand> getRefreshCommands(NewStatesEvent nse) {
logger.trace("Gathering refresh commands from all items");
boolean forceRefresh = switchForceRefresh(false);
List<SatelCommand> commands = new LinkedList<SatelCommand>();
for (SatelBindingProvider provider : providers) {
for (String itemName : provider.getItemNames()) {
logger.trace("Getting refresh command from item: {}", itemName);
SatelBindingConfig itemConfig = provider.getItemConfig(itemName);
SatelCommand command = itemConfig.buildRefreshCommand(this.satelModule.getIntegraType());
if (command == null || commands.contains(command)) {
continue;
}
// either state has changed or this is status command (so likely RTC has changed)
// also if item hasn't received any update yet or refresh is forced
// get the latest value from the module
byte commandCode = command.getRequest().getCommand();
if (forceRefresh || !itemConfig.isItemInitialized() || (nse != null && nse.isNew(commandCode)) || commandCode == IntegraStatusCommand.COMMAND_CODE) {
commands.add(command);
}
}
}
return commands;
}
Aggregations