Nachbau von HM-Geräten mit Arduino inkl. BidCos / AskSinPP

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

klassisch
Beiträge: 3974
Registriert: 24.03.2011, 04:32
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 110 Mal
Danksagung erhalten: 70 Mal

Re: Nachbau von HM-Geräten mit Arduino inkl. BidCos / AskSinPP

Beitrag von klassisch » 06.08.2018, 19:57

Editiert habe ich diese Datei. Ist das die richtige?

Code: Alles auswählen

/usr/local/addons/jp-hb-devices-addon/firmware/rftypes/hb-uni-senact-4-4-rc.xml

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: Nachbau von HM-Geräten mit Arduino inkl. BidCos / AskSinPP

Beitrag von jp112sdl » 06.08.2018, 20:01

Ja, das ist die richtige, sofern du auch den RC geflasht hast.
EDIT: 0xF33201 -> ja ist richtig.

So lange da im Log steht BURST=0, wird kein Burst gesendet.
Bei mir habe ich gerade noch mal geschaut - es wird erst ein Telegramm ohne Burst gesendet. Wenn keine Antwort vom Aktor kommt (der ja theoretisch durch einen vorhergehenden Schaltvorgang noch wach sein könnte), wird das zweite Telegramm dann erst mit Burst gesendet.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

klassisch
Beiträge: 3974
Registriert: 24.03.2011, 04:32
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 110 Mal
Danksagung erhalten: 70 Mal

Re: Nachbau von HM-Geräten mit Arduino inkl. BidCos / AskSinPP

Beitrag von klassisch » 06.08.2018, 20:10

Ja, geflasht habe ich den RC. Ein paar Pins geändert, aber das sollte nicht stören

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
  };
Im XML steht dazu

Code: Alles auswählen

      <parameter index="10.0" size="2.0" const_value="0xf332"/>
          <channel index="1" type="SWITCH" count="4">

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: Nachbau von HM-Geräten mit Arduino inkl. BidCos / AskSinPP

Beitrag von jp112sdl » 06.08.2018, 20:35

Diese Kombination funktioniert bei mir mit Burst.
Sketch:

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);
  }
}
XML:

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>

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

klassisch
Beiträge: 3974
Registriert: 24.03.2011, 04:32
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 110 Mal
Danksagung erhalten: 70 Mal

Re: Nachbau von HM-Geräten mit Arduino inkl. BidCos / AskSinPP

Beitrag von klassisch » 06.08.2018, 20:59

Hab jetzt nochmals die xml aus dem Post verwendet, Gerät gelöscht, neu angelernt. CCU burstet nicht.
Morgen mal den orig Sketch auf einen arduino mini flashen statt auf den 644. Mal sehen. sehr seltsam.

Vielleicht ein Rechtethema? chmod 777? aber ich kann die Datei ändern und das reicht, denke, daß das System lesen darf, denn die Webui zeigt ja die Konfigstruktur.

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: Nachbau von HM-Geräten mit Arduino inkl. BidCos / AskSinPP

Beitrag von jp112sdl » 06.08.2018, 21:24

Denke nicht, dass es an den Rechten liegt, da sonst das Gerät gar nicht angelernt werden könnte.

Du hast auch / rw gemountet? Aber sonst hättest du ja auch eine Fehlermeldung beim Speichern bekommen...

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

klassisch
Beiträge: 3974
Registriert: 24.03.2011, 04:32
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 110 Mal
Danksagung erhalten: 70 Mal

Re: Nachbau von HM-Geräten mit Arduino inkl. BidCos / AskSinPP

Beitrag von klassisch » 06.08.2018, 21:30

Ja, hat alles winscp gemacht und ich habe die Dateien nach dem Ändern immer wieder neu eingelesen. Und waren auch im Linux-LF Format. Editor notepad++. mache so ziemlich alles mit diesem setup.

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: Nachbau von HM-Geräten mit Arduino inkl. BidCos / AskSinPP

Beitrag von jp112sdl » 06.08.2018, 21:35

Also mal ganz von vorn... Wohin hast du die Datei kopiert?
WinSCP mountet doch nicht etwa ein readonly Filesystem automatisch read/write?

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

klassisch
Beiträge: 3974
Registriert: 24.03.2011, 04:32
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 110 Mal
Danksagung erhalten: 70 Mal

Re: Nachbau von HM-Geräten mit Arduino inkl. BidCos / AskSinPP

Beitrag von klassisch » 06.08.2018, 21:45

Die Datei mit WinSCP ansurfen, rechte Maustaste -> Bearbeiten -> Bearbeiten mit Notepad++
Bearbeiten und mit ctl S abgespeichert.
Kann danach auch die Datei aufs Windows System runterladen und anschauen.

Code: Alles auswählen

<device version="1" rx_modes="BURST" supports_aes="true" cyclic_timeout="600">
Die Zeile ist die geänderte. Also das sollte klappen.

Edit: Ergebnis von cat

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>
Zuletzt geändert von klassisch am 06.08.2018, 21:51, insgesamt 1-mal geändert.

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: Nachbau von HM-Geräten mit Arduino inkl. BidCos / AskSinPP

Beitrag von jp112sdl » 06.08.2018, 21:46

Bitte mal den Pfad nennen!
WO hast du die Datei geändert?

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Gesperrt

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“