/** * 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.souliss.internal.network.typicals; import java.util.Iterator; import java.util.Map.Entry; import org.openhab.core.events.EventPublisher; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * This class provide to read typical state and put it on Openhab bus events * * @author Tonino Fazio * @since 1.7.0 */ public class Monitor { private SoulissTypicals soulissTypicalsRecipients; private static Logger logger = LoggerFactory.getLogger(Monitor.class); private EventPublisher eventPublisher; /** * Constructor * * @author Tonino Fazio * @since 1.7.0 */ public Monitor(SoulissTypicals typicals, int iRefreshTime, EventPublisher _eventPublisher) { soulissTypicalsRecipients = typicals; logger.info("Start MonitorThread"); eventPublisher = _eventPublisher; } /** * Check and sleep for REFRESH_TIME mills * * @author Tonino Fazio * @since 1.7.0 */ public void tick() { // Check all souliss'typicals (items) and get only the ones that // has been updated check(soulissTypicalsRecipients); } /** * Goes though the hashtable and send on the openHAB bus only the souliss' * typicals that has been updated * * @author Tonino Fazio * @since 1.7.0 * @param SoulissTypicals * typicals */ private void check(SoulissTypicals typicals) { Iterator<Entry<String, SoulissGenericTypical>> iteratorTypicals = soulissTypicalsRecipients.getIterator(); synchronized (iteratorTypicals) { while (iteratorTypicals.hasNext()) { SoulissGenericTypical typ = iteratorTypicals.next().getValue(); if (typ.isUpdated()) { // Here we start the openHAB's methods used to update the // item values if (typ.getType() == Constants.Souliss_TService_NODE_TIMESTAMP) { // All values are float out of TIMESTAMP that is a // string logger.debug("Put on Bus Events - {} = {}", typ.getName(), ((SoulissTServiceNODE_TIMESTAMP) typ).getTIMESTAMP()); } else if (typ.getType() == Constants.Souliss_T16) { // RGB Only logger.debug("Put on Bus Events - {} = {}, R={}, G={}, B={}", typ.getName(), ((SoulissT16) typ).getState(), ((SoulissT16) typ).stateRED, ((SoulissT16) typ).stateGREEN, ((SoulissT16) typ).stateBLU); } else if (typ.getType() == Constants.Souliss_T1A) { logger.debug("Put on Bus Events - {} - Bit {} - RawState: {} - Bit State: {}", typ.getName(), ((SoulissT1A) typ).getBit(), Integer.toBinaryString(((SoulissT1A) typ).getRawState()), ((SoulissT1A) typ).getBitState()); } else if (typ.getType() == Constants.Souliss_T31) { // T31 logger.debug( "Put on Bus Events - Command State: {} - Temperature Measured Value {} - Set Point {}", ((SoulissT31) typ).getRawCommandState(), ((SoulissT31) typ).getTemperatureMeasuredValue(), ((SoulissT31) typ).getSetpointValue()); } else { logger.debug("Put on Bus Events - {} = {}", typ.getName(), Float.toString(typ.getState())); } if (typ.getType() == Constants.Souliss_T16) { eventPublisher.postUpdate(typ.getName(), ((SoulissT16) typ).getOHStateRGB()); } else if (typ.getType() == Constants.Souliss_T31) { // qui inserimento dati per tipico 31 SoulissT31 typ31 = (SoulissT31) typ; if (typ31.getsItemNameMeasuredValue() != null) { eventPublisher.postUpdate(typ31.getsItemNameMeasuredValue(), typ31.getOHStateMeasuredValue()); } if (typ31.getsItemNameSetpointValue() != null) { eventPublisher.postUpdate(typ31.getsItemNameSetpointValue(), typ31.getOHStateSetpointValue()); } if (typ31.power.getName() != null) { eventPublisher.postUpdate(typ31.power.getName(), typ31.power.getOHState()); } if (typ31.heating.getName() != null) { eventPublisher.postUpdate(typ31.heating.getName(), typ31.heating.getOHState()); } if (typ31.cooling.getName() != null) { eventPublisher.postUpdate(typ31.cooling.getName(), typ31.cooling.getOHState()); } if (typ31.heatingCoolingModeValue.getName() != null) { eventPublisher.postUpdate(typ31.heatingCoolingModeValue.getName(), typ31.heatingCoolingModeValue.getOHState()); } if (typ31.fanHigh.getName() != null) { eventPublisher.postUpdate(typ31.fanHigh.getName(), typ31.fanHigh.getOHState()); } if (typ31.fanMed.getName() != null) { eventPublisher.postUpdate(typ31.fanMed.getName(), typ31.fanMed.getOHState()); } if (typ31.fanLow.getName() != null) { eventPublisher.postUpdate(typ31.fanLow.getName(), typ31.fanLow.getOHState()); } if (typ31.fanAutoMode.getName() != null) { eventPublisher.postUpdate(typ31.fanAutoMode.getName(), typ31.fanAutoMode.getOHState()); } } else if (typ.getType() == Constants.Souliss_T12) { // qui inserimento dati per tipico 12 SoulissT12 typ12 = (SoulissT12) typ; if (typ12.getOHStateAutoMode() != null) { eventPublisher.postUpdate(typ12.getsItemNameAutoModeValue(), typ12.getOHStateAutoMode()); } if (typ12.getOHStateSwitch() != null) { eventPublisher.postUpdate(typ12.getsItemNameSwitchValue(), typ12.getOHStateSwitch()); } } else { eventPublisher.postUpdate(typ.getName(), typ.getOHState()); } typ.resetUpdate(); } } } } }