HBW-IO-Modul Onewire zufügen

Begonnen von a_quadrat, 03 Mai 2020, 23:14:48

Vorheriges Thema - Nächstes Thema

a_quadrat

Hallo Zusammen,

ich habe ein IO-Modul mit 6 Eingängen, 4 Ausgängen und einen Rollladen Channel. Ich würde gern noch ein onewire Kanal zufügen.
Die Kanäle werden alle angelegt, aber die Temperatur wird nicht angezeigt. Hat jemand eine Idee, wo der Fehler liegen kann?

Anbei der Sketch und die XML


//*******************************************************************
//
// HBW-IO-6-4-Sen-BL-1-OW
//
// Homematic Wired Hombrew Hardware, 6 Input, 4 Output, 1 Blind, 1 Onewire
// Arduino NANO als Homematic-Device
//
// - Direktes Peering für Blind und Switch möglich. (HBWLinkBlindSimple)
// - Direktes Peering für Taster. (HBWLinkKey)
//
//
//
//*******************************************************************
// Changes
// v0.01
// - initial version

#define HARDWARE_VERSION 0x01
#define FIRMWARE_VERSION 0x0001
#define HMW_DEVICETYPE 0x97 //device ID

#define NUMBER_OF_INPUT_CHAN 6  // input channel - pushbutton, key, other digital in
#define NUMBER_OF_SEN_INPUT_CHAN 6  // equal number of sensor channels, using same ports/IOs as INPUT_CHAN
#define NUMBER_OF_OUT_CHAN 4  // digital output channels
#define NUMBER_OF_BL_CHAN 1  // digital output channels
#define NUMBER_OF_TEMP_CHAN 1 // input channels - 1-wire temperature sensors
#define ADDRESS_START_CONF_TEMP_CHAN 0x7 // first EEPROM address for temperature sensors configuration
#define LINKADDRESSSTART_TEMP 0xE6 

//#define NUM_LINKS_OUT 20    // address step 7
//#define LINKADDRESSSTART_OUT 0x038   // ends @0x37F
#define NUM_LINKS_INPUT 20    // address step 6
#define LINKADDRESSSTART_INPUT 0x380   // ends @0x3F7
#define NUM_LINKS_BL 20    // address step 9
#define LINKADDRESSSTART_BL 0x038


//#define USE_HARDWARE_SERIAL   // use hardware serial (USART) for final device - this disables debug output
/* Undefine "HBW_DEBUG" in 'HBWired.h' to remove code not needed. "HBW_DEBUG" also works as master switch,
* as hbwdebug() or hbwdebughex() used in channels will point to empty functions. */


// HB Wired protocol and module
#include <HBWired.h>
#include <HBWLinkKey.h>
#include <HBWKey.h>
//#include <HBWLinkSwitchSimple.h>
#include <HBWSwitch.h>
#include <HBWSenSC.h>
#include <HBWLinkBlindSimple.h>
#include <HBWBlind.h>
#include <HBWOneWireTempSensors.h>
#include <HBWLinkInfoEventSensor.h>

// Pins

  #define RS485_RXD 5
  #define RS485_TXD 2
  #define RS485_TXEN 3  // Transmit-Enable
  #define BUTTON 8  // Button fuer Factory-Reset
  #define ADC_BUS_VOLTAGE A7  // analog input to measure bus voltage

  #define OU01 A0 
  #define OU02 A1
  #define OU03 A2
  #define OU04 A3
  #define BLIND1_ACT A4  // "Ein-/Aus-Relais"
  #define BLIND1_DIR A5  // "Richungs-Relais"

  #define IO1 6
  #define IO2 7
  #define IO3 9
  #define IO4 10
  #define IO5 11
  #define IO6 12

  #define ONEWIRE_PIN 04 // Onewire Bus

  #include "FreeRam.h"
  #include <HBWSoftwareSerial.h>
  HBWSoftwareSerial rs485(RS485_RXD, RS485_TXD); // RX, TX


#define LED LED_BUILTIN        // Signal-LED

#define NUMBER_OF_CHAN NUMBER_OF_OUT_CHAN + NUMBER_OF_INPUT_CHAN + NUMBER_OF_SEN_INPUT_CHAN + NUMBER_OF_BL_CHAN + NUMBER_OF_TEMP_CHAN


struct hbw_config {
  uint8_t logging_time;     // 0x01
  uint32_t central_address;  // 0x02 - 0x05
  uint8_t direct_link_deactivate:1;   // 0x06:0
  uint8_t              :7;   // 0x06:1-7
  hbw_config_switch switchCfg[NUMBER_OF_OUT_CHAN]; // 0x07 - 0x0E (address step 2)
  hbw_config_senSC senCfg[NUMBER_OF_SEN_INPUT_CHAN]; // 0x0F - 0x14 (address step 1)
  hbw_config_key keyCfg[NUMBER_OF_INPUT_CHAN]; // 0x15 - 0x20 (address step 2) 
  hbw_config_blind blindCfg[NUMBER_OF_BL_CHAN]; // 0x21-0x27 (address step 7)
  hbw_config_onewire_temp TempOWCfg[NUMBER_OF_TEMP_CHAN]; // 0x28 - 0x.. (address step 14)
} hbwconfig;


HBWChannel* channels[NUMBER_OF_CHAN];  // total number of channels for the device

hbw_config_onewire_temp* tempConfig[NUMBER_OF_TEMP_CHAN]; // global pointer for OneWire channels config

class HBIODevice : public HBWDevice {
    public:
    HBIODevice(uint8_t _devicetype, uint8_t _hardware_version, uint16_t _firmware_version,
               Stream* _rs485, uint8_t _txen,
               uint8_t _configSize, void* _config,
               uint8_t _numChannels, HBWChannel** _channels,
               Stream* _debugstream, HBWLinkSender* linksender = NULL, HBWLinkReceiver* linkreceiver = NULL,
               OneWire* oneWire = NULL, hbw_config_onewire_temp** _tempSensorconfig = NULL) :
    HBWDevice(_devicetype, _hardware_version, _firmware_version,
              _rs485, _txen, _configSize, _config, _numChannels, ((HBWChannel**)(_channels)),
              _debugstream, linksender, linkreceiver) {
               
                d_ow = oneWire;
                tempSensorconfig = _tempSensorconfig;
    };
    virtual void afterReadConfig();

    private:
      OneWire* d_ow;
      hbw_config_onewire_temp** tempSensorconfig;
};

// device specific defaults
void HBIODevice::afterReadConfig() {
  if(hbwconfig.logging_time == 0xFF) hbwconfig.logging_time = 50;
 
  HBWOneWireTemp::sensorSearch(d_ow, tempSensorconfig, (uint8_t) NUMBER_OF_TEMP_CHAN, (uint8_t) ADDRESS_START_CONF_TEMP_CHAN);
};

HBIODevice* device = NULL;



void setup()
{


    //  variables for all OneWire channels
  OneWire* g_ow = new OneWire(ONEWIRE_PIN);
  uint32_t g_owLastReadTime = 0;
  uint8_t g_owCurrentChannel = OW_CHAN_INIT; // always init with OW_CHAN_INIT! used as trigger/reset in channel loop()
 

  // create channels


#if NUMBER_OF_OUT_CHAN == 4
  static const uint8_t Out_Chan[4] = {OU01, OU02, OU03, OU04};  // assing pins
 
  for(uint8_t i = 0; i < NUMBER_OF_OUT_CHAN; i++) {
    channels[i] = new HBWSwitch(Out_Chan[i], &(hbwconfig.switchCfg[i]));
  };
#else
  #error Out channel count and pin missmatch!
#endif

#if NUMBER_OF_SEN_INPUT_CHAN == 6
  static const uint8_t Sen_Chan[6] = {IO1, IO2, IO3, IO4, IO5, IO6};  // assing pins
 
  for(uint8_t i = 0; i < NUMBER_OF_SEN_INPUT_CHAN; i++) {
    channels[i + NUMBER_OF_OUT_CHAN] = new HBWSenSC(Sen_Chan[i], &(hbwconfig.senCfg[i]));
  };
#else
  #error Sen channel count and pin missmatch!
#endif


#if NUMBER_OF_INPUT_CHAN == 6
  static const uint8_t In_Chan[6] = {IO1, IO2, IO3, IO4, IO5, IO6};  // assing pins
   
  for(uint8_t i = 0; i < NUMBER_OF_INPUT_CHAN; i++) {
    channels[i + NUMBER_OF_OUT_CHAN + NUMBER_OF_SEN_INPUT_CHAN] = new HBWKey(In_Chan[i], &(hbwconfig.keyCfg[i]));
  };
#else
  #error Input channel count and pin missmatch!
#endif

#if NUMBER_OF_BL_CHAN == 1
  static const uint8_t blindDir[1] = {BLIND1_DIR};
  static const uint8_t blindAct[1] = {BLIND1_ACT};
   
  for(uint8_t i = 0; i < NUMBER_OF_BL_CHAN; i++) {
    channels[i + NUMBER_OF_OUT_CHAN + NUMBER_OF_SEN_INPUT_CHAN + NUMBER_OF_INPUT_CHAN] = new HBWChanBl(blindDir[i], blindAct[i], &(hbwconfig.blindCfg[i]));
  };
#else
  #error BL channel count and pin missmatch!
#endif

#if NUMBER_OF_TEMP_CHAN == 1
   
  for(uint8_t i = 0; i < NUMBER_OF_TEMP_CHAN; i++) {
    channels[i + NUMBER_OF_OUT_CHAN + NUMBER_OF_SEN_INPUT_CHAN + NUMBER_OF_INPUT_CHAN + NUMBER_OF_BL_CHAN] = new HBWOneWireTemp(g_ow, &(hbwconfig.TempOWCfg[i]), &g_owLastReadTime, &g_owCurrentChannel);
    tempConfig[i + NUMBER_OF_OUT_CHAN + NUMBER_OF_SEN_INPUT_CHAN + NUMBER_OF_INPUT_CHAN + NUMBER_OF_BL_CHAN] = &(hbwconfig.TempOWCfg[i]);
  }
#else
  #error OW channel count and pin missmatch!
#endif

#ifndef NO_DEBUG_OUTPUT
  Serial.begin(19200);  // Serial->USB for debug
#endif
  rs485.begin();

device = new HBIODevice(HMW_DEVICETYPE, HARDWARE_VERSION, FIRMWARE_VERSION,
                         &rs485,RS485_TXEN,sizeof(hbwconfig),&hbwconfig,
                         NUMBER_OF_CHAN,(HBWChannel**)channels,
#ifdef NO_DEBUG_OUTPUT
                         NULL,
  #else
                         &Serial,
  #endif
                         new HBWLinkKey<NUM_LINKS_INPUT,LINKADDRESSSTART_INPUT>(), new HBWLinkBlindSimple<NUM_LINKS_BL,LINKADDRESSSTART_BL>());
                         
                       
                         
                         
device->setConfigPins(BUTTON, LED);  // 8 (button) and 13 (led) is the default
                         
#ifndef NO_DEBUG_OUTPUT
  hbwdebug(F("B: 2A "));
  hbwdebug(freeRam());
  hbwdebug(F("\n"));
#endif
 
 

}


void loop()
{
  device->loop();
};



<?xml version="1.0"?>
<device eep_size="1024" version="14">
<supported_types>
<type priority="2" id="HBW-IO-6-BL-1-OW" name="RS485 6-channel master out actuator and 6 Digital inputs and blind">
<parameter const_value="0x97" size="1" index="0"/><!--HMW_DEVICETYPE-->
<parameter const_value="1" size="1" index="1"/><!--HARDWARE_VERSION-->
<parameter const_value="0x0001" size="2" cond_op="GE" index="2"/><!--Min. FIRMWARE_VERSION-->
</type>
</supported_types>

<paramset id="HBW-IO-6-BL-1-OW_dev_master" type="MASTER">
<parameter id="LOGGING_TIME">
<logical type="float" unit="s" default="5.0" max="25.5" min="0.1"/>
<physical size="1.0" type="integer" interface="eeprom">
<address index="0x0001"/>
</physical>
<conversion type="float_integer_scale" offset="0.0" factor="10"/>
</parameter>
<parameter id="CENTRAL_ADDRESS" hidden="true">
<logical type="integer"/>
<physical size="4" type="integer" interface="eeprom">
<address index="0x0002"/>
</physical>
</parameter>
<parameter id="DIRECT_LINK_DEACTIVATE" hidden="true">
<logical type="boolean" default="false"/>
<physical interface="eeprom" size="0.1" type="integer">
<address index="0x0006"/>
</physical>
</parameter>
<enforce id="CENTRAL_ADDRESS" value="1"/>
<enforce id="DIRECT_LINK_DEACTIVATE" value="true"/>
</paramset>

<frames>
<frame id="LEVEL_SET" type="#x" channel_field="10" direction="to_device">
<parameter size="1.0" index="11.0" type="integer" param="LEVEL"/>
</frame>
<frame id="LEVEL_GET" type="#S" channel_field="10" direction="to_device"/>
<frame id="INFO_LEVEL" direction="from_device" event="true" type="#i" channel_field="10">
<parameter type="integer" signed="true" index="11.0" size="2.0" param="TEMPERATURE"/>
<parameter size="1.0" index="11.0" type="integer" param="LEVEL"/>
<parameter size="0.3" index="12.4" type="integer" param="STATE_FLAGS"/>
</frame>
<frame id="STOP" type="#x" channel_field="10" direction="to_device">
<parameter const_value="201" size="1.0" index="11.0" type="integer"/>
</frame>
<frame id="OLD_LEVEL" direction="to_device" type="#x" channel_field="10">
<parameter type="integer" index="11.0" size="1.0" const_value="201"/>
</frame>
<frame id="STATE_LEVEL" type="#i" channel_field="10" direction="from_device" event="true">
<parameter size="1.0" index="11.0" type="integer" param="STATE"/>
</frame>
<frame id="KEY_EVENT_SHORT" type="#K" channel_field="10" direction="from_device" event="true">
<parameter const_value="0" size="0.1" index="12.0" type="integer"/>
<parameter size="0.6" index="12.2" type="integer" param="COUNTER"/>
</frame>
<frame id="KEY_EVENT_LONG" type="#K" channel_field="10" direction="from_device" event="true">
<parameter const_value="1" size="0.1" index="12.0" type="integer"/>
<parameter size="0.6" index="12.2" type="integer" param="COUNTER"/>
</frame>
<frame id="KEY_SIM_SHORT" type="#K" channel_field="10" direction="from_device" receiver_channel_field="11">
<parameter const_value="0" size="0.1" index="12.0" type="integer"/>
<parameter size="0.6" index="12.2" type="integer" param="COUNTER"/>
</frame>
<frame id="KEY_SIM_LONG" type="#K" channel_field="10" direction="from_device" receiver_channel_field="11">
<parameter const_value="1" size="0.1" index="12.0" type="integer"/>
<parameter size="0.6" index="12.2" type="integer" param="COUNTER"/>
</frame>
<frame id="SET_LOCK" type="#l" channel_field="11" direction="to_device">
<parameter type="integer" index="12.0" size="1.0" param="INHIBIT"/>
</frame>
<frame id="TOGGLE_INSTALL_TEST" type="#x" channel_field="10" direction="to_device">
<parameter type="integer" index="11.0" size="1.0" param="TOGGLE_FLAG"/>
</frame>
</frames>

<channels>
<channel index="0" type="MAINTENANCE" count="1" class="maintenance" ui_flags="internal">
<paramset id="maint_ch_master" type="MASTER"/>
<paramset id="maint_ch_values" type="VALUES">
<parameter id="UNREACH" ui_flags="service" operations="read,event">
<logical type="boolean"/>
<physical type="integer" interface="internal" value_id="UNREACH"/>
</parameter>
<parameter id="STICKY_UNREACH" ui_flags="service" operations="read,write,event">
<logical type="boolean"/>
<physical type="integer" interface="internal" value_id="STICKY_UNREACH"/>
</parameter>
<parameter id="CONFIG_PENDING" ui_flags="service" operations="read,event">
<logical type="boolean"/>
<physical type="integer" interface="internal" value_id="CONFIG_PENDING"/>
</parameter>
</paramset>
</channel>

<channel index="1" type="SWITCH" count="4" physical_index_offset="-1">
<link_roles>
<target name="SWITCH"/>
</link_roles>
<paramset id="hmw_switch_ch_master" type="MASTER" address_step="2" address_start="0x07">
<parameter id="LOGGING">
<logical type="option">
<option id="OFF"/>
<option id="ON" default="true"/>
</logical>
<physical size="0.1" type="integer" interface="eeprom">
<address index="+0"/>
</physical>
</parameter>

<parameter id="OUTPUT_LOCKED">
<logical type="boolean" default="false"/>
<physical size="0.1" type="integer" interface="eeprom">
<address index="+0.1"/>
</physical>
<conversion type="boolean_integer" invert="true"/>
</parameter>
<parameter id="INVERTED">
<logical type="boolean" default="true"/>
<physical size="0.1" type="integer" interface="eeprom">
<address index="+0.2"/>
</physical>
<conversion type="boolean_integer" invert="true"/>
</parameter>
</paramset>

<paramset type="LINK" id="hmw_switch_ch_link" peer_param="SENSOR" channel_param="CHANNEL" count="20" address_step="9" address_start="0x038">
<parameter id="UI_HINT">
<logical type="string" default="" use_default_on_failure="true"/>
<physical type="string" interface="store" id="UI_HINT" save_on_change="true"/>
</parameter>
<parameter id="SENSOR" operations="none" hidden="true">
<logical type="address"/>
<physical type="array">
<physical type="integer" size="4.0" interface="eeprom">
<address index="+0"/>
</physical>
<physical type="integer" size="1.0" interface="eeprom">
<address index="+4"/>
</physical>
</physical>
</parameter>
<parameter id="CHANNEL" operations="none" hidden="true">
<logical type="integer" min="0" max="255" default="255"/>
<physical type="integer" size="1.0" interface="eeprom">
<address index="+5"/>
</physical>
</parameter>
<parameter id="SHORT_ACTION_TYPE">
<logical type="option">
<option id="ON"/>
<option id="OFF"/>
<option id="INACTIVE"/>
<option id="TOGGLE" default="true"/>
</logical>
<physical type="integer" size="0.2" interface="eeprom">
<address index="+6.0"/>
</physical>
</parameter>
<parameter id="LONG_ACTION_TYPE">
<logical type="option">
<option id="ON"/>
<option id="OFF"/>
<option id="INACTIVE"/>
<option id="TOGGLE" default="true"/>
</logical>
<physical type="integer" size="0.2" interface="eeprom">
<address index="+6.2"/>
</physical>
</parameter>
</paramset>

<paramset id="hmw_switch_ch_values" type="VALUES">
<parameter id="STATE" operations="read,write,event" control="SWITCH.STATE">
<logical type="boolean" default="false"/>
<physical type="integer" interface="command" value_id="LEVEL">
<set request="LEVEL_SET"/>
<get request="LEVEL_GET" response="INFO_LEVEL"/>
<event frame="INFO_LEVEL"/>
</physical>
<conversion type="boolean_integer" true="200" false="0" threshold="1"/>
</parameter>
<parameter id="WORKING" operations="read,event" ui_flags="internal">
<logical type="boolean" default="false"/>
<physical type="integer" interface="command" value_id="STATE_FLAGS">
<get request="LEVEL_GET" response="INFO_LEVEL"/>
<event frame="INFO_LEVEL"/>
<event frame="ACK_STATUS"/>
</physical>
<conversion type="boolean_integer"/>
</parameter>
<parameter id="INHIBIT" operations="read,write,event" control="NONE" loopback="true">
<logical type="boolean" default="false"/>
<physical type="integer" interface="command" value_id="INHIBIT">
<set request="SET_LOCK"/>
</physical>
</parameter>
<parameter id="INSTALL_TEST" operations="write" ui_flags="internal">
<logical type="action"/>
<physical type="integer" interface="command" value_id="TOGGLE_FLAG" no_init="true">
<set request="TOGGLE_INSTALL_TEST"/>
</physical>
<conversion type="toggle" value="STATE" />
</parameter>
</paramset>

</channel>

<channel index="5" physical_index_offset="-1" count="6" type="SENSOR"> <!-- input sensor contact chan -->
<paramset type="MASTER" id="hmw_sensor_ch_master" address_start="0x0F" address_step="1">
    <parameter id="INPUT_LOCKED">
<logical type="boolean" default="false"/>
<physical size="0.1" type="integer" interface="eeprom">
<address index="+0.0"/>
</physical>
<conversion type="boolean_integer" invert="true"/>
</parameter>
<parameter id="INVERTED">
<logical type="boolean" default="false"/>
<physical size="0.1" type="integer" interface="eeprom">
<address index="+0.1"/>
</physical>
<conversion type="boolean_integer" invert="true"/>
</parameter>
<parameter id="NOTIFY">
<logical type="option">
<option id="ON"/>
<option id="OFF" default="true"/>
</logical>
<physical size="0.1" type="integer" interface="eeprom">
<address index="+0.2"/>
</physical>
</parameter>
</paramset>

<paramset type="VALUES" id="hmw_sensor_ch_values">
<parameter id="SENSOR" operations="read,event" control="DOOR_SENSOR.STATE">
<logical type="boolean"/>
<physical type="integer" interface="command" value_id="STATE">
<event frame="STATE_LEVEL" auth_violate_policy="reject"/>
<get request="LEVEL_GET" response="STATE_LEVEL"/>
</physical>
</parameter>
<parameter id="INSTALL_TEST" operations="event" ui_flags="internal">
<logical type="action"/>
<physical type="integer" interface="command" value_id="TEST_COUNTER">
<event frame="STATE_LEVEL"/>
</physical>
</parameter>
</paramset>
</channel>

<channel index="11" type="KEY" count="6" physical_index_offset="-1"> <!-- input key chan -->
<link_roles>
<source name="SWITCH"/>
</link_roles>
<paramset id="hbw_input_ch_master" type="MASTER" address_start="0x15" address_step="2">
    <parameter id="INPUT_LOCKED">
<logical type="boolean" default="false"/>
<physical size="0.1" type="integer" interface="eeprom">
<address index="+0.0"/>
</physical>
<conversion type="boolean_integer" invert="true"/>
</parameter>
<parameter id="INVERTED">
<logical type="boolean" default="false"/>
<physical size="0.1" type="integer" interface="eeprom">
<address index="+0.1"/>
</physical>
<conversion type="boolean_integer" invert="true"/>
</parameter>
<!-- don't allow to change, cause using same IO pins as input sensor contact channels
<parameter id="PULLUP">
<logical type="boolean" default="true"/>
<physical size="0.1" type="integer" interface="eeprom">
<address index="+0.2"/>
</physical>
<conversion type="boolean_integer" invert="false"/>
</parameter> -->
<parameter id="INPUT_TYPE">
<logical type="option">
<option id="DOORSENSOR" default="true"/>
<option id="MOTIONSENSOR"/>
<option id="SWITCH"/>
<option id="PUSHBUTTON"/>
</logical>
<physical size="0.2" type="integer" interface="eeprom">
<address index="+0.3"/>
</physical>
</parameter>
<parameter id="LONG_PRESS_TIME">
<logical type="float" unit="s" default="1.0" max="5.0" min="0.4"/>
<physical size="1.0" type="integer" interface="eeprom">
<address index="+1"/>
</physical>
<conversion type="float_integer_scale" factor="10"/>
<conversion type="integer_integer_map">
<value_map to_device="false" from_device="true" parameter_value="10" device_value="0xff"/>
</conversion>
</parameter>
</paramset>

<paramset id="hmw_input_ch_link" type="LINK" channel_param="CHANNEL" peer_param="ACTUATOR" count="20" address_start="0x380" address_step="6">
<parameter hidden="true" id="CHANNEL" operations="none">
<logical type="integer" default="255" max="255" min="0"/>
<physical size="1.0" type="integer" interface="eeprom">
<address index="+0"/>
</physical>
</parameter>
<parameter hidden="true" id="ACTUATOR" operations="none">
<logical type="address"/>
<physical type="array">
<physical size="4.0" type="integer" interface="eeprom">
<address index="+1"/>
</physical>
<physical size="1.0" type="integer" interface="eeprom">
<address index="+5"/>
</physical>
</physical>
</parameter>
</paramset>

<paramset type="VALUES" id="hbw_input_ch_values">
<parameter id="PRESS_SHORT" operations="event" loopback="true" control="BUTTON.SHORT">
<logical type="action"/>
<physical type="integer" interface="command" value_id="COUNTER">
<event frame="KEY_EVENT_SHORT"/>
</physical>
<conversion type="action_key_counter" counter_size="6" sim_counter="SIM_COUNTER"/>
</parameter>
<parameter id="PRESS_LONG" operations="event" loopback="true" control="BUTTON.LONG">
<logical type="action"/>
<physical type="integer" interface="command" value_id="COUNTER">
<event frame="KEY_EVENT_LONG"/>
</physical>
<conversion type="action_key_counter" counter_size="6" sim_counter="SIM_COUNTER"/>
</parameter>
</paramset>
</channel>

<channel index="17" type="BLIND" count="1" physical_index_offset="-1">
<link_roles>
<target name="SWITCH"/>
</link_roles>
<paramset id="hmw_blind_ch_master" type="MASTER" address_step="7" address_start="0x21">
<parameter id="LOGGING">
<logical type="option">
<option id="OFF"/>
<option id="ON" default="true"/>
</logical>
<physical size="0.1" type="integer" interface="eeprom">
<address index="+0"/>
</physical>
</parameter>
<parameter id="CHANGE_OVER_DELAY">
<logical type="float" unit="s" default="0.5" max="25.5" min="0.5"/>
<conversion type="float_integer_scale" offset="0.0" factor="10"/>
<physical size="1.0" type="integer" interface="eeprom">
<address index="+1"/>
</physical>
</parameter>
<parameter id="REFERENCE_RUN_COUNTER">
<logical type="integer" default="0" max="100" min="0"/>
<physical size="1.0" type="integer" interface="eeprom">
<address index="+2"/>
</physical>
</parameter>
<parameter id="REFERENCE_RUNNING_TIME_BOTTOM_TOP">
<logical type="float" unit="s" default="50.0" max="6000.0" min="0.1"/>
<conversion type="float_integer_scale" offset="0.0" factor="10"/>
<physical size="2.0" type="integer" interface="eeprom" endian="little">
<address index="+3"/>
</physical>
</parameter>
<parameter id="REFERENCE_RUNNING_TIME_TOP_BOTTOM">
<logical type="float" unit="s" default="50.0" max="6000.0" min="0.1"/>
<conversion type="float_integer_scale" offset="0.0" factor="10"/>
<physical size="2.0" type="integer" interface="eeprom" endian="little">
<address index="+5"/>
</physical>
</parameter>
</paramset>

<paramset type="LINK" id="hmw_blind_ch_link" peer_param="SENSOR" channel_param="CHANNEL" count="20" address_start="0x038" address_step="9">
<parameter id="UI_HINT">
<logical type="string" default="" use_default_on_failure="true"/>
<physical type="string" interface="store" id="UI_HINT" save_on_change="true"/>
</parameter>
<parameter id="SENSOR" operations="none" hidden="true">
<logical type="address"/>
<physical type="array">
<physical type="integer" size="4.0" interface="eeprom">
<address index="+0"/>
</physical>
<physical type="integer" size="1.0" interface="eeprom">
<address index="+4"/>
</physical>
</physical>
</parameter>
<parameter id="CHANNEL" operations="none" hidden="true">
<logical type="integer" min="0" max="255" default="255"/>
<physical type="integer" size="1.0" interface="eeprom">
<address index="+5"/>
</physical>
</parameter>

<parameter id="SHORT_ACTION_TYPE">
<logical type="option">
<option id="OPEN"/>
<option id="STOP"/>
<option id="CLOSE"/>
<option id="TOGGLE" default="true"/>
<option id="LEVEL_SET"/>
<option id="INACTIVE"/>
</logical>
<physical type="integer" size="0.3" interface="eeprom">
<address index="+6.0"/>
</physical>
</parameter>
<parameter id="SHORT_LEVEL_SET">
<logical type="float" min="0.0" max="1.0" default="0.5" unit="100%"/>
<conversion type="float_integer_scale" factor="200"/>
<physical type="integer" size="1.0" interface="eeprom">
<address index="+7"/>
</physical>
</parameter>
<parameter id="LONG_ACTION_TYPE">
<logical type="option">
<option id="OPEN"/>
<option id="STOP"/>
<option id="CLOSE"/>
<option id="TOGGLE"/>
<option id="LEVEL_SET"/>
<option id="INACTIVE" default="true"/>
</logical>
<physical type="integer" size="0.3" interface="eeprom">
<address index="+6.3"/>
</physical>
</parameter>
<parameter id="LONG_LEVEL_SET">
<logical type="float" min="0.0" max="1.0" default="0.5" unit="100%"/>
<conversion type="float_integer_scale" factor="200"/>
<physical type="integer" size="1.0" interface="eeprom">
<address index="+8"/>
</physical>
</parameter>
</paramset>

<paramset id="hmw_blind_ch_values" type="VALUES">
<parameter id="LEVEL" operations="read,write,event" control="BLIND.LEVEL">
<logical type="float" unit="100%" default="0.0" max="1.0" min="0.0"/>
<physical type="integer" interface="command" value_id="LEVEL">
<set request="LEVEL_SET"/>
<get request="LEVEL_GET" response="INFO_LEVEL"/>
<event frame="INFO_LEVEL"/>
</physical>
<conversion type="float_integer_scale" factor="200"/>
</parameter>
<parameter id="WORKING" ui_flags="internal" operations="read,event">
<logical type="boolean" default="false"/>
<physical type="integer" interface="command" value_id="STATE_FLAGS">
<get request="LEVEL_GET" response="INFO_LEVEL"/>
<event frame="INFO_LEVEL"/>
<event frame="ACK_STATUS"/>
</physical>
<conversion type="boolean_integer"/>
<conversion type="integer_integer_map">
<value_map parameter_value="1" device_value="0x04" mask="0x04"/>
<value_map parameter_value="0" device_value="0x00"/>
<value_map parameter_value="1" device_value="0x01"/>
<value_map parameter_value="1" device_value="0x02"/>
<value_map parameter_value="0" device_value="0x03"/>
</conversion>
</parameter>
<parameter id="DIRECTION" ui_flags="internal" operations="read,event">
<logical type="option">
<option id="NONE" default="true"/>
<option id="UP"/>
<option id="DOWN"/>
<option id="UNDEFINED"/>
</logical>
<physical type="integer" interface="command" value_id="STATE_FLAGS">
<get request="LEVEL_GET" response="INFO_LEVEL"/>
<event frame="INFO_LEVEL"/>
<event frame="ACK_STATUS"/>
</physical>
<conversion type="option_integer">
<value_map parameter_value="0" device_value="0x00"/>
<value_map parameter_value="1" device_value="0x01"/>
<value_map parameter_value="2" device_value="0x02"/>
<value_map parameter_value="3" device_value="0x03"/>
</conversion>
</parameter>
<parameter id="STOP" operations="write" control="BLIND.STOP">
<logical type="action"/>
<physical type="integer" interface="command" value_id="DUMMY">
<set request="STOP"/>
</physical>
</parameter>
<parameter id="INHIBIT" operations="read,write,event" loopback="true" control="NONE">
<logical type="boolean" default="false"/>
<physical type="integer" interface="command" value_id="INHIBIT">
<set request="SET_LOCK"/>
</physical>
</parameter>
<parameter id="INSTALL_TEST" ui_flags="internal" operations="write">
<logical type="action"/>
<physical type="integer" interface="command" value_id="TOGGLE_FLAG" no_init="true">
<set request="TOGGLE_INSTALL_TEST"/>
</physical>
<conversion type="blind_test" value="201"/>
</parameter>
</paramset>
</channel>

<channel index="18" count="1" physical_index_offset="-1" type="TEMPSENSOR">
<link_roles>
<source name="TEST"/>
</link_roles>
<paramset type="MASTER" id="hmw_input_ch_master" address_step="14" address_start="0x28">
<parameter id="SEND_DELTA_TEMP">
<logical type="float" unit="℃" default="0.5" min="0.1" max="25.0">
<special_value id="NOT_USED" value="0"/>
</logical>
<physical size="1.0" type="integer" interface="eeprom">
<address index="0.0"/>
</physical>
<conversion type="float_integer_scale" factor="10"/>
<conversion type="integer_integer_map">
<value_map to_device="false" from_device="true" parameter_value="5" device_value="0xff"/>
</conversion>
</parameter>
<parameter id="OFFSET">
<logical type="integer" min="-127" max="127" unit="℃"/>
<physical type="integer" size="1" interface="eeprom">
<address index="+1.0"/>
</physical>
<conversion type="integer_integer_scale" offset="127" factor="100"/>
<conversion type="integer_integer_map">
<value_map to_device="false" from_device="true" parameter_value="127" device_value="0xff"/>
</conversion>
</parameter>
<parameter id="SEND_MIN_INTERVAL">
   <logical type="integer" unit="s" default="10" min="5" max="3600">
<special_value id="NOT_USED" value="0"/>
   </logical>
   <physical size="2.0" type="integer" interface="eeprom" endian="little">
  <address index="+2.0"/>
   </physical>
   <conversion type="integer_integer_map">
<value_map to_device="false" from_device="true" parameter_value="10" device_value="0xffff"/>
   </conversion>
</parameter>
<parameter id="SEND_MAX_INTERVAL">
<logical type="integer" unit="s" default="150" min="5" max="3600">
<special_value id="NOT_USED" value="0"/>
</logical>
<physical size="2.0" type="integer" interface="eeprom" endian="little">
<address index="+4.0"/>
</physical>
<conversion type="integer_integer_map">
<value_map to_device="false" from_device="true" parameter_value="150" device_value="0xffff"/>
</conversion>
</parameter>
<parameter id="ONEWIRE_TYPE">
<logical type="option">
<option id="NOT_USED" default="true"/>
<option id="DS18B20"/>
<option id="DS18S20"/>
<option id="DS1822"/>
<option id="REMOVE_SENSOR"/>
</logical>
<physical size="1.0" type="integer" interface="eeprom">
<address index="+6.0"/>
</physical>
<conversion type="option_integer">
<value_map to_device="true" from_device="true" parameter_value="0" device_value="0xFF"/>
<value_map to_device="true" from_device="true" parameter_value="1" device_value="0x28"/>
<value_map to_device="true" from_device="true" parameter_value="2" device_value="0x10"/>
<value_map to_device="true" from_device="true" parameter_value="3" device_value="0x22"/>
<value_map to_device="true" from_device="false" parameter_value="4" device_value="0xFF"/>
</conversion>
</parameter>
</paramset>
<paramset type="VALUES" id="hmw_analog_input_values">
<parameter id="TEMPERATURE" operations="read,event">
<logical type="float" min="-273.15" max="327.67" unit="℃"/>
<physical type="integer" interface="command" value_id="TEMPERATURE">
<get request="LEVEL_GET" response="INFO_LEVEL"/>
<event frame="INFO_LEVEL"/>
</physical>
<conversion type="float_integer_scale" factor="100"/>
</parameter>
</paramset>
</channel>
</channels>
</device>


VG Andreas

loetmeister

Hi Andreas,

Was bedeutet "die Temperatur wird nicht angezeigt"? Wird 0 oder die default Temperatur - 217 Grad angezeigt? Letztes würde bedeuten das der Temperatur Kanal angelegt wurde aber was mit dem Sensor nicht stimmt.

Schalte doch mal die debug Ausgabe ein und schaue was im seriellen Monitor zu sehen ist.

Gruß,
Thomas

a_quadrat

Hallo Thomas,

es wird die Error Temp angezeigt: -273,14 und die OW Adresse wird nicht erkannt.


B: 2A 898
conf_OW addr: 10FFFFFFFFFFFFFF
R: FD:00:00:00:01:3C:00:01:97:7A:06:69:0F:00:00:50:40
R: FD:00:01:97:7A:59:00:00:00:01:02:52:E8
R: FD:00:00:00:01:3E:00:01:97:7A:06:69:0F:03:FF:1E:CE
R: FD:00:01:97:7A:79:00:00:00:01:02:B6:2E
T: FD:FF:FF:FF:FF:F8:42:00:00:23:12:41:00:97:01:00:01:48:42:57:37:32:39:36:32:39:31:2C:D2
T: FD:00:00:00:01:98:42:00:00:23:06:69:11:95:4E:B5:AC
R: FD:42:00:00:23:19:00:00:00:01:02:BE:F8
R: ACK
channel: 17 sent temp, c°C: -27314 SUCCESS!


Ich habe zum testen mal den HBW-1W-T10 Sketch aufgespielt. Damit funktioniert es. Der Fehler muss irgendwo in meinem Sketch liegen.

VG Andreas

loetmeister

Hi,,

Sieht ja gar nicht so schlecht aus...  ;)

Die one wire Adresse sieht komisch aus... Vermutlich passt die start Adresse nicht
#define ADDRESS_START_CONF_TEMP_CHAN 0x7 // first EEPROM address for temperature sensors configuration

Bei dir stand 0x28... Leider muss man das ausrechnen und eintragen. Eventuell kann man mal ein makro dafür erstellen..

Gruß,
Thomas

a_quadrat

Hallo Thomas,

benötige ich diese Zeile? Die ist doch nur für Direktverknüpfungen, oder?

#define LINKADDRESSSTART_TEMP 0xE6


und was muss ich hier eintragen? 0x28?


#define ADDRESS_START_CONF_TEMP_CHAN 0x7 // first EEPROM address for temperature sensors configuration


VG Andreas

loetmeister

Hallo Andreas,

Ja, LINKADDRESSSTART_TEMP ist nur nötig für direktverknüpfungen.

Wenn 0x28 die start Adresse der Temperatur Konfiguration ist, ja dann für ADDRESS_START_CONF_TEMP_CHAN eintragen. Das wird zum Speichern der Sensor IDs benutzt..

Gruß,
Thomas

a_quadrat

#6
woher weiss ich, welche die Startadresse ist? Ich hatte die 0x7 aus dem HBW-1W-T10 Sketch übernommen.

Die 0x28 ist eigentlich für den Kanal Temp - dachte ich zumindest.

loetmeister

Hi,

Ja, das ist die selbe Adresse aus "struct hbw_config".
Start der Temperatur Kanal Konfiguration.

Ich schaue mal ob man das etwas eleganter lösen kann..

Gruß,
Thomas

a_quadrat

Hi,

hmm, aber bei Modul HBW-1W-T10 ist die "ADDRESS_START_CONF_TEMP_CHAN 0x7" und in der "struct hbw_config" steht 0x07.

Ich habe 0x28 in der "ADDRESS_START_CONF_TEMP_CHAN" probiert, funktioniert auch nicht. Die OW Adresse passt nicht oder wird an der falschen Stelle abgelegt.

VG Andreas

loetmeister

Hi,

passen denn die Start-Adressen in der XML? Das ist ja das selbe.

In HBWOneWireTempSensors.h kannst du noch ein wenig zusätzliches logging einschalten:
#define EXTRA_DEBUG_OUTPUT   // even more debug output


Gruß,
Thomas

a_quadrat

Hi,

ja, die sollten passen, ich habe mal den extra debug eingestellt. Folgendes kommt raus:


B: 2A 898
conf_OW addr: FFFFFFFFFFFFFFFF
T: FD:FF:FF:FF:FF:F8:42:00:00:22:12:41:00:97:01:00:01:48:42:57:37:32:39:36:32:39:30:9A:72
channel: 17 read temp, c°C: -27315
channel: 17 read temp, c°C: -27315
channel: 17 read temp, c°C: -27315
channel: 17 read temp, c°C: -27315
channel: 17 read temp, c°C: -27315
channel: 17 read temp, c°C: -27315
channel: 17 read temp, c°C: -27315
channel: 17 read temp, c°C: -27315


Die conf OW Adresse passt nicht. Könnte ich die richtige mal fest verdraten?

VG Andreas

loetmeister

Hi,

das passt nicht, weil nicht nach neuen Sensoren gesucht wird.  ;D
Das ist mir jetzt erst aufgefallen...

Sieht so aus als ob du vergessen hast g_ow, tempConfig bei der Anlage des devices zu übergeben:
device = new HBIODevice( ... , ...
g_ow, tempConfig);


Bei dir im Code ist nach den Links Schluss...

Gruß,
Thomas

a_quadrat

Hi,

danke, das habe ich vergessen, ist natürlich wichtig. Wir nähern uns auch schon dem Ziel. Die OW Adresse wird erkannt und gespeichert. Aber dann gehts wieder in OW search.
Hast du noch eine Idee?


B: 2A 896
OW sensorSearch
1-Wire device found: 28FF187F501502EC save to EEPROM, @startaddress: 34
OW sensorSearch


VG Andreas

loetmeister

Hallo Andreas,

Läuft sensorSearch in eine Schleife? Oder nur ein zweiter Aufruf direkt hintereinander?
sensorSearch wird über afterReadConfig beim device Start und nach jeder Änderung an der Kanal Konfiguration (egal welcher Kanal) über FHEM aufgerufen... Von alleine sollte das also nicht passieren.

Gruß,
Thomas

a_quadrat

Hallo Thomas,

der Bus ist aktuell nicht angeschlossen, ich wollte erstmal, das die Startprozedur durchläuft. Also ich drücke einmal den Reset Button und dann läuft es einmal bis zu dem gezeigten Punkt - keine Schleife. Dann geht es auch nicht weiter.

VG Andreas

loetmeister

Hi,

ändere mal die Zeile
tempConfig[i + NUMBER_OF_OUT_CHAN + NUMBER_OF_SEN_INPUT_CHAN + NUMBER_OF_INPUT_CHAN + NUMBER_OF_BL_CHAN] = &(hbwconfig.TempOWCfg[i]);

in:
tempConfig[i] = &(hbwconfig.TempOWCfg[i]);

"tempConfig" ist ein eigenes Array, mit der Anzahl der Temperatursensoren und hat nichts mit den Kanal Array zu tun.

Die Ausgabe am seriellen Monitor sollte dann ungefähr so aussehen:
B: 2A 895
OW sensorSearch
channel: 0 stored ow-id: FFFFFFFFFFFFFFFF
conf_OW addr: FFFFFFFFFFFFFFFF
T: FD:FF:FF:FF:FF:F8:42:FF:FF:FF:12:41:00:97:01:00:01:48:42:57:34:30:37:33:34:37:31:95:E6
channel: 17 read temp, c°C: -27315
channel: 17 read temp, c°C: -27315


Gruß,
Thomas

a_quadrat

#16
Hallo Thomas,

vielen Dank, das war es. Auf dich kann man sich immer verlassen  :).

Ich habe noch eine Fragen:

Gibt es eigentlich schon I2C Sensoren die wir mit einbinden können?

VG Andreas

loetmeister

Hi Andreas,

Schön das es nun funktioniert.

I²C habe ich in dieser library bisher noch nicht eingebunden. One wire könnte man aber dahingehend ändern. Es müßte deutlich einfacher sein, wenn man nur einen I²C sensor zulässt.
Dazu wäre folgendes als Beispiel zu gebrauchen:
https://github.com/loetmeister/HBW-Devices/blob/HM-Wired/Firmware/HmwUnits/HmwSHT3x.cpp

Gruß,
Thomas

a_quadrat

Hi,

Danke, das schaue ich mir mal an. Eine Frage noch, kann ich irgendwo die Granularität der Temperaturwerte einstellen? Die Temperatur ändert sich nur in 0.5°C Schritten.

VG Andreas

loetmeister

Schau dir mal die Kanal Konfiguration an. SEND_DELTA_TEMP legt fest ab welcher Änderung eine Info Nachricht an die Zentrale/FHEM gesendet werden soll. Das geht bis runter auf 0,1 Grad. Du musst die wiederholgenauigkeit des sensors im Auge behalten, sonst wird bei jeder Messung die Temperatur auf den Bus geschickt... Bei einem sensor vielleicht ok, bei 10 oder mehr problematisch oder zumindest unnötig..

Ansonsten kann FHEM auch den Kanal abfragen, dann hast du alle 1,2 Sekunden einen neuen Messwert zur Verfügung.

Gruß,
Thomas

a_quadrat

Hi,

die Sendehäufigkeit meine ich gar nicht, das habe ich in der Konfiguration gefunden. Ich meine den Messwert an sich, es kommen bei mir nur auf 0.5 °C gerundete Werte an. Ich habe noch keinen Messwert von z.B. 22.7 °C gesehen.

VG Andreas

loetmeister

Hi,

Ich hatte auch erst gedacht das du nach der Messwert Auflösung fragst.. Aber irgendwie klang das seltsam..  ;)

Die Messwerte werden mit zwei Nachkommastellen übertragen und sollten von FHEM auch so angezeigt werden. Bei mir klappt das..
Wie wird denn bei dir die Temperatur ohne sensor angezeigt?  -273,15 oder anders?

Gruß,
Thomas

a_quadrat

#22
Ja, ohne Sensor wird 273.15 angezeigt. Ich teste Mal einen anderen Sensor, komischerweise steht in der Konfiguration bei Sensor "nicht benutzt". Da sollte doch der Typ drin stehen, oder?

VG Andreas

loetmeister

#23
Hi,

Bzgl. Sensor "nicht benutzt" - schau mal ob deine FHEM hm485 aktuell ist.

Dein sensor stand als 18B20 im log... Der hat zwei Nachkommastellen... Ob das sinnvoll ist lass ich mal so stehen.  ;D

Gruß,
Thomas

a_quadrat


Ich habe die Homematic Komponenten alle in einer CCU und dann über das Modul HMCCU in FHEM integriert.

J, richtig, das ist ein 18B20 Sensor, aber wenn ich das in der config einstelle, dann wird die Errortemp von -273,14 °C angezeigt. Stell ich dann wieder auf " nicht genutzt", wird wieder die korrekte Temperatur  angezeigt - leider nur in 0,5°C Schritten.

VG Andreas


loetmeister

Hallo,

Zur CCU kann ich nichts sagen...

In der Konfiguration kann man bei "onewire type" durch setzen auf REMOVE_SENSOR oder NOT_USED den sensor löschen, d.h. den Speicherplatz wieder frei geben. Beim nächsten Suchen am one-wire bus können dann neu gefundene Sensoren abgespeichert werden. Andere Sensoren bleiben den Kanälen zugeordnet (wenn man mehrere Sensoren hat).
Etwas anderes braucht man bei "onewire type" nicht machen. Der Typ wird automatisch erkannt und in FHEM auch angezeigt.

Gruß,
Thomas

a_quadrat

Hallo Thomas,

ich habe mal unabhängig von CCU und FHEM die Sensorwerte aus dem seriellen Monitor aufgezeichnet und dort werden die Werte auch nur in 0.5 °C Schritten angezeigt/ gesendet.
Hast du noch eine Idee woran das liegen kann?


B: 2A 896
OW sensorSearch
1-Wire device found: 28FFA5695015027E save to EEPROM, @startaddress: 0D
conf_OW addr: 28FFA5695015027E
T: FD:FF:FF:FF:FF:F8:42:00:00:22:12:41:00:97:01:00:01:48:42:57:37:32:39:36:32:39:30:9A:72
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
channel: 17 sent temp, c°C: 2300 SUCCESS!
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:0A:5A:96:7E
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:0A:5A:96:7E
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:0A:5A:96:7E
channel: 17 sent temp, c°C: 2650 SUCCESS!
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:09:2E:90:FE
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:09:2E:90:FE
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:09:2E:90:FE
channel: 17 sent temp, c°C: 2350 SUCCESS!
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
channel: 17 sent temp, c°C: 2300 SUCCESS!
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
channel: 17 sent temp, c°C: 2300 SUCCESS!
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
channel: 17 sent temp, c°C: 2300 SUCCESS!
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
channel: 17 sent temp, c°C: 2300 SUCCESS!


VG Andreas

loetmeister

Hi,

Kannst du diesen test noch mal wiederholen, mit EXTRA_DEBUG_OUTPUT aktivert? Dammit man sehen kann welche Messwerte vom sensor kommen?

Gruß,
Thomas

a_quadrat

hier mit erweitertem Debug:

B: 2A 896
OW sensorSearch
channel: 0 stored address: FFFFFFFFFFFFFFFF
1-Wire device found: 28FFA5695015027E save to EEPROM, @startaddress: 0D
channel: 0 stored address: 28FFA5695015027E
conf_OW addr: 28FFA5695015027E
T: FD:FF:FF:FF:FF:F8:42:00:00:22:12:41:00:97:01:00:01:48:42:57:37:32:39:36:32:39:30:9A:72
channel: 17 read temp, c°C: 2300
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
T: FD:00:00:00:01:F8:42:00:00:22:06:69:11:08:FC:73:62
channel: 17 sent temp, c°C: 2300 SUCCESS!
channel: 17 read temp, c°C: 2300
channel: 17 read temp, c°C: 2300
channel: 17 read temp, c°C: 2300
channel: 17 read temp, c°C: 2300
channel: 17 read temp, c°C: 2300
channel: 17 read temp, c°C: 2300
channel: 17 read temp, c°C: 2300
channel: 17 read temp, c°C: 2300
channel: 17 read temp, c°C: 2300
channel: 17 read temp, c°C: 2300
channel: 17 read temp, c°C: 2300
channel: 17 read temp, c°C: 2300
channel: 17 read temp, c°C: 2400
channel: 17 read temp, c°C: 2550
channel: 17 read temp, c°C: 2650
channel: 17 read temp, c°C: 2700
channel: 17 read temp, c°C: 2750
channel: 17 read temp, c°C: 2800
channel: 17 read temp, c°C: 2800
channel: 17 read temp, c°C: 2850
channel: 17 read temp, c°C: 2800
channel: 17 read temp, c°C: 2800
channel: 17 read temp, c°C: 2750
channel: 17 read temp, c°C: 2700
channel: 17 read temp, c°C: 2700
channel: 17 read temp, c°C: 2650
channel: 17 read temp, c°C: 2650
channel: 17 read temp, c°C: 2600
channel: 17 read temp, c°C: 2600
channel: 17 read temp, c°C: 2550
channel: 17 read temp, c°C: 2550


VG Andreas

loetmeister

Hi Andreas,

danke für testen, auch mit FHEM.
Die Ausgabe ist zumindest stimmig... erklären kann ich mir das nicht.
Was man weiter prüfen könnte:
Gruß,
Thomas

a_quadrat

Hallo Thomas,

danke für den Tipp, die onewire Bibliothek scheint mit den DS18B20 Sensoren Probleme zu haben. Mit DS18S20 Sensoren funktioniert es wunderbar.

VG Andreas

loetmeister

Hi,

Schön das du den Fehler gefunden hast. Welche onewire Bibliothek nutzt du? Die selbe die ich verlinkt hatte?

Gruß,
Thomas

a_quadrat

Hi,

ja, ich benutze die selbe wie du, hatte sie auch noch mal aktualisiert, um sicher zu gehen.

VG Andreas

loetmeister

Hi,

ok, Danke.
Komisch ist das aber schon... Es gibt kein Bug Report dazu auf Github.
Ich habe ein paar DS1820 und drei wasserdichte DS18B20 (wobei ich nicht genau weiß was da drin verbaut ist). Alle melden sich als DS18B20 (DS18B20_ID = 0x28) und funktionieren ohne Probleme.

Betreibst du Sensoren im parasitären Modus (also nur Data und GND) oder hast du alle drei Pins angeschlossen? (5 Volt, Data, GND)
Ich habe immer die 5V Spannungsversorgung mit anliegen...

Gruß,
Thomas

a_quadrat

Hi,

ich finde es auch merkwürdig. Ob es evtl. an der Arduino IDE liegt? Aber ich habe das Verhalten auch bei direkt in FHEM eingebundenen onwire Sensoren.

VG Andreas

loetmeister

Hi,

"direkt in FHEM eingebundenen onwire Sensoren." bedeutet, sie hängen am raspberry, bzw. dem PC auf dem FHEM läuft?


Gruß,
Thomas

a_quadrat

ja, und sind über das OWX Modul eingebunden.

a_quadrat

Hallo Thomas,

vielleicht hast du noch eine Idee, ich habe mein Modul jetzt im Einsatz und das Problem festgestellt, dass die Inputeingänge nach einer kurzen Zeit (ca. 1h) nicht mehr funktionieren - die Ausgänge funktionieren ohne Probleme. Ich habe auch einen Input direkt mit einem Output verknüpft - selbst die Direktverknüpfung funktioniert nicht mehr. Nach einem Reset geht es dann wieder für eine kurze Zeit. Wenn ich den Bus abklemme, funktionieren die Eingänge ohne Probleme.

VG Andreas

loetmeister

#38
Hi,

Du sprichst von HBWKey Kanälen?
Wie hast du sie konfiguriert? Pushbutton? Oder was anderes?
Musste ich dann mal versuchen bei mir nach zu stellen.

Der Quellcode von deinen ersten Post ist noch aktuell?

Edit: noch ne Frage. Die restlichen Kanäle und die Kommunikation mit dem Modul ist in Ordnung?

Gruß,
Thomas

a_quadrat

 Hi,

ja, richtig die HBWKey Kanäle, sie sind als Taster, Schalter und Motionsensor konfiguriert. Den Quellcode muss ich dir nochmal zur Verfügung stellen.

Ich habe festgestellt, dass die Kommunikation auf dem Bus nicht i.O ist, d.h. die Trennung der Nachrichten ist nicht ganz sauber - ich muss nochmal testen.

VG Andreas

loetmeister

Hi,

ok... bitte versuche das etwas genauer einzugrenzen. Ich habe seit heute mittag zwei HBW-SC-10-Dim-6 laufen (die einzigen Geräte die ich nutze, welche HBWKey verwenden) und dort konnte ich keine Probleme feststellen. Ich nutze da aber kein HBWSoftwareSerial, also nicht direkt vergleichbar.

Gruß,
Thomas

a_quadrat

Hi,

wie kann ich auf Hardware-Serial umstellen? vlt. funktioniert das besser.

VG Andreas

loetmeister

#42
Hallo,

du musst Rx und Tx mit dem RS485 transceiver verbinden - da hängt beim Nano auch der Seriell/USB Wandler dran (das UART Modul des Nano: PD1 (TXD), PD0 (RXD)) und RS485_TXEN Pin definieren, wie bisher auch. (TXD, RXD muss du nicht Konfigurieren, das ist fest vorgegeben.)
Im setup() dann Serial.begin(19200, SERIAL_8E1); und "&Serial" statt "&rs485" bei "new HBWDevice(..)" übergeben.
Du kannst dir alle Module im GitHub ansehen, dort ist beides konfiguriert und #define USE_HARDWARE_SERIAL umschaltbar...
EDIT: Ich hatte das mal angeglichen, aber ich sehe grad das war etwas halbherzig... nimm mal HBW-SC-10-Dim-6 oder https://github.com/loetmeister/HBWired/blob/master/HBW-Sen-EP/HBW-Sen-EP.ino#L101 als Orientierung.

Unabhängig von Soft- oder Hardware-Serial, sollte das Device natürlich funktionieren. HardwareSerial sollte effizienter sein, da der Mikrocontroller direkt in Hardware einige bytes senden und empfangen kann, ohne dafür das Programm zu unterbrechen. Da ich eh keine Debug Ausgabe brauche (außer für die Entwicklung) und eine eigen Platine ohne USB Wandler, etc. nutze wäre es blöd HardwareSerial nicht zu nutzen.  ;)

Gruß,
Thomas

a_quadrat

Hallo Thomas,

Danke für die Info, ich habe jetzt auf Hardware Serial umgestellt und im Testbetrieb laufen. Mal sehen wie es läuft...

VG Andreas

a_quadrat

Hallo Thomas,

ein kurzes Update zum Test. Im Testbetrieb (mit kurzer Busleitung) hat alles wunderbar funktioniert, ausser der Tempsensor - da muss ich noch Mal nachschauen.
Am Einsatzort haben merkwürdigerweise diesmal die Ausgänge nicht funktioniert - das war mit Software Serial genau anders herum. Meine letzte Idee war, dort den Busabschluss zu installieren und siehe da, es funktioniert. Seitdem läuft es...

VG Andreas

loetmeister

Hi Andreas,

interessant... damit hätte ich nicht gerechnet, das dies ein Problem mit der Busleitung ist.
Wo hattest du den Busabschluss vorher?

Nutzt du den Homematic Abschlusswiderstand? (diesem Schema folgenden https://wiki.fhem.de/wiki/HomeMatic_Wired#Verkabelung)

Gruß,
Thomas

a_quadrat

Hi,
ich hatte vorher keinen Busabschluss genutzt, ich hatte nur gesehen, dass die Kommunikation an der Stelle nicht sauber war und deshalb den Busabschluss Mal ausprobiert. Hast du bei dir einen installiert?
Den offiziellen von Homematic habe ich nicht, ich habe mich an dem Schaltbild im Wiki gehalten - bis jetzt funktioniert es.

VG Andreas


loetmeister

Ok. Danke.
Hab noch den ganzen Kram auf dem Tisch liegen, ca. 10 Geräte, aber mit max drei Metern buskabel... Da war das noch kein Thema.
Ich wollte aber den Busabschluss aus dem Wiki nachbauen und an der Einspeisung (bzw. dem USB Wandler, welcher aber wohl in der Nähe zum Netzteil Sitzt)  anschließen.

Gruß,
Thomas