/**
* 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.DimmerItem;
import org.openhab.core.library.items.StringItem;
import org.openhab.core.library.items.SwitchItem;
import org.openhab.core.library.types.OnOffType;
import org.openhab.core.library.types.PercentType;
import org.openhab.core.library.types.StringType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.digitaldan.jomnilinkII.MessageTypes.properties.UnitProperties;
/**
* Units are most commonly lights, they can also be flags
*
* @author Dan Cunningham
* @since 1.5.0
*/
public class Unit extends OmnilinkDevice {
private static final Logger logger = LoggerFactory.getLogger(Unit.class);
public static final int UNIT_OFF = 0;
public static final int UNIT_ON = 1;
public static final int UNIT_SCENE_A = 2;
public static final int UNIT_SCENE_L = 13;
public static final int UNIT_DIM_1 = 17;
public static final int UNIT_DIM_9 = 25;
public static final int UNIT_BRIGHTEN_1 = 33;
public static final int UNIT_BRIGHTEN_9 = 41;
public static final int UNIT_LEVEL_0 = 100;
public static final int UNIT_LEVEL_100 = 200;
private UnitProperties properties;
private int prevLevel = 0;
public Unit(UnitProperties properties) {
this.properties = properties;
}
@Override
public UnitProperties getProperties() {
return properties;
}
public void setProperties(UnitProperties properties) {
this.properties = properties;
}
@Override
public void updateItem(Item item, OmniLinkBindingConfig config, EventPublisher publisher) {
int status = properties.getState();
logger.debug("Unit state {}", status);
int level = prevLevel;
String display = "Off";
if (status == UNIT_ON) {
level = 100;
display = "On";
} else if ((status >= UNIT_SCENE_A) && (status <= UNIT_SCENE_L)) {
level = 100;
display = String.format("Scene %c", status - UNIT_SCENE_A + 'A');
} else if ((status >= UNIT_DIM_1) && (status <= UNIT_DIM_9)) {
display = String.format("Dim %d", level);
} else if ((status >= UNIT_BRIGHTEN_1) && (status <= UNIT_BRIGHTEN_9)) {
display = String.format("Brighten %d", level);
} else if ((status >= UNIT_LEVEL_0) && (status <= UNIT_LEVEL_100)) {
level = status - UNIT_LEVEL_0;
display = String.format("Level %d", level);
}
if (item instanceof DimmerItem) {
logger.debug("updating percent type {}", level);
publisher.postUpdate(item.getName(), new PercentType(level));
} else if (item instanceof SwitchItem) {
logger.debug("updating switch type {}", level > 0 ? OnOffType.ON : OnOffType.OFF);
publisher.postUpdate(item.getName(), level > 0 ? OnOffType.ON : OnOffType.OFF);
} else if (item instanceof StringItem) {
logger.debug("updating string type {}", display);
publisher.postUpdate(item.getName(), new StringType(display));
}
}
}