/**
* Copyright (c) 2010-2017 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.openhab.binding.dscalarm1.internal.model;
import org.openhab.binding.dscalarm1.DSCAlarmBindingConfig;
import org.openhab.binding.dscalarm1.internal.DSCAlarmEvent;
import org.openhab.binding.dscalarm1.internal.protocol.APIMessage;
import org.openhab.core.events.EventPublisher;
import org.openhab.core.items.Item;
import org.openhab.core.library.types.DecimalType;
import org.openhab.core.library.types.OnOffType;
import org.openhab.core.library.types.OpenClosedType;
import org.openhab.core.library.types.StringType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* A Zone represents a physical device such as a door, window, or motion sensor
*
* @author Russell Stephens
* @since 1.6.0
*/
public class Zone extends DSCAlarmDevice {
private static final Logger logger = LoggerFactory.getLogger(Zone.class);
private int zoneID;
private int partitionID;
/**
* Constructor
*
* @param partitionID
* @param zoneID
*/
public Zone(int partitionID, int zoneID) {
if (partitionID >= 1 && partitionID <= 8) {
this.partitionID = partitionID;
}
this.zoneID = zoneID;
}
/**
* {@inheritDoc}
*/
@Override
public void refreshItem(Item item, DSCAlarmBindingConfig config, EventPublisher publisher, int state, String description) {
logger.debug("refreshItem(): Zone Item Name: {}", item.getName());
if (config != null) {
if (config.getDSCAlarmItemType() != null) {
switch (config.getDSCAlarmItemType()) {
case ZONE_ALARM_STATUS:
publisher.postUpdate(item.getName(), new StringType(description));
break;
case ZONE_TAMPER_STATUS:
publisher.postUpdate(item.getName(), new StringType(description));
break;
case ZONE_FAULT_STATUS:
publisher.postUpdate(item.getName(), new StringType(description));
break;
case ZONE_GENERAL_STATUS:
publisher.postUpdate(item.getName(), (state == 1) ? OpenClosedType.OPEN : OpenClosedType.CLOSED);
break;
case ZONE_BYPASS_MODE:
publisher.postUpdate(item.getName(), new DecimalType(state));
break;
case ZONE_IN_ALARM:
publisher.postUpdate(item.getName(), (state == 1) ? OnOffType.ON : OnOffType.OFF);
break;
case ZONE_TAMPER:
publisher.postUpdate(item.getName(), (state == 1) ? OnOffType.ON : OnOffType.OFF);
break;
case ZONE_FAULT:
publisher.postUpdate(item.getName(), (state == 1) ? OnOffType.ON : OnOffType.OFF);
break;
case ZONE_TRIPPED:
publisher.postUpdate(item.getName(), (state == 1) ? OnOffType.ON : OnOffType.OFF);
break;
default:
logger.debug("refreshItem(): Zone item not updated.");
break;
}
}
}
}
/**
* {@inheritDoc}
*/
@Override
public void handleEvent(Item item, DSCAlarmBindingConfig config, EventPublisher publisher, DSCAlarmEvent event) {
int apiCode = -1;
APIMessage apiMessage = null;
String str = "Status Unknown!";
if (event != null) {
apiMessage = event.getAPIMessage();
apiCode = Integer.parseInt(apiMessage.getAPICode());
str = apiMessage.getAPIName();
logger.debug("handleEvent(): Zone Item Name: {}", item.getName());
if (config != null) {
if (config.getDSCAlarmItemType() != null) {
switch (config.getDSCAlarmItemType()) {
case ZONE_ALARM_STATUS:
publisher.postUpdate(item.getName(), new StringType(str));
break;
case ZONE_TAMPER_STATUS:
publisher.postUpdate(item.getName(), new StringType(str));
break;
case ZONE_FAULT_STATUS:
publisher.postUpdate(item.getName(), new StringType(str));
break;
case ZONE_GENERAL_STATUS:
publisher.postUpdate(item.getName(), (apiCode == 609) ? OpenClosedType.OPEN : OpenClosedType.CLOSED);
break;
default:
logger.debug("handleEvent(): Zone item not updated.");
break;
}
}
}
}
}
}