Code: Alles auswählen
/usr/local/addons/jp-hb-devices-addon/firmware/rftypes/hb-uni-senact-4-4-rc.xml
Moderator: Co-Administratoren
Code: Alles auswählen
/usr/local/addons/jp-hb-devices-addon/firmware/rftypes/hb-uni-senact-4-4-rc.xml
Code: Alles auswählen
// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
{0xf3, 0x32, 0x01}, // Device ID
"JPSENACT11", // Device Serial
{0xf3, 0x32}, // Device Model
0x10, // Firmware Version
as::DeviceType::Switch, // Device Type
{0x01, 0x00} // Info Bytes
};
Code: Alles auswählen
<parameter index="10.0" size="2.0" const_value="0xf332"/>
<channel index="1" type="SWITCH" count="4">
Code: Alles auswählen
//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2016-10-31 papa Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
//- -----------------------------------------------------------------------------------------------------------------------
// define this to read the device id, serial and device type from bootloader section
// #define USE_OTA_BOOTLOADER
#define EI_NOTEXTERNAL
#include <EnableInterrupt.h>
#include <AskSinPP.h>
#include <LowPower.h>
#include <Switch.h>
#include <MultiChannelDevice.h>
#define RELAY_PIN_1 14
#define RELAY_PIN_2 15
#define RELAY_PIN_3 16
#define RELAY_PIN_4 17
#define REMOTE_PIN_1 5
#define REMOTE_PIN_2 6
#define REMOTE_PIN_3 7
#define REMOTE_PIN_4 9
#define LED_PIN 4
#define CONFIG_BUTTON_PIN 8
// number of available peers per channel
#define PEERS_PER_SwitchChannel 4
#define PEERS_PER_RemoteChannel 4
#define CYCLETIME seconds2ticks(60UL * 3 * 0.88)
#define remISR(device,chan,pin) class device##chan##ISRHandler { \
public: \
static void isr () { device.remoteChannel(chan).irq(); } \
}; \
device.remoteChannel(chan).button().init(pin); \
if( digitalPinToInterrupt(pin) == NOT_AN_INTERRUPT ) \
enableInterrupt(pin,device##chan##ISRHandler::isr,CHANGE); \
else \
attachInterrupt(digitalPinToInterrupt(pin),device##chan##ISRHandler::isr,CHANGE);
// all library classes are placed in the namespace 'as'
using namespace as;
// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
{0xf3, 0x32, 0x01}, // Device ID
"JPSENACT11", // Device Serial
{0xf3, 0x32}, // Device Model
0x10, // Firmware Version
as::DeviceType::Switch, // Device Type
{0x01, 0x00} // Info Bytes
};
/**
Configure the used hardware
*/
typedef AvrSPI<10, 11, 12, 13> RadioSPI;
typedef AskSin<StatusLed<LED_PIN>, NoBattery, Radio<RadioSPI, 2> > Hal;
Hal hal;
DEFREGISTER(Reg0, MASTERID_REGS, DREG_INTKEY, DREG_CYCLICINFOMSG)
class SwList0 : public RegList0<Reg0> {
public:
SwList0(uint16_t addr) : RegList0<Reg0>(addr) {}
void defaults() {
clear();
intKeyVisible(true);
cycleInfoMsg(true);
}
};
DEFREGISTER(RemoteReg1, CREG_LONGPRESSTIME, CREG_AES_ACTIVE, CREG_DOUBLEPRESSTIME)
class RemoteList1 : public RegList1<RemoteReg1> {
public:
RemoteList1 (uint16_t addr) : RegList1<RemoteReg1>(addr) {}
void defaults () {
clear();
longPressTime(1);
// aesActive(false);
// doublePressTime(0);
}
};
class RemoteChannel : public Channel<Hal, RemoteList1, EmptyList, DefList4, PEERS_PER_RemoteChannel, SwList0>, public Button {
private:
uint8_t repeatcnt;
public:
typedef Channel<Hal, RemoteList1, EmptyList, DefList4, PEERS_PER_RemoteChannel, SwList0> BaseChannel;
RemoteChannel () : BaseChannel() {}
virtual ~RemoteChannel () {}
Button& button () {
return *(Button*)this;
}
uint8_t status () const {
return 0;
}
uint8_t flags () const {
return 0;
}
virtual void state(uint8_t s) {
DHEX(BaseChannel::number());
Button::state(s);
RemoteEventMsg& msg = (RemoteEventMsg&)this->device().message();
msg.init(this->device().nextcount(), this->number(), repeatcnt, (s == longreleased || s == longpressed), this->device().battery().low());
if ( s == released || s == longreleased) {
this->device().sendPeerEvent(msg, *this);
repeatcnt++;
}
else if (s == longpressed) {
this->device().broadcastPeerEvent(msg, *this);
}
}
uint8_t state() const {
return Button::state();
}
bool pressed () const {
uint8_t s = state();
return s == Button::pressed || s == Button::debounce || s == Button::longpressed;
}
};
typedef SwitchChannel<Hal, PEERS_PER_SwitchChannel, SwList0> SwChannel;
class MixDevice : public ChannelDevice<Hal, VirtBaseChannel<Hal, SwList0>, 8, SwList0> {
class CycleInfoAlarm : public Alarm {
MixDevice& dev;
public:
CycleInfoAlarm (MixDevice& d) : Alarm (CYCLETIME), dev(d) {}
virtual ~CycleInfoAlarm () {}
void trigger (AlarmClock& clock) {
set(CYCLETIME);
clock.add(*this);
dev.switchChannel(1).changed(true);
}
} cycle;
public:
VirtChannel<Hal, SwChannel, SwList0> swChannel1, swChannel2, swChannel3, swChannel4;
VirtChannel<Hal, RemoteChannel, SwList0> remChannel5, remChannel6, remChannel7, remChannel8;
public:
typedef ChannelDevice<Hal, VirtBaseChannel<Hal, SwList0>, 8, SwList0> DeviceType;
MixDevice (const DeviceInfo& info, uint16_t addr) : DeviceType(info, addr), cycle(*this) {
DeviceType::registerChannel(swChannel1, 1);
DeviceType::registerChannel(swChannel2, 2);
DeviceType::registerChannel(swChannel3, 3);
DeviceType::registerChannel(swChannel4, 4);
DeviceType::registerChannel(remChannel5, 5);
DeviceType::registerChannel(remChannel6, 6);
DeviceType::registerChannel(remChannel7, 7);
DeviceType::registerChannel(remChannel8, 8);
}
virtual ~MixDevice () {}
SwChannel& switchChannel (uint8_t num) {
switch (num) {
case 1:
return swChannel1;
break;
case 2:
return swChannel2;
break;
case 3:
return swChannel3;
break;
case 4:
return swChannel4;
break;
}
}
RemoteChannel& remoteChannel (uint8_t num) {
switch (num) {
case 5:
return remChannel5;
break;
case 6:
return remChannel6;
break;
case 7:
return remChannel7;
break;
case 8:
return remChannel8;
break;
}
}
virtual void configChanged () {
if ( /*this->getSwList0().cycleInfoMsg() ==*/ true ) {
DPRINTLN("Activate Cycle Msg");
sysclock.cancel(cycle);
cycle.set(CYCLETIME);
sysclock.add(cycle);
}
else {
DPRINTLN("Deactivate Cycle Msg");
sysclock.cancel(cycle);
}
}
};
MixDevice sdev(devinfo, 0x20);
ConfigButton<MixDevice> cfgBtn(sdev);
BurstDetector<Hal> bd(hal);
void initPeerings (bool first) {
// create internal peerings - CCU2 needs this
if ( first == true ) {
HMID devid;
sdev.getDeviceID(devid);
for ( uint8_t i = 1; i <= 4; ++i ) {
Peer ipeer(devid, i);
sdev.channel(i).peer(ipeer);
}
}
}
void setup () {
DINIT(57600, ASKSIN_PLUS_PLUS_IDENTIFIER);
bool first = sdev.init(hal);
sdev.switchChannel(1).init(RELAY_PIN_1, false);
sdev.switchChannel(2).init(RELAY_PIN_2, false);
sdev.switchChannel(3).init(RELAY_PIN_3, false);
sdev.switchChannel(4).init(RELAY_PIN_4, false);
remISR(sdev, 5, REMOTE_PIN_1);
remISR(sdev, 6, REMOTE_PIN_2);
remISR(sdev, 7, REMOTE_PIN_3);
remISR(sdev, 8, REMOTE_PIN_4);
buttonISR(cfgBtn, CONFIG_BUTTON_PIN);
initPeerings(first);
bd.enable(sysclock);
sdev.initDone();
}
void loop() {
bool worked = hal.runready();
bool poll = sdev.pollRadio();
if ( worked == false && poll == false ) {
hal.activity.savePower<Sleep<> >(hal);
}
}
Code: Alles auswählen
<?xml version="1.0" encoding="ISO-8859-1"?>
<device version="1" rx_modes="BURST" supports_aes="true" cyclic_timeout="600">
<supported_types>
<type name="HB-UNI-SenAct-4-4-RC" id="HB-UNI-SenAct-4-4-RC" priority="2">
<parameter index="10.0" size="2.0" const_value="0xf332"/>
</type>
</supported_types>
<paramset type="MASTER" id="switch_dev_master">
<parameter id="INTERNAL_KEYS_VISIBLE" ui_flags="internal">
<logical type="boolean" default="true"/>
<physical type="integer" interface="config" list="0" index="2.7" size="0.1"/>
</parameter>
<parameter id="CYCLIC_INFO_MSG">
<logical type="boolean" default="false"/>
<physical type="integer" interface="config" list="0" index="9" size="1"/>
</parameter>
<enforce id="CYCLIC_INFO_MSG" value="true"/>
</paramset>
<channels>
<channel index="0" type="MAINTENANCE" ui_flags="internal" class="maintenance" count="1">
<paramset type="MASTER" id="maint_ch_master"/>
<paramset type="VALUES" id="maint_ch_values">
<parameter id="UNREACH" operations="read,event" ui_flags="service">
<logical type="boolean"/>
<physical type="integer" interface="internal" value_id="UNREACH"/>
</parameter>
<parameter id="STICKY_UNREACH" operations="read,write,event" ui_flags="service,sticky">
<logical type="boolean"/>
<physical type="integer" interface="internal" value_id="STICKY_UNREACH"/>
</parameter>
<parameter id="CONFIG_PENDING" operations="read,event" ui_flags="service">
<logical type="boolean"/>
<physical type="integer" interface="internal" value_id="CONFIG_PENDING"/>
</parameter>
<parameter id="RSSI_DEVICE" operations="read,event">
<logical type="integer"/>
<physical type="integer" interface="internal" value_id="RSSI_DEVICE"/>
</parameter>
<parameter id="RSSI_PEER" operations="read,event">
<logical type="integer"/>
<physical type="integer" interface="internal" value_id="RSSI_PEER"/>
</parameter>
<parameter id="AES_KEY" operations="read" ui_flags="invisible">
<logical type="integer" min="0" max="127"/>
<physical type="integer" interface="internal" value_id="AES_KEY"/>
</parameter>
</paramset>
</channel>
<channel index="1" type="SWITCH" count="4">
<link_roles>
<target name="SWITCH"/>
<target name="WEATHER_CS"/>
<target name="WCS_TIPTRONIC_SENSOR"/>
</link_roles>
<paramset type="MASTER" id="switch_ch_master">
<subset ref="switch_paramset"/>
</paramset>
<paramset type="VALUES" id="switch_ch_values">
<subset ref="switch_valueset"/>
</paramset>
<paramset type="LINK" id="switch_ch_link">
<subset ref="switch_linkset"/>
</paramset>
<enforce_link>
<value id="LCD_SYMBOL" value="2"/>
<value id="LCD_LEVEL_INTERP" value="1"/>
</enforce_link>
</channel>
<channel autoregister="true" index="5" type="KEY" count="4" pair_function="BA" function="A" paired="true" aes_default="false">
<link_roles>
<source name="SWITCH"/>
<source name="KEYMATIC"/>
<source name="WINMATIC"/>
<source name="REMOTECONTROL_RECEIVER"/>
</link_roles>
<paramset type="MASTER" id="remote_ch_master">
<subset ref="key_paramset"/>
</paramset>
<paramset type="VALUES" id="remote_ch_values">
<subset ref="key_valueset"/>
</paramset>
<paramset type="LINK" id="remote_ch_link">
<subset ref="key_linkset"/>
</paramset>
</channel>
</channels>
<frames>
<frame id="LEVEL_SET" direction="to_device" type="0x11" subtype="0x02" subtype_index="9" channel_field="10">
<parameter type="integer" index="11.0" size="1.0" param="STATE"/>
<parameter type="integer" index="12.0" size="2.0" const_value="0"/>
<parameter type="integer" index="14.0" size="2.0" PARAM="ON_TIME" omit_if="0"/>
</frame>
<frame id="SET_LOCK" direction="to_device" type="0x11" channel_field="10">
<parameter type="integer" index="9.0" size="0.1" param="INHIBIT"/>
</frame>
<frame id="LEVEL_GET" direction="to_device" type="0x01" channel_field="9">
<parameter type="integer" index="10.0" size="1.0" const_value="14"/>
</frame>
<frame id="INFO_LEVEL" direction="from_device" allowed_receivers="BROADCAST,CENTRAL,OTHER" event="true" type="0x10" subtype="6" subtype_index="9" channel_field="10">
<parameter type="integer" index="11.0" size="1.0" param="STATE"/>
<parameter type="integer" index="12.4" size="0.3" param="STATE_FLAGS"/>
</frame>
<frame id="ACK_STATUS" direction="from_device" allowed_receivers="BROADCAST,CENTRAL,OTHER" event="true" type="0x02" subtype="1" subtype_index="9" channel_field="10">
<parameter type="integer" index="11.0" size="1.0" param="STATE"/>
<parameter type="integer" index="12.4" size="0.3" param="STATE_FLAGS"/>
</frame>
<frame id="TOGGLE_INSTALL_TEST" direction="to_device" type="0x11" subtype="0x02" subtype_index="9" channel_field="10">
<parameter type="integer" index="11.0" size="1.0" param="TOGGLE_FLAG"/>
<parameter type="integer" index="12.0" size="2.0" const_value="0"/>
</frame>
<frame id="INFO_POWERON" direction="from_device" allowed_receivers="CENTRAL" event="true" type="0x10" subtype="6" subtype_index="9" fixed_channel="*">
<parameter type="integer" index="10.0" size="1.0" const_value="0"/>
<parameter type="integer" const_value="0" param="STATE"/>
<parameter type="integer" const_value="0" param="STATE_FLAGS"/>
<parameter type="integer" const_value="0" param="INHIBIT"/>
</frame>
<frame id="KEY_EVENT_SHORT" direction="from_device" allowed_receivers="CENTRAL,BROADCAST,OTHER" event="true" type="0x40" channel_field="9:0.6">
<parameter type="integer" index="9.6" size="0.1" const_value="0"/>
<parameter type="integer" index="10.0" size="1.0" param="COUNTER"/>
<parameter type="integer" index="10.0" size="1.0" param="TEST_COUNTER"/>
</frame>
<frame id="KEY_EVENT_LONG" direction="from_device" allowed_receivers="CENTRAL,BROADCAST,OTHER" event="true" type="0x40" channel_field="9:0.6">
<parameter type="integer" index="9.6" size="0.1" const_value="1"/>
<parameter type="integer" index="10.0" size="1.0" param="COUNTER"/>
<parameter type="integer" index="10.0" size="1.0" param="TEST_COUNTER"/>
</frame>
<frame id="KEY_EVENT_LONG_BIDI" direction="from_device" allowed_receivers="CENTRAL,BROADCAST,OTHER" event="true" type="0x40" channel_field="9:0.6">
<parameter type="integer" index="1.5" size="0.1" const_value="1"/>
<parameter type="integer" index="9.6" size="0.1" const_value="1"/>
<parameter type="integer" index="10.0" size="1.0" param="COUNTER"/>
<parameter type="integer" index="10.0" size="1.0" param="TEST_COUNTER"/>
</frame>
<frame id="KEY_SIM_SHORT" direction="from_device" type="0x40" channel_field="9:0.6">
<parameter type="integer" index="9.6" size="0.1" const_value="0"/>
<parameter type="integer" index="9.7" size="0.1" const_value="0"/>
<parameter type="integer" index="10.0" size="1.0" param="SIM_COUNTER"/>
</frame>
<frame id="KEY_SIM_LONG" direction="from_device" type="0x40" channel_field="9:0.6">
<parameter type="integer" index="9.6" size="0.1" const_value="1"/>
<parameter type="integer" index="9.7" size="0.1" const_value="0"/>
<parameter type="integer" index="10.0" size="1.0" param="SIM_COUNTER"/>
</frame>
</frames>
<paramset_defs>
<paramset id="switch_valueset">
<parameter id="STATE" operations="read,write,event" control="SWITCH.STATE">
<logical type="boolean" default="false"/>
<physical type="integer" interface="command" value_id="STATE">
<set request="LEVEL_SET"/>
<get request="LEVEL_GET" response="INFO_LEVEL" process_as_event="true"/>
<event frame="INFO_LEVEL" auth_violate_policy="get"/>
<event frame="ACK_STATUS" auth_violate_policy="get"/>
<event frame="INFO_POWERON" auth_violate_policy="get"/>
<reset_after_send param="ON_TIME"/>
</physical>
<conversion type="boolean_integer" threshold="1" false="0" true="200"/>
</parameter>
<parameter id="ON_TIME" operations="write" control="NONE">
<logical type="float" min="0.0" max="85825945.6" default="0.0" unit="s"/>
<physical type="integer" interface="store" id="ON_TIME" volatile="true"/>
<conversion type="float_integer_scale" factor="10"/>
<conversion type="integer_tinyfloat" mantissa_start="5" mantissa_size="11" exponent_start="0" exponent_size="5"/>
</parameter>
<parameter id="INHIBIT" operations="read,write,event" control="NONE" loopback="true">
<logical type="boolean"/>
<physical type="integer" interface="command" value_id="INHIBIT">
<set request="SET_LOCK"/>
</physical>
</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" process_as_event="true"/>
<event frame="INFO_LEVEL"/>
<event frame="ACK_STATUS"/>
<event frame="INFO_POWERON"/>
</physical>
<conversion type="boolean_integer"/>
</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>
<paramset id="switch_paramset">
<parameter id="AES_ACTIVE" ui_flags="internal">
<logical type="boolean" default="false"/>
<physical type="boolean" interface="internal" value_id="AES"/>
</parameter>
<parameter id="TRANSMIT_TRY_MAX" operations="read,write">
<logical type="integer" min="0" max="10" default="6"/>
<physical type="integer" interface="config" list="1" index="48" size="1"/>
</parameter>
<parameter id="POWERUP_ACTION" operations="read,write">
<logical type="option">
<option id="POWERUP_OFF" default="true"/>
<option id="POWERUP_ON"/>
</logical>
<physical type="integer" interface="config" list="1" index="86" size="0.1"/>
</parameter>
<parameter id="STATUSINFO_MINDELAY" operations="read,write">
<logical type="float" min="0.5" max="15.5" default="2.0" unit="s">
<special_value id="NOT_USED" value="0.0"/>
</logical>
<physical type="integer" interface="config" list="1" index="87.0" size="0.5"/>
<conversion type="float_integer_scale" factor="2"/>
</parameter>
<parameter id="STATUSINFO_RANDOM" operations="read,write">
<logical type="float" min="0.0" max="7.0" default="1.0" unit="s"/>
<physical type="integer" interface="config" list="1" index="87.5" size="0.3"/>
<conversion type="float_integer_scale" factor="1"/>
</parameter>
</paramset>
<paramset id="switch_linkset">
<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="SHORT_CT_OFFDELAY">
<logical type="option">
<option id="X GE COND_VALUE_LO" default="true"/>
<option id="X GE COND_VALUE_HI"/>
<option id="X LT COND_VALUE_LO"/>
<option id="X LT COND_VALUE_HI"/>
<option id="COND_VALUE_LO LE X LT COND_VALUE_HI"/>
<option id="X LT COND_VALUE_LO OR X GE COND_VALUE_HI"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x2.4" size="0.4"/>
</parameter>
<parameter id="SHORT_CT_ONDELAY">
<logical type="option">
<option id="X GE COND_VALUE_LO" default="true"/>
<option id="X GE COND_VALUE_HI"/>
<option id="X LT COND_VALUE_LO"/>
<option id="X LT COND_VALUE_HI"/>
<option id="COND_VALUE_LO LE X LT COND_VALUE_HI"/>
<option id="X LT COND_VALUE_LO OR X GE COND_VALUE_HI"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x2.0" size="0.4"/>
</parameter>
<parameter id="SHORT_CT_OFF">
<logical type="option">
<option id="X GE COND_VALUE_LO" default="true"/>
<option id="X GE COND_VALUE_HI"/>
<option id="X LT COND_VALUE_LO"/>
<option id="X LT COND_VALUE_HI"/>
<option id="COND_VALUE_LO LE X LT COND_VALUE_HI"/>
<option id="X LT COND_VALUE_LO OR X GE COND_VALUE_HI"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x3.4" size="0.4"/>
</parameter>
<parameter id="SHORT_CT_ON">
<logical type="option">
<option id="X GE COND_VALUE_LO" default="true"/>
<option id="X GE COND_VALUE_HI"/>
<option id="X LT COND_VALUE_LO"/>
<option id="X LT COND_VALUE_HI"/>
<option id="COND_VALUE_LO LE X LT COND_VALUE_HI"/>
<option id="X LT COND_VALUE_LO OR X GE COND_VALUE_HI"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x3.0" size="0.4"/>
</parameter>
<parameter id="SHORT_COND_VALUE_LO">
<logical type="integer" min="0" max="255" default="50"/>
<physical type="integer" interface="config" list="3" index="4" size="1"/>
</parameter>
<parameter id="SHORT_COND_VALUE_HI">
<logical type="integer" min="0" max="255" default="100"/>
<physical type="integer" interface="config" list="3" index="5" size="1"/>
</parameter>
<parameter id="SHORT_ONDELAY_TIME">
<logical type="float" min="0.0" max="111600.0" default="0" unit="s"/>
<physical type="integer" interface="config" list="3" index="6" size="1"/>
<conversion type="float_configtime"/>
</parameter>
<parameter id="SHORT_ON_TIME">
<logical type="float" min="0.0" max="108000.0" default="111600.0" unit="s">
<special_value id="NOT_USED" value="111600.0"/>
</logical>
<physical type="integer" interface="config" list="3" index="7" size="1"/>
<conversion type="float_configtime"/>
</parameter>
<parameter id="SHORT_OFFDELAY_TIME">
<logical type="float" min="0.0" max="111600.0" default="0" unit="s"/>
<physical type="integer" interface="config" list="3" index="8" size="1"/>
<conversion type="float_configtime"/>
</parameter>
<parameter id="SHORT_OFF_TIME">
<logical type="float" min="0.0" max="108000.0" default="111600.0" unit="s">
<special_value id="NOT_USED" value="111600.0"/>
</logical>
<physical type="integer" interface="config" list="3" index="9" size="1"/>
<conversion type="float_configtime"/>
</parameter>
<parameter id="SHORT_ON_TIME_MODE">
<logical type="option">
<option id="ABSOLUTE" default="true"/>
<option id="MINIMAL"/>
</logical>
<physical type="integer" interface="config" list="3" index="0xA.7" size="0.1"/>
</parameter>
<parameter id="SHORT_OFF_TIME_MODE">
<logical type="option">
<option id="ABSOLUTE" default="true"/>
<option id="MINIMAL"/>
</logical>
<physical type="integer" interface="config" list="3" index="0xA.6" size="0.1"/>
</parameter>
<parameter id="SHORT_ACTION_TYPE">
<logical type="option">
<option id="INACTIVE"/>
<option id="JUMP_TO_TARGET" default="true"/>
<option id="TOGGLE_TO_COUNTER"/>
<option id="TOGGLE_INV_TO_COUNTER"/>
</logical>
<physical type="integer" interface="config" list="3" index="0xA.0" size="0.2"/>
</parameter>
<parameter id="SHORT_JT_OFF">
<logical type="option">
<option id="NO_JUMP_IGNORE_COMMAND"/>
<option id="ONDELAY"/>
<option id="ON"/>
<option id="OFFDELAY"/>
<option id="OFF" default="true"/>
</logical>
<physical type="integer" interface="config" list="3" index="0xB.4" size="0x0.4"/>
<conversion type="option_integer">
<value_map device_value="0x00" parameter_value="0"/>
<value_map device_value="0x01" parameter_value="1"/>
<value_map device_value="0x03" parameter_value="2"/>
<value_map device_value="0x04" parameter_value="3"/>
<value_map device_value="0x06" parameter_value="4"/>
</conversion>
</parameter>
<parameter id="SHORT_JT_ON">
<logical type="option">
<option id="NO_JUMP_IGNORE_COMMAND"/>
<option id="ONDELAY"/>
<option id="ON"/>
<option id="OFFDELAY"/>
<option id="OFF" default="true"/>
</logical>
<physical type="integer" interface="config" list="3" index="0xB.0" size="0x0.4"/>
<conversion type="option_integer">
<value_map device_value="0x00" parameter_value="0"/>
<value_map device_value="0x01" parameter_value="1"/>
<value_map device_value="0x03" parameter_value="2"/>
<value_map device_value="0x04" parameter_value="3"/>
<value_map device_value="0x06" parameter_value="4"/>
</conversion>
</parameter>
<parameter id="SHORT_JT_OFFDELAY">
<logical type="option">
<option id="NO_JUMP_IGNORE_COMMAND"/>
<option id="ONDELAY"/>
<option id="ON"/>
<option id="OFFDELAY"/>
<option id="OFF" default="true"/>
</logical>
<physical type="integer" interface="config" list="3" index="0xC.4" size="0x0.4"/>
<conversion type="option_integer">
<value_map device_value="0x00" parameter_value="0"/>
<value_map device_value="0x01" parameter_value="1"/>
<value_map device_value="0x03" parameter_value="2"/>
<value_map device_value="0x04" parameter_value="3"/>
<value_map device_value="0x06" parameter_value="4"/>
</conversion>
</parameter>
<parameter id="SHORT_JT_ONDELAY">
<logical type="option">
<option id="NO_JUMP_IGNORE_COMMAND"/>
<option id="ONDELAY"/>
<option id="ON"/>
<option id="OFFDELAY"/>
<option id="OFF" default="true"/>
</logical>
<physical type="integer" interface="config" list="3" index="0xC.0" size="0x0.4"/>
<conversion type="option_integer">
<value_map device_value="0x00" parameter_value="0"/>
<value_map device_value="0x01" parameter_value="1"/>
<value_map device_value="0x03" parameter_value="2"/>
<value_map device_value="0x04" parameter_value="3"/>
<value_map device_value="0x06" parameter_value="4"/>
</conversion>
</parameter>
<parameter id="LONG_CT_OFFDELAY">
<logical type="option">
<option id="X GE COND_VALUE_LO" default="true"/>
<option id="X GE COND_VALUE_HI"/>
<option id="X LT COND_VALUE_LO"/>
<option id="X LT COND_VALUE_HI"/>
<option id="COND_VALUE_LO LE X LT COND_VALUE_HI"/>
<option id="X LT COND_VALUE_LO OR X GE COND_VALUE_HI"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x82.4" size="0.4"/>
</parameter>
<parameter id="LONG_CT_ONDELAY">
<logical type="option">
<option id="X GE COND_VALUE_LO" default="true"/>
<option id="X GE COND_VALUE_HI"/>
<option id="X LT COND_VALUE_LO"/>
<option id="X LT COND_VALUE_HI"/>
<option id="COND_VALUE_LO LE X LT COND_VALUE_HI"/>
<option id="X LT COND_VALUE_LO OR X GE COND_VALUE_HI"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x82.0" size="0.4"/>
</parameter>
<parameter id="LONG_CT_OFF">
<logical type="option">
<option id="X GE COND_VALUE_LO" default="true"/>
<option id="X GE COND_VALUE_HI"/>
<option id="X LT COND_VALUE_LO"/>
<option id="X LT COND_VALUE_HI"/>
<option id="COND_VALUE_LO LE X LT COND_VALUE_HI"/>
<option id="X LT COND_VALUE_LO OR X GE COND_VALUE_HI"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x83.4" size="0.4"/>
</parameter>
<parameter id="LONG_CT_ON">
<logical type="option">
<option id="X GE COND_VALUE_LO" default="true"/>
<option id="X GE COND_VALUE_HI"/>
<option id="X LT COND_VALUE_LO"/>
<option id="X LT COND_VALUE_HI"/>
<option id="COND_VALUE_LO LE X LT COND_VALUE_HI"/>
<option id="X LT COND_VALUE_LO OR X GE COND_VALUE_HI"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x83.0" size="0.4"/>
</parameter>
<parameter id="LONG_COND_VALUE_LO">
<logical type="integer" min="0" max="255" default="50"/>
<physical type="integer" interface="config" list="3" index="0x84" size="1"/>
</parameter>
<parameter id="LONG_COND_VALUE_HI">
<logical type="integer" min="0" max="255" default="100"/>
<physical type="integer" interface="config" list="3" index="0x85" size="1"/>
</parameter>
<parameter id="LONG_ONDELAY_TIME">
<logical type="float" min="0.0" max="111600.0" default="0" unit="s"/>
<physical type="integer" interface="config" list="3" index="0x86" size="1"/>
<conversion type="float_configtime"/>
</parameter>
<parameter id="LONG_ON_TIME">
<logical type="float" min="0.0" max="108000.0" default="111600.0" unit="s">
<special_value id="NOT_USED" value="111600.0"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x87" size="1"/>
<conversion type="float_configtime"/>
</parameter>
<parameter id="LONG_OFFDELAY_TIME">
<logical type="float" min="0.0" max="111600.0" default="0" unit="s"/>
<physical type="integer" interface="config" list="3" index="0x88" size="1"/>
<conversion type="float_configtime"/>
</parameter>
<parameter id="LONG_OFF_TIME">
<logical type="float" min="0.0" max="108000.0" default="111600.0" unit="s">
<special_value id="NOT_USED" value="111600.0"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x89" size="1"/>
<conversion type="float_configtime"/>
</parameter>
<parameter id="LONG_ON_TIME_MODE">
<logical type="option">
<option id="ABSOLUTE" default="true"/>
<option id="MINIMAL"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x8A.7" size="0.1"/>
</parameter>
<parameter id="LONG_OFF_TIME_MODE">
<logical type="option">
<option id="ABSOLUTE" default="true"/>
<option id="MINIMAL"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x8A.6" size="0.1"/>
</parameter>
<parameter id="LONG_MULTIEXECUTE">
<logical type="option">
<option id="OFF"/>
<option id="ON" default="true"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x8A.5" size="0.1"/>
</parameter>
<parameter id="LONG_ACTION_TYPE">
<logical type="option">
<option id="INACTIVE"/>
<option id="JUMP_TO_TARGET" default="true"/>
<option id="TOGGLE_TO_COUNTER"/>
<option id="TOGGLE_INV_TO_COUNTER"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x8A.0" size="0.2"/>
</parameter>
<parameter id="LONG_JT_OFF">
<logical type="option">
<option id="NO_JUMP_IGNORE_COMMAND"/>
<option id="ONDELAY"/>
<option id="ON"/>
<option id="OFFDELAY"/>
<option id="OFF" default="true"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x8B.4" size="0x0.4"/>
<conversion type="option_integer">
<value_map device_value="0x00" parameter_value="0"/>
<value_map device_value="0x01" parameter_value="1"/>
<value_map device_value="0x03" parameter_value="2"/>
<value_map device_value="0x04" parameter_value="3"/>
<value_map device_value="0x06" parameter_value="4"/>
</conversion>
</parameter>
<parameter id="LONG_JT_ON">
<logical type="option">
<option id="NO_JUMP_IGNORE_COMMAND"/>
<option id="ONDELAY"/>
<option id="ON"/>
<option id="OFFDELAY"/>
<option id="OFF" default="true"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x8B.0" size="0x0.4"/>
<conversion type="option_integer">
<value_map device_value="0x00" parameter_value="0"/>
<value_map device_value="0x01" parameter_value="1"/>
<value_map device_value="0x03" parameter_value="2"/>
<value_map device_value="0x04" parameter_value="3"/>
<value_map device_value="0x06" parameter_value="4"/>
</conversion>
</parameter>
<parameter id="LONG_JT_OFFDELAY">
<logical type="option">
<option id="NO_JUMP_IGNORE_COMMAND"/>
<option id="ONDELAY"/>
<option id="ON"/>
<option id="OFFDELAY"/>
<option id="OFF" default="true"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x8C.4" size="0x0.4"/>
<conversion type="option_integer">
<value_map device_value="0x00" parameter_value="0"/>
<value_map device_value="0x01" parameter_value="1"/>
<value_map device_value="0x03" parameter_value="2"/>
<value_map device_value="0x04" parameter_value="3"/>
<value_map device_value="0x06" parameter_value="4"/>
</conversion>
</parameter>
<parameter id="LONG_JT_ONDELAY">
<logical type="option">
<option id="NO_JUMP_IGNORE_COMMAND"/>
<option id="ONDELAY"/>
<option id="ON"/>
<option id="OFFDELAY"/>
<option id="OFF" default="true"/>
</logical>
<physical type="integer" interface="config" list="3" index="0x8C.0" size="0x0.4"/>
<conversion type="option_integer">
<value_map device_value="0x00" parameter_value="0"/>
<value_map device_value="0x01" parameter_value="1"/>
<value_map device_value="0x03" parameter_value="2"/>
<value_map device_value="0x04" parameter_value="3"/>
<value_map device_value="0x06" parameter_value="4"/>
</conversion>
</parameter>
<default_values function="A">
<value id="LONG_JT_OFF" value="ONDELAY"/>
<value id="LONG_JT_OFFDELAY" value="ON"/>
<value id="LONG_JT_ON" value="ON"/>
<value id="LONG_JT_ONDELAY" value="ON"/>
<value id="SHORT_JT_OFF" value="ONDELAY"/>
<value id="SHORT_JT_OFFDELAY" value="ON"/>
<value id="SHORT_JT_ON" value="ON"/>
<value id="SHORT_JT_ONDELAY" value="ON"/>
</default_values>
<default_values function="B">
<value id="LONG_JT_ON" value="OFFDELAY"/>
<value id="SHORT_JT_ON" value="OFFDELAY"/>
</default_values>
<default_values function="AB">
<value id="LONG_JT_OFF" value="ONDELAY"/>
<value id="LONG_JT_ON" value="OFFDELAY"/>
<value id="LONG_JT_ONDELAY" value="ON"/>
<value id="SHORT_JT_OFF" value="ONDELAY"/>
<value id="SHORT_JT_ON" value="OFFDELAY"/>
<value id="SHORT_JT_ONDELAY" value="ON"/>
</default_values>
</paramset>
<paramset id="key_valueset">
<parameter id="PRESS_SHORT" operations="write,event" loopback="true" control="BUTTON.SHORT" burst_suppression="0">
<logical type="action"/>
<physical type="integer" interface="command" value_id="COUNTER">
<event frame="KEY_EVENT_SHORT" auth_violate_policy="reject"/>
<set request="KEY_SIM_SHORT"/>
</physical>
<conversion type="action_key_counter" sim_counter="SIM_COUNTER"/>
</parameter>
<parameter id="PRESS_LONG" operations="write,event" loopback="true" control="BUTTON.LONG">
<logical type="action"/>
<physical type="integer" interface="command" value_id="COUNTER">
<event frame="KEY_EVENT_LONG" auth_violate_policy="reject"/>
<set request="KEY_SIM_LONG"/>
</physical>
<conversion type="action_key_counter" sim_counter="SIM_COUNTER"/>
</parameter>
<parameter id="PRESS_LONG_RELEASE" operations="event" ui_flags="internal" burst_suppression="0">
<logical type="action"/>
<physical type="integer" interface="command" value_id="COUNTER">
<event frame="KEY_EVENT_LONG_BIDI" auth_violate_policy="reject"/>
</physical>
</parameter>
<parameter id="PRESS_CONT" operations="event" ui_flags="internal" burst_suppression="0">
<logical type="action"/>
<physical type="integer" interface="command" value_id="COUNTER">
<event frame="KEY_EVENT_LONG" auth_violate_policy="reject"/>
</physical>
<conversion type="action_key_same_counter" sim_counter="SIM_CONT_COUNTER"/>
</parameter>
<parameter id="INSTALL_TEST" operations="event" ui_flags="internal">
<logical type="action"/>
<physical type="integer" interface="command" value_id="TEST_COUNTER">
<event frame="KEY_EVENT_SHORT"/>
<event frame="KEY_EVENT_LONG"/>
</physical>
</parameter>
</paramset>
<paramset id="key_paramset">
<parameter id="LONG_PRESS_TIME">
<logical type="float" min="0.3" max="1.8" default="0.4" unit="s"/>
<physical type="integer" interface="config" list="1" index="4.4" size="0.4"/>
<conversion type="float_integer_scale" factor="10" offset="-0.3"/>
</parameter>
<parameter id="DBL_PRESS_TIME">
<logical type="float" min="0.0" max="1.5" default="0.0" unit="s"/>
<physical type="integer" interface="config" list="1" index="9.0" size="0.4"/>
<conversion type="float_integer_scale" factor="10" offset="0.0"/>
</parameter>
<parameter id="AES_ACTIVE" ui_flags="internal">
<logical type="boolean" default="false"/>
<physical type="boolean" interface="internal" value_id="AES"/>
</parameter>
</paramset>
<paramset id="key_linkset">
<parameter id="PEER_NEEDS_BURST">
<logical type="boolean" default="false"/>
<physical type="integer" interface="config" list="4" index="1.0" size="0.1"/>
</parameter>
<parameter id="EXPECT_AES">
<logical type="boolean" default="false"/>
<physical type="integer" interface="config" list="4" index="1.7" size="0.1"/>
</parameter>
<enforce id="EXPECT_AES" value="$PEER.AES"/>
</paramset>
</paramset_defs>
</device>
Code: Alles auswählen
<device version="1" rx_modes="BURST" supports_aes="true" cyclic_timeout="600">
Code: Alles auswählen
/usr/local/addons/jp-hb-devices-addon/firmware/rftypes$ cat /usr/local/addons/jp-hb-devices-addon/firmware/rftypes/hb-uni-senact-4-4-rc.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<device version="1" rx_modes="BURST" supports_aes="true" cyclic_timeout="600">
<supported_types>
<type name="HB-UNI-SenAct-4-4-RC" id="HB-UNI-SenAct-4-4-RC" priority="2">
<parameter index="10.0" size="2.0" const_value="0xf332"/>
</type>
</supported_types>