Ejemplo n.º 1
0
  /**
   * Posts update event to OpenHAB bus for "holding" type slaves
   *
   * @param binding ModbusBinding to get item configuration from BindingProviding
   * @param registers data received from slave device in the last pollInterval
   * @param itemName item to update
   */
  protected void internalUpdateItem(String slaveName, InputRegister[] registers, String itemName) {
    for (ModbusBindingProvider provider : providers) {
      if (!provider.providesBindingFor(itemName)) {
        continue;
      }
      ModbusBindingConfig config = provider.getConfig(itemName);
      if (!config.slaveName.equals(slaveName)) {
        continue;
      }

      String slaveValueType = modbusSlaves.get(slaveName).getValueType();
      double rawDataMultiplier = modbusSlaves.get(slaveName).getRawDataMultiplier();

      State newState = extractStateFromRegisters(registers, config.readRegister, slaveValueType);
      /* receive data manipulation */
      State newStateBoolean =
          provider.getConfig(itemName).translateBoolean2State(!newState.equals(DecimalType.ZERO));
      if (!UnDefType.UNDEF.equals(newStateBoolean)) {
        newState = newStateBoolean;
      } else if ((rawDataMultiplier != 1) && (config.getItem() instanceof NumberItem)) {
        double tmpValue = ((DecimalType) newState).doubleValue() * rawDataMultiplier;
        newState = new DecimalType(String.valueOf(tmpValue));
      }

      State currentState = config.getItemState();
      if (!newState.equals(currentState)) {
        eventPublisher.postUpdate(itemName, newState);
      }
    }
  }
Ejemplo n.º 2
0
  /** @{inheritDoc} */
  @Override
  protected void execute() {
    logger.trace("Connecting to {}" + baseURL);

    clearState();

    String xmlDoc = fetchStateFromController();

    if (xmlDoc == null) {
      return;
    }

    for (AutelisBindingProvider provider : providers) {
      for (String itemName : provider.getItemNames()) {
        Item item = provider.getItem(itemName);
        String config = provider.getAutelisBindingConfigString(itemName);
        XPathFactory xpathFactory = XPathFactory.newInstance();
        XPath xpath = xpathFactory.newXPath();
        try {
          InputSource is = new InputSource(new StringReader(xmlDoc));
          String value = xpath.evaluate("response/" + config.replace('.', '/'), is);
          State state = toState(item.getClass(), value);
          State oldState = stateMap.put(itemName, state);
          if (!state.equals(oldState)) {
            logger.debug("updating item {} with state {}", itemName, state);
            eventPublisher.postUpdate(itemName, state);
          }
        } catch (XPathExpressionException e) {
          logger.warn("could not parse xml", e);
        }
      }
    }
  }
Ejemplo n.º 3
0
  @Override
  protected void internalReceiveUpdate(String itemName, State newState) {

    MqttItemConfig itemConfig = getBindingProvider().getItemConfig(itemName);

    for (MqttMessagePublisher publisher : itemConfig.getMessagePublishers()) {
      if (publisher.supportsState(newState)) {
        logger.debug("Publishing state {} to {}", newState.toString(), publisher.getTopic());
        publisher.publish(publisher.getTopic(), newState.toString().getBytes());
      }
    }
  }
Ejemplo n.º 4
0
 @Override
 public void complete_ValidState(
     EObject model,
     RuleCall ruleCall,
     ContentAssistContext context,
     ICompletionProposalAcceptor acceptor) {
   super.complete_ValidState(model, ruleCall, context, acceptor);
   for (State state : stateAndCommandProvider.getAllStates()) {
     if (state.toString().startsWith(context.getPrefix())) {
       acceptor.accept(createCompletionProposal(state.toString(), context));
     }
   }
 }
Ejemplo n.º 5
0
 /**
  * Posts update event to OpenHAB bus for "coil" type slaves
  *
  * @param binding ModbusBinding to get item configuration from BindingProviding
  * @param registers data received from slave device in the last pollInterval
  * @param item item to update
  */
 protected void internalUpdateItem(String slaveName, BitVector coils, String itemName) {
   for (ModbusBindingProvider provider : providers) {
     if (provider.providesBindingFor(itemName)) {
       ModbusBindingConfig config = provider.getConfig(itemName);
       if (config.slaveName.equals(slaveName)) {
         boolean state = coils.getBit(config.readRegister);
         State currentState = provider.getConfig(itemName).getItemState();
         State newState = provider.getConfig(itemName).translateBoolean2State(state);
         if (!newState.equals(currentState)) {
           eventPublisher.postUpdate(itemName, newState);
         }
       }
     }
   }
 }
Ejemplo n.º 6
0
 /* (non-Javadoc)
  * @see org.openhab.core.binding.AbstractBinding#internalReceiveUpdate(java.lang.String, org.openhab.core.types.State)
  */
 @Override
 protected void internalReceiveUpdate(String itemName, State newState) {
   logger.debug("Received update (item='{}', state='{}')", itemName, newState.toString());
   if (!isEcho(itemName, newState)) {
     writeToKNX(itemName, newState);
   }
 }
Ejemplo n.º 7
0
 @Override
 public String toString() {
   return DateFormat.getDateTimeInstance().format(timestamp)
       + ": "
       + name
       + " -> "
       + state.toString();
 }
Ejemplo n.º 8
0
  /** {@inheritDoc} */
  @Override
  protected void internalReceiveUpdate(String itemName, State newState) {
    logger.trace(
        "internalReceiveUpdate: itemName '{}', newState '{}', class '{}'",
        new Object[] {itemName, newState, newState.getClass()});

    // No need to implement this for MiOS Bridge Binding since anything
    // that needs to be sent back to the MiOS System will be done via a
    // Command.
    //
    // We leave this here to aid debugging. We get more
    // information out of the above logger call than we get from openHAB.
  }
  /** {@inheritDoc} */
  public EList<Widget> renderWidget(Widget w, StringBuilder sb) throws RenderException {
    Switch s = (Switch) w;

    String snippetName = null;
    Item item;
    try {
      item = itemUIRegistry.getItem(w.getItem());
      if (s.getMappings().size() == 0) {
        if (item instanceof RollershutterItem) {
          snippetName = "rollerblind";
        } else if (item instanceof GroupItem
            && ((GroupItem) item).getBaseItem() instanceof RollershutterItem) {
          snippetName = "rollerblind";
        } else {
          snippetName = "switch";
        }
      } else {
        snippetName = "buttons";
      }
    } catch (ItemNotFoundException e) {
      logger.warn("Cannot determine item type of '{}'", w.getItem(), e);
      snippetName = "switch";
    }

    String snippet = getSnippet(snippetName);

    snippet = StringUtils.replace(snippet, "%id%", itemUIRegistry.getWidgetId(w));
    System.out.println("\nSwitchRenderer->getICon->" + itemUIRegistry.getIcon(w));
    snippet = StringUtils.replace(snippet, "%icon%", escapeURLPath(itemUIRegistry.getIcon(w)));
    snippet = StringUtils.replace(snippet, "%item%", w.getItem());
    snippet = StringUtils.replace(snippet, "%label%", getLabel(w));
    snippet = StringUtils.replace(snippet, "%servletname%", WebAppServlet.SERVLET_NAME);

    State state = itemUIRegistry.getState(w);

    System.out.println("\nSwitchRenderer->getState->" + state.toString());
    if (s.getMappings().size() == 0) {

      if (state instanceof PercentType) {
        state = ((PercentType) state).intValue() > 0 ? OnOffType.ON : OnOffType.OFF;
      }
      if (state.equals(OnOffType.ON)) {
        snippet = snippet.replaceAll("%checked%", "checked=true");
      } else {
        snippet = snippet.replaceAll("%checked%", "");
      }
    } else {
      StringBuilder buttons = new StringBuilder();
      for (Mapping mapping : s.getMappings()) {
        String button = getSnippet("button");
        button = StringUtils.replace(button, "%item%", w.getItem());
        button = StringUtils.replace(button, "%cmd%", mapping.getCmd());
        button = StringUtils.replace(button, "%label%", mapping.getLabel());
        if (s.getMappings().size() > 1 && state.toString().equals(mapping.getCmd())) {
          button = StringUtils.replace(button, "%type%", "Warn"); // button with red color
        } else {
          button = StringUtils.replace(button, "%type%", "Action"); // button with blue color
        }
        buttons.insert(0, button);
      }
      snippet = StringUtils.replace(snippet, "%buttons%", buttons.toString());
    }

    // Process the color tags
    snippet = processColor(w, snippet);

    sb.append(snippet);
    return null;
  }
Ejemplo n.º 10
0
  private void internalPropertyUpdate(String property, State value, boolean incremental)
      throws Exception {
    int bound = 0;

    if (value == null) {
      logger.trace("internalPropertyUpdate: Value is null for Property '{}', ignored.", property);
      return;
    }

    for (BindingProvider provider : providers) {
      if (provider instanceof MiosBindingProvider) {
        MiosBindingProviderImpl miosProvider = (MiosBindingProviderImpl) provider;

        for (String itemName : miosProvider.getItemNamesForProperty(property)) {

          MiosBindingConfig config = miosProvider.getMiosBindingConfig(itemName);

          if (config != null) {
            // Transform whatever value we have, based upon the
            // Transformation Service specified in the Binding
            // Config.

            State newValue = config.transformIn(value);

            if (newValue != value) {
              logger.trace(
                  "internalPropertyUpdate: transformation performed, from '{}' to '{}'",
                  value,
                  newValue);
            }

            //
            // Set the value only if:
            // * we're running Incrementally OR;
            // * the CURRENT value is UNDEFINED OR;
            // * the CURRENT value is different from the NEW value
            //
            // This is to handle a case where the MiOS Unit
            // "restarts" and floods us with a bunch of the same
            // data. In this case, we don't want to flood the Items,
            // since it may re-trigger a bunch of Rules in an
            // unnecessary manner.
            //
            if (incremental) {
              logger.debug(
                  "internalPropertyUpdate: BOUND (Incr) Updating '{} {mios=\"{}\"}' to '{}'",
                  itemName,
                  property,
                  newValue);

              eventPublisher.postUpdate(itemName, newValue);
            } else {
              ItemRegistry reg = miosProvider.getItemRegistry();
              State oldValue = reg.getItem(itemName).getState();

              if ((oldValue == null && newValue != null)
                  || (UnDefType.UNDEF.equals(oldValue) && !UnDefType.UNDEF.equals(newValue))
                  || !oldValue.equals(newValue)) {
                logger.debug(
                    "internalPropertyUpdate: BOUND (Full) Updating '{} {mios=\"{}\"}' to '{}', was '{}'",
                    new Object[] {itemName, property, newValue, oldValue});

                eventPublisher.postUpdate(itemName, newValue);
              } else {
                logger.trace(
                    "internalPropertyUpdate: BOUND (Full) Ignoring '{} {mios=\"{}\"}' to '{}', was '{}'",
                    new Object[] {itemName, property, newValue, oldValue});
              }
            }
            bound++;
          } else {
            logger.trace(
                "internalPropertyUpdate: Found null BindingConfig for item '{}' property '{}'",
                itemName,
                property);
          }
        }
      }
    }

    if (bound == 0) {
      logger.trace("internalPropertyUpdate: NOT BOUND {mios=\"{}\"}, value={}", property, value);
    } else {
      logger.trace(
          "internalPropertyUpdate: BOUND {mios=\"{}\"}, value={}, bound {} time(s)",
          new Object[] {property, value, bound});
    }
  }