[HM-Wired] HMW-LC-Sw2-DR / HBW-LC-Sw-8 => neues input/output Modul HBW-IO-6-6

Begonnen von a_quadrat, 08 Oktober 2019, 12:44:51

Vorheriges Thema - Nächstes Thema

loetmeister

Hi,

Das sieht auf den ersten Blick ganz gut aus.
Wie stellt sich das Problem dar? Peering kannst du anlegen, haben aber keine Funktion?
Was sich auf jeden Fall ändert, sind die EEPROM Adressen für die links und die Konfiguration. Das müsstest du in der xml richtig eintragen.
HBWLinkSwitchSimple.h hat einen anderen "address step"... Steht in der cpp Datei, EEPROM_SIZE.

Gruß,
Thomas

a_quadrat

also, das direkte Peering funktioniert jetzt - es war noch ein Fehler in der XML.

Aber wo definiere ich die Schalter- bzw Tasterfunktion? Ich kann zwar in den Geräteeinstellungen auf Schalter bzw Taster umstellen, aber die Signale vom Modul ändern sich nicht. Das aktuelle verhalten ist, ziehe ich den Schalter auf Masse, sendet das Modul alle paar Sekunden ein Signal, wahrscheinlich longpress, das geht solange, bis der Schalter wieder geöffnet ist.

VG Andreas

loetmeister

Hi Andreas,

Das ist schon die richtige Stelle. Jeder Schalter Kanal kann individuell konfiguriert werden.
Wenn es keinen Effekt hat, stimmt meist die Adresse nicht... Poste doch die xml hier...

Gruß,
Thomas

a_quadrat

Hallo Thomas,

das kann sein, da bin ich auch noch nicht so richtig durchgestiegen. So sieht meine XML aus:


<?xml version="1.0"?>
<device eep_size="1024" version="14">
<supported_types>
<type priority="2" id="HBW-io-6-6" name="RS485 6-channel master out actuator and 6 Digital inputs">
<parameter const_value="0x98" 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-6_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" type="#i" channel_field="10" direction="from_device" event="true">
<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="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="6" 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="42" 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="7" 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="0x13" 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>
<!-- 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>


</channels>
</device>


VG Andreas

loetmeister

Hi,

Zwei Sachen sind mir aufgefallen:

<paramset type="LINK" id="hmw_switch_ch_link" peer_param="SENSOR" channel_param="CHANNEL" count="20" address_step="42" address_start="0x038">

address_step für HBWLinkSwitchSimple ist 7 (#define EEPROM_SIZE 7)


<paramset id="hbw_input_ch_master" type="MASTER" address_start="0x13" address_step="1">

address_step müsste 2 sein. (HBWKey.h > struct hbw_config_key)


Wenn die Startadresse stimmt, dann hat man das fehlerhafte Verhalten, das der erste Kanal oder das erste peering geht, alle folgenden nicht...

Gruß,
Thomas

a_quadrat

Danke, das passe ich noch an. Aber mit der Definition der Inputs hat das nichts zu tun, oder?

VG Andreas

loetmeister

Hi,

wenn die Konfiguration an eine andere Adresse im EEPROM geschrieben wird, als vom Gerät erwartet, dann funktioniert es nicht.  ;)
Ich vermute das es genau daran liegt.

Gruß,
Thomas

a_quadrat

Hi,

du hattest recht, an der Adresszuweisung hat es gelegen - jetzt funktioniert es. Vielen Dank.  :)

Kann man in der Hbwkey library den Level des Inputs mit aufnehmen? Dann kann man dies, über einen zusätzlichen Datenpunkt in der XML auswerten und für bestimmte Logiken verwenden. Aktuell sehe ich in FHEM immer nur ein short - oder Longpress Event, was für den "DOORSENSOR" nicht so günstig ist. Oder gibt's das schon und es fehlt nur in meiner xml?

VG Andreas

loetmeister

Hi Andreas,

Schön zu hören das es soweit funktioniert.

Was meinst du mit "Level"? Der sensor meldet nur offen oder geschlossen. Du könntest noch HBWSenSC.h nutzen, damit kann ein notify bei jeder status Änderung gesendet werden.

Ansonsten gibt es kein Level in einer key event Nachricht. Bei homematic Funk schon, dort sendet z.b. der Bewegungsmelder den helligkeitslevel mit, wenn er ausgelöst hat. Bei wired leider nicht. Hab ich auch etwas später festgestellt.. Dachte es wäre gleich, mal mit Kabel und mal ohne..  ::)

Gruß,
Thomas

a_quadrat

Zitat von: loetmeister am 28 Oktober 2019, 09:57:13

Was meinst du mit "Level"? Der sensor meldet nur offen oder geschlossen.

Im Prinzip habe ich das mit Level gemeint, offen/geschlossen bzw. high/low des Inputs. Fehlt mir nur der Datenpunkt in meiner xml? Weil in FHEM sind nur die Datenpunkte bzw. Readings von short - longpress. Ein zusätzliches Reading mit high oder Low für den Input-Kanal wäre gut.

loetmeister

Hi,

Ok... Taster/Schalter Kanäle verhalten sich so. Es gibt nur die kurzen und langen Tastendrücke, dazu den Tastendruckzähler. Dafür lassen sich die Taster Kanäle direkt verknüpfen.
Wenn du die selben Eingänge als weitere Sensor Kanäle, mit HBWSenSC.h einbindest, dann kannst du sie abfragen und erhältst den Status zurück. (open / close)
So habe ich das bei meinem HBW-SC-10-Dim-6 gemacht.
Ist das dass was du haben willst?

Gruß,
Thomas

a_quadrat

Hi,

ja, das habe ich gemeint. Ich habe es auch schon in deinem Modul gesehen. Ich wollte es ganz gern in einem Kanal, nur ein zusätzliches Reading. Aber es geht natürlich auch so.

VG Andreas

a_quadrat

Hallo Thomas,

ich habe noch Probleme die Sensorkanäle zuzufügen, wahrscheinlich liegt es wieder an der Speicheradresse im EEPROM, aber ich kann es nicht finden. Ich habe mich bei der Adresszuweisung an dem HBW-SC-10-Dim-6 Modul orientiert. Anbei mal mein Sketch und XML, vlt. fällt dir was auf:


#define FIRMWARE_VERSION 0x0001
#define HMW_DEVICETYPE 0x99 //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 6  // digital output channels


#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 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>

// Pins

  #define RS485_RXD 4
  #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 OU05 A4 
  #define OU06 A5

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

  #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


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_senSC senCfg[NUMBER_OF_SEN_INPUT_CHAN]; // 0x13 - 0x1C (address step 1)
  hbw_config_switch switchCfg[NUMBER_OF_OUT_CHAN]; // 0x07 - 0x12 (address step 2)
  hbw_config_key keyCfg[NUMBER_OF_INPUT_CHAN]; // 0x1D - 0x30 (address step 2) 
} hbwconfig;


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


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) :
    HBWDevice(_devicetype, _hardware_version, _firmware_version,
              _rs485, _txen, _configSize, _config, _numChannels, ((HBWChannel**)(_channels)),
              _debugstream, linksender, linkreceiver) {
    };
    virtual void afterReadConfig();
};

// device specific defaults
void HBIODevice::afterReadConfig() {
  if(hbwconfig.logging_time == 0xFF) hbwconfig.logging_time = 50;
};

HBIODevice* device = NULL;



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

//Definition Kanaele


  channels[0] = new HBWSwitch(A0,&(hbwconfig.switchCfg[0]));
  channels[1] = new HBWSwitch(A1,&(hbwconfig.switchCfg[1]));
  channels[2] = new HBWSwitch(A2,&(hbwconfig.switchCfg[2]));
  channels[3] = new HBWSwitch(A3,&(hbwconfig.switchCfg[3]));
  channels[4] = new HBWSwitch(A4,&(hbwconfig.switchCfg[4]));
  channels[5] = new HBWSwitch(A5,&(hbwconfig.switchCfg[5]));
  channels[6] = new HBWSenSC(IO1,&(hbwconfig.senCfg[0]));
  channels[7] = new HBWSenSC(IO2,&(hbwconfig.senCfg[1]));
  channels[8] = new HBWSenSC(IO3,&(hbwconfig.senCfg[2]));
  channels[9] = new HBWSenSC(IO4,&(hbwconfig.senCfg[3]));
  channels[10] = new HBWSenSC(IO5,&(hbwconfig.senCfg[4]));
  channels[11] = new HBWSenSC(IO6,&(hbwconfig.senCfg[5]));
  channels[12] = new HBWKey(IO1,&(hbwconfig.keyCfg[0]));
  channels[13] = new HBWKey(IO2,&(hbwconfig.keyCfg[1]));
  channels[14] = new HBWKey(IO3,&(hbwconfig.keyCfg[2]));
  channels[15] = new HBWKey(IO4,&(hbwconfig.keyCfg[3]));
  channels[16] = new HBWKey(IO5,&(hbwconfig.keyCfg[4]));
  channels[17] = new HBWKey(IO6,&(hbwconfig.keyCfg[5]));
 

  device = new HBIODevice(HMW_DEVICETYPE, HARDWARE_VERSION, FIRMWARE_VERSION,
                         &rs485,RS485_TXEN,sizeof(hbwconfig),&hbwconfig,
                         // NEU (10 statt 2 Kanaele)
                         NUMBER_OF_CHAN,(HBWChannel**)channels,
#ifdef NO_DEBUG_OUTPUT
                         NULL,
  #else
                         &Serial,
  #endif
                         new HBWLinkKey(NUM_LINKS_INPUT,LINKADDRESSSTART_INPUT),  new HBWLinkSwitchSimple(NUM_LINKS_OUT,LINKADDRESSSTART_OUT));
                         
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-6-Sen" name="RS485 6-channel master out actuator and 6 Digital inputs">
<parameter const_value="0x99" 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-6_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" type="#i" channel_field="10" direction="from_device" event="true">
<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="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="6" 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="7" 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="7" physical_index_offset="-1" count="6" type="SENSOR"> <!-- input sensor contact chan -->
<paramset type="MASTER" id="hmw_sensor_ch_master" address_start="0x13" 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="13" 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="0x1D" 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>




</channels>
</device>

loetmeister

Hi,

Du hast die hbw_config_senSC Konfiguration vor die switch Konfiguration im struct gesetzt, im XML aber die Adressen nicht angepasst... Mehr sehe ich auf die schnelle nicht.
Was ist denn das Problem?  :)

Gruß,
Thomas

a_quadrat

Hi,

ich habe die hbw_config_senSC jetzt an die zweite Position gesetzt, aber es funktioniert trotzdem nicht. Das Problem ist, ich kann die Inputtypen nicht ändern und die Sensoren ändern ihren Zustand nicht.

VG Andreas