/** * Copyright (c) 2010-2016 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.omnilink.internal.model; import org.openhab.binding.omnilink.internal.OmniLinkBindingConfig; 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.StringType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.digitaldan.jomnilinkII.MessageTypes.properties.AreaProperties; /** * Areas represent the basic security system in a Omni System * * @author Dan Cunningham * @since 1.5.0 */ public class Area extends OmnilinkDevice { private static final Logger logger = LoggerFactory.getLogger(Area.class); public static final String[] omniText = { "Off", "Day", "Night", "Away", "Vacation", "Day-Instant", "Night-Delayed" }; public static final String[] luminaText = { "Off", "Home", "Sleep", "Away", "Vacation", "Party", "Special" }; public static final String[] alarms = { "Burglary", "Fire", "Gas", "Auxiliary", "Freeze", "Water", "Duress", "Temperature" }; private AreaProperties properties; private boolean omni; public Area(AreaProperties properties, boolean omni) { this.properties = properties; this.omni = omni; } @Override public AreaProperties getProperties() { return properties; } public void setProperties(AreaProperties properties) { this.properties = properties; } /** * Returns true if the system is a omni type * * @return */ public boolean isOmni() { return omni; } /** * Set if this system is a omni type * * @param omni */ public void setOmni(boolean omni) { this.omni = omni; } @Override public void updateItem(Item item, OmniLinkBindingConfig config, EventPublisher publisher) { int setting = 0; String str = ""; switch (config.getObjectType()) { case AREA_ENTRY_TIMER: setting = properties.getEntryTimer(); break; case AREA_EXIT_TIMER: setting = properties.getExitTimer(); break; case AREA_STATUS_ENTRY_DELAY: setting = properties.getEntryDelay(); break; case AREA_STATUS_EXIT_DELAY: setting = properties.getExitDelay(); break; case AREA_STATUS_MODE: setting = properties.getMode(); str = omni ? (setting < omniText.length ? omniText[setting] : "Unknown") : (setting < luminaText.length ? luminaText[setting] : "Unknown"); break; case AREA_STATUS_ALARM: setting = properties.getAlarms(); for (int i = 0; i < alarms.length; i++) { if (((setting >> i) & 1) > 0) { if (str.length() > 0) { str += " | "; } str += alarms[i]; } } break; default: break; } logger.debug("updating item {} for type {} to {}", item.getName(), config.getObjectType(), setting); if (item instanceof NumberItem) { publisher.postUpdate(item.getName(), new DecimalType(setting)); } else if (item instanceof StringItem) { publisher.postUpdate(item.getName(), new StringType(str)); } } public int getModeForString(String mode) { String[] modes = omni ? omniText : luminaText; for (int i = 0; i < modes.length; i++) { if (modes[i].equalsIgnoreCase(mode)) { return i; } } // nothing return -1; } }