use of com.daveoxley.cbus.Network in project openhab-addons by openhab.
the class CBusNetworkHandler method checkNetworkOnline.
private void checkNetworkOnline() {
Network network = getNetwork();
try {
if (network != null && network.isOnline()) {
logger.debug("Network is online");
ScheduledFuture<?> initNetwork = this.initNetwork;
if (initNetwork != null) {
initNetwork.cancel(false);
this.initNetwork = null;
}
} else {
ThingStatus lastStatus = getThing().getStatus();
logger.debug("Network still not online {}", lastStatus);
}
} catch (CGateException e) {
logger.warn("Cannot check if network is online {} ", network.getNetworkID());
}
updateStatus();
}
use of com.daveoxley.cbus.Network in project openhab-addons by openhab.
the class CBusNetworkHandler method cgateOnline.
private void cgateOnline() {
CBusNetworkConfiguration configuration = this.configuration;
if (configuration == null) {
logger.debug("cgateOnline - NetworkHandler not initialised");
return;
}
ThingStatus lastStatus = getThing().getStatus();
logger.debug("cgateOnline {}", lastStatus);
Integer networkID = configuration.id;
String project = configuration.project;
logger.debug("cgateOnline netid {} project {}", networkID, project);
Project projectObject = getProjectObject();
Network network = getNetwork();
logger.debug("network {}", network);
CBusCGateHandler cbusCGateHandler = getCBusCGateHandler();
if (cbusCGateHandler == null) {
logger.debug("NoCGateHandler");
return;
}
try {
if (projectObject == null) {
CGateSession session = cbusCGateHandler.getCGateSession();
if (session != null) {
try {
projectObject = (Project) session.getCGateObject("//" + project);
this.projectObject = projectObject;
} catch (CGateException ignore) {
// We dont need to do anything other than stop this propagating
}
}
if (projectObject == null) {
logger.debug("Cant get projectobject");
return;
}
}
if (network == null) {
CGateSession session = cbusCGateHandler.getCGateSession();
if (session != null) {
try {
network = (Network) session.getCGateObject("//" + project + "/" + networkID);
this.network = network;
} catch (CGateException ignore) {
// We dont need to do anything other than stop this propagating
}
}
if (network == null) {
logger.debug("cgateOnline: Cant get network");
return;
}
}
String state = network.getState();
logger.debug("Network state is {}", state);
if ("new".equals(state)) {
projectObject.start();
logger.debug("Need to wait for it to be synced");
} else if ("sync".equals(state)) {
logger.debug("Network is syncing so wait for it to be ok");
}
if (!"ok".equals(state)) {
ScheduledFuture<?> initNetwork = this.initNetwork;
if (initNetwork == null || initNetwork.isCancelled()) {
this.initNetwork = scheduler.scheduleWithFixedDelay(this::checkNetworkOnline, 30, 30, TimeUnit.SECONDS);
logger.debug("Schedule a check every minute");
} else {
logger.debug("initNetwork alreadys started");
}
updateStatus();
return;
}
} catch (CGateException e) {
logger.warn("Cannot load C-Bus network {}", networkID, e);
updateStatus(ThingStatus.UNINITIALIZED, ThingStatusDetail.COMMUNICATION_ERROR);
}
updateStatus();
}
use of com.daveoxley.cbus.Network in project openhab-addons by openhab.
the class CBusNetworkHandler method doNetworkSync.
private void doNetworkSync() {
Network network = getNetwork();
try {
if (getThing().getStatus().equals(ThingStatus.ONLINE) && network != null) {
logger.info("Starting network sync on network {}", network.getNetworkID());
network.startSync();
}
} catch (CGateException e) {
logger.warn("Cannot start network sync on network {} - {}", network.getNetworkID(), e.getMessage());
}
}
use of com.daveoxley.cbus.Network in project openhab-addons by openhab.
the class CBusGroupDiscovery method startScan.
@Override
protected synchronized void startScan() {
if (cbusNetworkHandler.getThing().getStatus().equals(ThingStatus.ONLINE)) {
ThingUID bridgeUid = cbusNetworkHandler.getThing().getBridgeUID();
if (bridgeUid == null) {
scanFinished();
return;
}
try {
Map<Integer, ThingTypeUID> applications = new HashMap<Integer, ThingTypeUID>();
applications.put(CBusBindingConstants.CBUS_APPLICATION_LIGHTING, CBusBindingConstants.THING_TYPE_LIGHT);
applications.put(CBusBindingConstants.CBUS_APPLICATION_DALI, CBusBindingConstants.THING_TYPE_DALI);
applications.put(CBusBindingConstants.CBUS_APPLICATION_TEMPERATURE, CBusBindingConstants.THING_TYPE_TEMPERATURE);
applications.put(CBusBindingConstants.CBUS_APPLICATION_TRIGGER, CBusBindingConstants.THING_TYPE_TRIGGER);
Network network = cbusNetworkHandler.getNetwork();
if (network == null) {
scanFinished();
return;
}
for (Map.Entry<Integer, ThingTypeUID> applicationItem : applications.entrySet()) {
Application application = network.getApplication(applicationItem.getKey());
if (application == null) {
continue;
}
ArrayList<Group> groups = application.getGroups(false);
for (Group group : groups) {
logger.debug("Found group: {} {} {}", application.getName(), group.getGroupID(), group.getName());
Map<String, Object> properties = new HashMap<>();
properties.put(CBusBindingConstants.PROPERTY_APPLICATION_ID, Integer.toString(applicationItem.getKey()));
properties.put(CBusBindingConstants.CONFIG_GROUP_ID, Integer.toString(group.getGroupID()));
properties.put(CBusBindingConstants.PROPERTY_GROUP_NAME, group.getName());
properties.put(CBusBindingConstants.PROPERTY_NETWORK_ID, Integer.toString(network.getNetworkID()));
ThingUID uid = new ThingUID(applicationItem.getValue(), Integer.toString(group.getGroupID()), bridgeUid.getId(), cbusNetworkHandler.getThing().getUID().getId());
DiscoveryResult result = DiscoveryResultBuilder.create(uid).withProperties(properties).withLabel("CBUS " + group.getName() + "(" + group.getGroupID() + ")").withBridge(cbusNetworkHandler.getThing().getUID()).build();
thingDiscovered(result);
}
}
} catch (CGateException e) {
logger.debug("Failed to discover groups", e);
}
}
scanFinished();
}
use of com.daveoxley.cbus.Network in project openhab-addons by openhab.
the class CBusGroupHandler method getGroup.
@Nullable
private Group getGroup() {
try {
CBusNetworkHandler networkHandler = cBusNetworkHandler;
if (networkHandler == null) {
return null;
}
Network network = networkHandler.getNetwork();
if (network != null) {
Application application = network.getApplication(applicationId);
if (application == null) {
logger.debug("getGroup() Cant get application for id {}", applicationId);
return null;
}
logger.debug("GetGroup for {}/id {}", applicationId, groupId);
return application.getGroup(groupId);
}
} catch (CGateException e) {
logger.debug("GetGroup for id {}/{} failed {}", applicationId, groupId, e.getMessage());
}
return null;
}
Aggregations