/**
* 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.StringType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* The Keypad is the central administrative unit of the DSC Alarm System
*
* @author Russell Stephens
* @since 1.6.0
*/
public class Keypad extends DSCAlarmDevice {
private static final Logger logger = LoggerFactory.getLogger(Keypad.class);
private int keypadID;
private String ledStates[] = { "Off", "On", "Flashing" };
/**
* Constructor
*
* @param keypadId
*/
public Keypad(int keypadID) {
this.keypadID = keypadID;
}
/**
* {@inheritDoc}
*/
@Override
public void refreshItem(Item item, DSCAlarmBindingConfig config, EventPublisher publisher, int state, String description) {
logger.debug("refreshItem(): Keypad Item Name: {}", item.getName());
if (config != null) {
if (config.getDSCAlarmItemType() != null) {
switch (config.getDSCAlarmItemType()) {
case KEYPAD_READY_LED:
case KEYPAD_ARMED_LED:
case KEYPAD_MEMORY_LED:
case KEYPAD_BYPASS_LED:
case KEYPAD_TROUBLE_LED:
case KEYPAD_PROGRAM_LED:
case KEYPAD_FIRE_LED:
case KEYPAD_BACKLIGHT_LED:
case KEYPAD_AC_LED:
if (item instanceof NumberItem) {
publisher.postUpdate(item.getName(), new DecimalType(state));
}
if (item instanceof StringItem) {
publisher.postUpdate(item.getName(), new StringType(ledStates[state]));
}
break;
case KEYPAD_LCD_UPDATE:
case KEYPAD_LCD_CURSOR:
publisher.postUpdate(item.getName(), new StringType(description));
break;
default:
logger.debug("refreshItem(): Keypad item not updated.");
break;
}
}
}
}
/**
* {@inheritDoc}
*/
@Override
public void handleEvent(Item item, DSCAlarmBindingConfig config, EventPublisher publisher, DSCAlarmEvent event) {
APIMessage apiMessage = null;
int state;
if (event != null) {
apiMessage = event.getAPIMessage();
logger.debug("handleEvent(): Keypad Item Name: {}", item.getName());
if (config != null) {
if (config.getDSCAlarmItemType() != null) {
switch (config.getDSCAlarmItemType()) {
case KEYPAD_READY_LED:
case KEYPAD_ARMED_LED:
case KEYPAD_MEMORY_LED:
case KEYPAD_BYPASS_LED:
case KEYPAD_TROUBLE_LED:
case KEYPAD_PROGRAM_LED:
case KEYPAD_FIRE_LED:
case KEYPAD_BACKLIGHT_LED:
case KEYPAD_AC_LED:
state = Integer.parseInt(apiMessage.getAPIData().substring(1));
if (item instanceof NumberItem) {
publisher.postUpdate(item.getName(), new DecimalType(state));
}
if (item instanceof StringItem) {
publisher.postUpdate(item.getName(), new StringType(ledStates[state]));
}
break;
case KEYPAD_LCD_UPDATE:
case KEYPAD_LCD_CURSOR:
publisher.postUpdate(item.getName(), new StringType(apiMessage.getAPIData()));
break;
default:
logger.debug("handleEvent(): Keypad item not updated.");
break;
}
}
}
}
}
}