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
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
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
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
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
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Hi,
Kannst du diesen test noch mal wiederholen, mit EXTRA_DEBUG_OUTPUT aktivert? Dammit man sehen kann welche Messwerte vom sensor kommen?
Gruß,
Thomas
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
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:
- OneWire Lib version. Ich nutze "version": "2.3.5", "https://github.com/PaulStoffregen/OneWire"
- Aulösung des Sensors. Die kann zwischen 9 und 12 bit betragen. Das kann im Sensor gespeichert werden. Hast du noch andere Sensoren zum testen?
In https://github.com/milesburton/Arduino-Temperature-Control-Library/ gibt es getResolution(), setResolution()... damit könntest du das prüfen.
Oder einfach mal dasOneWire Beispiel ausprobieren.... welche Temperatur Werte da gelesen werden.
Gruß,
Thomas
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
Hi,
Schön das du den Fehler gefunden hast. Welche onewire Bibliothek nutzt du? Die selbe die ich verlinkt hatte?
Gruß,
Thomas
Hi,
ja, ich benutze die selbe wie du, hatte sie auch noch mal aktualisiert, um sicher zu gehen.
VG Andreas
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
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
Hi,
"direkt in FHEM eingebundenen onwire Sensoren." bedeutet, sie hängen am raspberry, bzw. dem PC auf dem FHEM läuft?
Gruß,
Thomas
ja, und sind über das OWX Modul eingebunden.
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
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
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
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
Hi,
wie kann ich auf Hardware-Serial umstellen? vlt. funktioniert das besser.
VG Andreas
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
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
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
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
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
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