/** * 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.items.NumberItem; import org.openhab.core.library.items.StringItem; import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.OnOffType; import org.openhab.core.library.types.StringType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * A Partition represents a controllable area within a DSC Alarm system * * @author Russell Stephens * @since 1.6.0 */ public class Partition extends DSCAlarmDevice { private static final Logger logger = LoggerFactory.getLogger(Partition.class); private int partitionID; /** * Constructor * * @param partitionID */ public Partition(int partitionID) { if (partitionID >= 1 && partitionID <= 8) { this.partitionID = partitionID; } else { this.partitionID = 1; } } /** * {@inheritDoc} */ @Override public void refreshItem(Item item, DSCAlarmBindingConfig config, EventPublisher publisher, int state, String description) { logger.debug("refreshItem(): Partition Item Name: {}", item.getName()); if (config != null) { if (config.getDSCAlarmItemType() != null) { switch (config.getDSCAlarmItemType()) { case PARTITION_STATUS: publisher.postUpdate(item.getName(), new StringType(description)); break; case PARTITION_ARM_MODE: publisher.postUpdate(item.getName(), new DecimalType(state)); break; case PARTITION_ARMED: publisher.postUpdate(item.getName(), (state == 1) ? OnOffType.ON : OnOffType.OFF); break; case PARTITION_ENTRY_DELAY: publisher.postUpdate(item.getName(), (state == 1) ? OnOffType.ON : OnOffType.OFF); break; case PARTITION_EXIT_DELAY: publisher.postUpdate(item.getName(), (state == 1) ? OnOffType.ON : OnOffType.OFF); break; case PARTITION_IN_ALARM: publisher.postUpdate(item.getName(), (state == 1) ? OnOffType.ON : OnOffType.OFF); break; case PARTITION_OPENING_CLOSING_MODE: if (item instanceof NumberItem) { publisher.postUpdate(item.getName(), new DecimalType(state)); } if (item instanceof StringItem) { publisher.postUpdate(item.getName(), new StringType(description)); } break; default: logger.debug("refreshItem(): Partition item not updated."); break; } } } } /** * {@inheritDoc} */ @Override public void handleEvent(Item item, DSCAlarmBindingConfig config, EventPublisher publisher, DSCAlarmEvent event) { int state = 0; int apiCode = -1; APIMessage apiMessage = null; String str = ""; if (event != null) { apiMessage = event.getAPIMessage(); apiCode = Integer.parseInt(apiMessage.getAPICode()); str = apiMessage.getAPIName(); logger.debug("handleEvent(): Partition Item Name: {}", item.getName()); if (config != null) { if (config.getDSCAlarmItemType() != null) { switch (config.getDSCAlarmItemType()) { case PARTITION_STATUS: switch (apiCode) { case 650: case 653: case 654: state = 1; break; case 651: case 672: case 673: state = 0; break; default: break; } publisher.postUpdate(item.getName(), new StringType(str)); break; case PARTITION_ARM_MODE: if (apiCode == 652) { state = Integer.parseInt(apiMessage.getMode()) + 1; } if (item instanceof NumberItem) { publisher.postUpdate(item.getName(), new DecimalType(state)); } if (item instanceof StringItem) { publisher.postUpdate(item.getName(), new StringType(str)); } break; case PARTITION_OPENING_CLOSING_MODE: switch (apiCode) { case 700: state = 1; break; case 701: state = 2; break; case 702: state = 3; break; case 750: state = 4; break; case 751: state = 5; break; default: state = 0; str = ""; break; } if (item instanceof NumberItem) { publisher.postUpdate(item.getName(), new DecimalType(state)); } if (item instanceof StringItem) { publisher.postUpdate(item.getName(), new StringType(str)); } break; default: logger.debug("handleEvent(): Partition item not updated."); break; } } } } } }