HM-Sec-RHS Nachbau mit AA-Batterie

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

Moderator: Co-Administratoren

Jack01
Beiträge: 128
Registriert: 01.02.2017, 17:08
Hat sich bedankt: 49 Mal
Danksagung erhalten: 9 Mal

HM-Sec-RHS Nachbau mit AA-Batterie

Beitrag von Jack01 » 13.02.2021, 11:38

Moin,
nachdem ich jetzt mehrere Fenstersensoren mit der CR2032 Version im Betrieb habe, wollte ich mal ein weiteres Gerät mit der AA-Variante aufbauen.
Dabei ist mir aufgefallen, dass es ein neues HM-SEC-RHS.ino Sketch gibt mit der Option für das Gerät RHS3. Hier geht es wohl hauptsächlich um die Messung der Batteriespannung für dieses neue Gerät.
Geändert hat sich auch die Anweisung von "#include <ThreeState.h>" auf "#include <ContactState.h>"


In der Anleitung zum Nachbau des Sensors wird folgendes gesagt:
#Software
Zuerst werden die Fuses gesetzt und der Bootloader gebrannt, siehe HMSensor Software.

Als Sketch wird HM-SEC-RHS.ino (opens new window)verwendet und per FTDI geflasht.

Die per-default einkommentierten #define Settings passen zum Betrieb für die HMSensor-CR2032 sowie den ProMini-Bootloader. Device-ID und Serial wird, wie immer, pro Device eindeutig zu vergeben.
So wie ich das sehe, wird die Spannungsmessung bei der AA-Variante über die Pins A3 und D7 gemacht. In den Sketches kann ich aber nicht sehen, was ich da aus- oder ein-kommentieren muß (oder habe ich hier schon Corona bedingte ausfälle :? )

Gruß

Hans-Jürgen
Raspberrymatic als VM auf Proxmox (Fujitsu Esprimo) mit HB-RF-USB und 34 Geräte (18 x Eigenbau)
4 x Amazon Alexa, ioBroker
Remote Control via TinyMatic und VPN
Motion Eye und ioBroker auf Proxmox

papa
Beiträge: 705
Registriert: 22.05.2018, 10:23
Hat sich bedankt: 24 Mal
Danksagung erhalten: 120 Mal

Re: HM-Sec-RHS Nachbau mit AA-Batterie

Beitrag von papa » 13.02.2021, 14:28

Infos zum RHS-3 gibt es hier https://forum.fhem.de/index.php/topic,109786.0.html und https://github.com/pa-pa/HB-Sec-RHS-3

Ich bin mir nicht sicher, was Du mit AA meinst. Falls es um die Verwendung der Stepup-Platine geht - einfach hier

https://github.com/pa-pa/AskSinPP/blob/ ... HS.ino#L30

in

Code: Alles auswählen

#define DEVICE_CONFIG CFG_STEPUP_ON,22,19
ändern und die zwei Werte für BatterieLow (22) und Batterie-Critical (19) entsprechend der Anzahl der Batterien anpassen.
Anfragen zur AskSin++ werden nur im Forum beantwortet

Jack01
Beiträge: 128
Registriert: 01.02.2017, 17:08
Hat sich bedankt: 49 Mal
Danksagung erhalten: 9 Mal

Re: HM-Sec-RHS Nachbau mit AA-Batterie

Beitrag von Jack01 » 13.02.2021, 17:29

@papa:
Ok, Danke!

Es war mir nicht klar, dass diese Definition (#define DEVICE_CONFIG CFG_STEPUP_OFF,22,19) dafür zuständig ist.

Mit AA-Batterie meine ich eine 1,5V Batterie (Mignon, IEC-Größe R6). Ich habe die Version mit den 2 Reedkontakten aufgebaut, nutze also nicht die Version RHS3. Und als Platine benutze ich die HMSensor-StepUp von Dir.

Jetzt habe ich aber trotzdem noch ein paar Fragen:
Wofür stehen die beiden Werte 22 und 19 in dieser Definition?
Was muß ich hier für eine 1,5V Zelle angeben (oder besser: wo kann ich das nachlesen)?
In dem von Dir hier referenzierten Sketch ist die Definition #define BATTERY_IRQ aktiviert. In dem alten Sketch war sie deaktiviert. Muß sie für die Step-Up Version aktiviert sein?
In dem von Dir hier referenzierten Sketch ist #include <ContactState.h> angegeben. In dem alten Sketch steht hier #include <ThreeState.h> eingetragen.
Welche Datei muß ich bei dem Fenstersensor includen?

Vielen Dank für die Hilfe.

Gruß

Hans-Jürgen
Raspberrymatic als VM auf Proxmox (Fujitsu Esprimo) mit HB-RF-USB und 34 Geräte (18 x Eigenbau)
4 x Amazon Alexa, ioBroker
Remote Control via TinyMatic und VPN
Motion Eye und ioBroker auf Proxmox

der-pw
Beiträge: 435
Registriert: 26.01.2019, 13:39
Wohnort: Wolfenbüttel
Hat sich bedankt: 126 Mal
Danksagung erhalten: 100 Mal
Kontaktdaten:

Re: HM-Sec-RHS Nachbau mit AA-Batterie

Beitrag von der-pw » 13.02.2021, 22:46

Ich probiere es mal:
Jack01 hat geschrieben:
13.02.2021, 17:29
Wofür stehen die beiden Werte 22 und 19 in dieser Definition?
22 = Low-Bat und 19 = critical. Also die Schwellenwert in Volt ohne Dezimaltrennzeichen weil int.
Bei Low Bat kommt die Meldung, dass die Batterie leer ist, und bei critical wird "sleepForever()" aufgerufen.
Die Werte musst du halt anpassen an eine Zelle. Bei Trockenbatterien fahre ich mit

Code: Alles auswählen

#define DEVICE_CONFIG CFG_STEPUP_ON,9,10
bislang ganz gut (ich nehme AAA). Ich teste aktuell immernoch "Langzeit" mit zwei RHS mit Stepup.
Akkus würde ich nicht so tief entladen.

Jack01 hat geschrieben:
13.02.2021, 17:29
In dem von Dir hier referenzierten Sketch ist die Definition #define BATTERY_IRQ aktiviert. In dem alten Sketch war sie deaktiviert. Muß sie für die Step-Up Version aktiviert sein?
Zum Zeitpunkt des alten Sketch war BATTERY_IRQ noch nicht für Step-up bzw. external-Bat verfügbar.
Korrigiere mich einer wenn ich hier falsch liege. Ich muss da unbedingt wieder Fahrt aufnehmen.
Jack01 hat geschrieben:
13.02.2021, 17:29
In dem von Dir hier referenzierten Sketch ist #include <ContactState.h> angegeben. In dem alten Sketch steht hier #include <ThreeState.h> eingetragen.
ContactState.h ist die "neue" Klasse für diesen Job. Also die benutzen.
Grüße,
Patrick

https://github.com/der-pw

Jack01
Beiträge: 128
Registriert: 01.02.2017, 17:08
Hat sich bedankt: 49 Mal
Danksagung erhalten: 9 Mal

Re: HM-Sec-RHS Nachbau mit AA-Batterie

Beitrag von Jack01 » 14.02.2021, 10:24

Danke für die Klarstellung.

In Deinem Beispiel hast Du jetzt den kleineren Wert als erstes und den größeren Wert als 2. eingetragen. Ist die Reihenfolge für Low-Bat und Critical egal oder hast Du Dich hier vertan? (im original Sketch steht es andersrum)

Es währe schön, wenn jemand das mit dem BATTERY_IRQ auch noch erklären könnte.

Gruß

Hans-Jürgen
Raspberrymatic als VM auf Proxmox (Fujitsu Esprimo) mit HB-RF-USB und 34 Geräte (18 x Eigenbau)
4 x Amazon Alexa, ioBroker
Remote Control via TinyMatic und VPN
Motion Eye und ioBroker auf Proxmox

der-pw
Beiträge: 435
Registriert: 26.01.2019, 13:39
Wohnort: Wolfenbüttel
Hat sich bedankt: 126 Mal
Danksagung erhalten: 100 Mal
Kontaktdaten:

Re: HM-Sec-RHS Nachbau mit AA-Batterie

Beitrag von der-pw » 14.02.2021, 11:56

Jack01 hat geschrieben:
14.02.2021, 10:24
Ist die Reihenfolge für Low-Bat und Critical egal
Nein die ist natürlich nicht egal.

Code: Alles auswählen

#define DEVICE_CONFIG CFG_STEPUP_ON,10,9
wäre dann richtig.
Hatte aus meinem "Probesketch" zitiert.
Grüße,
Patrick

https://github.com/der-pw

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

Re: HM-Sec-RHS Nachbau mit AA-Batterie

Beitrag von jp112sdl » 14.02.2021, 12:25

Jack01 hat geschrieben:
14.02.2021, 10:24
Es währe schön, wenn jemand das mit dem BATTERY_IRQ auch noch erklären könnte.
Das geht in dem Sketch nur, wenn du ohne StepUp arbeitest und die interne Vcc Messung des AVR nutzt.
Es wird dann kontinuierlich gemessen, so lange der AVR wach ist.

Willst du extern messen mit Spannungsteiler, dann musst du die Zeile auskommentieren.
Dann wird die AsyncMeter Implementierung genutzt und stündlich gemessen.

VG,
Jérôme ☕️

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

der-pw
Beiträge: 435
Registriert: 26.01.2019, 13:39
Wohnort: Wolfenbüttel
Hat sich bedankt: 126 Mal
Danksagung erhalten: 100 Mal
Kontaktdaten:

Re: HM-Sec-RHS Nachbau mit AA-Batterie

Beitrag von der-pw » 14.02.2021, 16:06

jp112sdl hat geschrieben:
14.02.2021, 12:25
Das geht in dem Sketch nur, wenn du ohne StepUp arbeitest und die interne Vcc Messung des AVR nutzt.
Stimmt, jetzt bin ich wieder im Bilde. ;)

Um irq external-Bat zu messen muss das Asksin-Gerät so definiert werden.

Code: Alles auswählen

typedef AskSin<LedType,IrqExternalBatt<17,7>,RadioType> BaseHal; 
Ich hänge mal den Sketch an, mit dem ich momentan (dank Jérôme) noch teste.
Der ist sicher alles andere als sauber umgesetzt. Aber in den letzten Monaten, seit dem ich auch noch Mathe und Physik unterrichte, fehlt es an Zeit.

Code: Alles auswählen

//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2016-10-31 papa Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
//- -----------------------------------------------------------------------------------------------------------------------

// define this to implement new RHS3 device
// #define RHS3

// define this to read the device id, serial and device type from bootloader section
// #define USE_OTA_BOOTLOADER

// use background internal VCC measure
#define BATTERY_IRQ

#ifdef RHS3
  // send battery value
  #define CONTACT_STATE_WITH_BATTERY
#endif


#define CFG_STEPUP_BYTE 0x00
#define CFG_STEPUP_OFF  0x00
#define CFG_STEPUP_ON   0x01

#define CFG_BAT_LOW_BYTE 0x01
#define CFG_BAT_CRITICAL_BYTE 0x02

// define device configuration bytes
#define DEVICE_CONFIG CFG_STEPUP_ON,10,9

// 24 0030 4D455130323134373633 80 910101

#define EI_NOTEXTERNAL
#include <EnableInterrupt.h>
#include <AskSinPP.h>
#include <LowPower.h>

#include <Register.h>
#include <ContactState.h>

// we use a Pro Mini
// Arduino pin for the LED
// D4 == PIN 4 on Pro Mini
#define LED1_PIN 4
#define LED2_PIN 5
// Arduino pin for the config button
// B0 == PIN 8 on Pro Mini
#define CONFIG_BUTTON_PIN 8

#define SENS1_PIN 14
#define SENS2_PIN 15
#define SABOTAGE_PIN 16

// activate additional open detection by using a third sensor pins
// #define SENS3_PIN 16
// #define SABOTAGE_PIN 0

// number of available peers per channel
#define PEERS_PER_CHANNEL 10

// all library classes are placed in the namespace 'as'
using namespace as;

// define all device properties
#ifdef RHS3
const struct DeviceInfo PROGMEM devinfo = {
    {0xa9,0xb8,0xc7},       // Device ID
    "papaa9b8c7",           // Device Serial
    {0xF2,0x09},            // Device Model
    0x10,                   // Firmware Version
    as::DeviceType::ThreeStateSensor, // Device Type
    {0x01,0x00}             // Info Bytes
};
#else
const struct DeviceInfo PROGMEM devinfo = {
    {0x09,0x56,0x02},       // Device ID
    "papafdgk02",           // Device Serial
    {0x00,0xC3},            // Device Model
    0x22,                   // Firmware Version
    as::DeviceType::ThreeStateSensor, // Device Type
    {0x01,0x00}             // Info Bytes
};
#endif

class SwitchSensor {
  InternalVCC internal;
  ExternalVCC<17,7,LOW,3000> external;
  uint8_t mod;
public:
  typedef uint16_t ValueType;
  static const int DefaultDelay = 250;

  SwitchSensor() : mod(0) {}

  void mode (uint8_t m) {
    mod = m;
    init();
  }

  void init () {
    if( mod == 0 ) {
      internal.init();
      DPRINTLN("InternalVCC");
    }
    else {
      external.init();
      DPRINTLN("Stepup - ExternalVCC");
    }
  }

  void start () {
    if( mod == 0 ) internal.start();
    else external.start();
  }

  uint16_t finish () {
    return mod == 0 ? internal.finish() : external.finish();
  }
};

#ifdef BATTERY_IRQ
  typedef IrqInternalBatt BatSensor;
#else
  typedef BattSensor<AsyncMeter<SwitchSensor> > BatSensor;
#endif

/**
 * Configure the used hardware
 */
typedef AvrSPI<10,11,12,13> SPIType;
typedef Radio<SPIType,2> RadioType;
typedef DualStatusLed<LED2_PIN,LED1_PIN> LedType;
typedef AskSin<LedType,IrqExternalBatt<17,7>,RadioType> BaseHal; 
class Hal : public BaseHal {
public:
  void init (const HMID& id) {
    BaseHal::init(id);
  }
} hal;

#ifdef RHS3
  DEFREGISTER(Reg0,DREG_CYCLICINFOMSG,MASTERID_REGS,DREG_TRANSMITTRYMAX,DREG_SABOTAGEMSG,DREG_LOWBATLIMIT)
#else
  DEFREGISTER(Reg0,DREG_CYCLICINFOMSG,MASTERID_REGS,DREG_TRANSMITTRYMAX,DREG_SABOTAGEMSG)
#endif
class RHSList0 : public RegList0<Reg0> {
public:
  RHSList0(uint16_t addr) : RegList0<Reg0>(addr) {}
  void defaults () {
    clear();
    cycleInfoMsg(true);
    transmitDevTryMax(6);
    sabotageMsg(true);
#ifdef RHS3
    lowBatLimit(22); // default low bat 2.2V
#endif
  }
};

DEFREGISTER(Reg1,CREG_AES_ACTIVE,CREG_MSGFORPOS,CREG_EVENTDELAYTIME,CREG_LEDONTIME,CREG_TRANSMITTRYMAX)
class RHSList1 : public RegList1<Reg1> {
public:
  RHSList1 (uint16_t addr) : RegList1<Reg1>(addr) {}
  void defaults () {
    clear();
    msgForPosA(1); // CLOSED
    msgForPosB(2); // OPEN
    msgForPosC(3); // TILTED
    // aesActive(false);
    // eventDelaytime(0);
    ledOntime(100);
    transmitTryMax(6);
  }
};

#ifdef SENS3_PIN
class ThreePinPosition : public TwoPinPosition {
  uint8_t pin3;
public:
  ThreePinPosition () : pin3(0) {}
  void init (uint8_t p1,uint8_t p2,uint8_t p3,const uint8_t* pmap) {
    TwoPinPosition::init(p1,p2,pmap);
    pin3 = p3;
  }
  void measure (__attribute__((unused)) bool async=false) {
    TwoPinPosition::measure(async);
    if( _position == State::PosA && AskSinBase::readPin(pin3) == HIGH) {
      _position = State::PosB;
    }
  }
};

template <class HALTYPE,class List0Type,class List1Type,class List4Type,int PEERCOUNT>
class ThreePinChannel : public ThreeStateGenericChannel<ThreePinPosition,HALTYPE,List0Type,List1Type,List4Type,PEERCOUNT> {
public:
  typedef ThreeStateGenericChannel<ThreePinPosition,HALTYPE,List0Type,List1Type,List4Type,PEERCOUNT> BaseChannel;

  ThreePinChannel () : BaseChannel() {};
  ~ThreePinChannel () {}

  void init (uint8_t pin1,uint8_t pin2,uint8_t pin3,uint8_t sabpin,const uint8_t* pmap) {
    BaseChannel::init(sabpin);
    BaseChannel::possens.init(pin1,pin2,pin3,pmap);
  }

};

typedef ThreePinChannel<Hal,RHSList0,RHSList1,DefList4,PEERS_PER_CHANNEL> ChannelType;
#else
typedef ThreeStateChannel<Hal,RHSList0,RHSList1,DefList4,PEERS_PER_CHANNEL> ChannelType;
#endif

class RHSType : public ThreeStateDevice<Hal,ChannelType,1,RHSList0> {
public:
  typedef ThreeStateDevice<Hal,ChannelType,1,RHSList0> TSDevice;
  RHSType(const DeviceInfo& info,uint16_t addr) : TSDevice(info,addr) {}
  virtual ~RHSType () {}

  virtual void configChanged () {
    TSDevice::configChanged();
    // set battery low/critical values
    #ifdef RHS3
    battery().low(getList0().lowBatLimit());
    battery().critical(getList0().lowBatLimit()-3);
    #else
    battery().low(getConfigByte(CFG_BAT_LOW_BYTE));
    battery().critical(getConfigByte(CFG_BAT_CRITICAL_BYTE));
    #endif
    #ifndef BATTERY_IRQ
    // set the battery mode
    battery().meter().sensor().mode(getConfigByte(CFG_STEPUP_BYTE));
    #endif
  }
};

RHSType sdev(devinfo,0x20);
ConfigButton<RHSType> cfgBtn(sdev);

const uint8_t posmap[4] = {Position::State::PosB,Position::State::PosC,Position::State::PosA,Position::State::PosB};
void setup () {
  DINIT(57600,ASKSIN_PLUS_PLUS_IDENTIFIER);
  sdev.init(hal);
  buttonISR(cfgBtn,CONFIG_BUTTON_PIN);
#ifdef SENS3_PIN
  sdev.channel(1).init(SENS1_PIN,SENS2_PIN,SENS3_PIN,SABOTAGE_PIN,posmap);
#else
  sdev.channel(1).init(SENS1_PIN,SENS2_PIN,SABOTAGE_PIN,posmap);
#endif
  sdev.initDone();
    
  // measure battery every 1h
  hal.battery.init(seconds2ticks(60UL*60),sysclock);
  while( hal.battery.current() == 0 ) ; // wenn bei Start noch 0V gemessen wurde 
}

void loop() {
  bool worked = hal.runready();
  bool poll = sdev.pollRadio();
  if( worked == false && poll == false ) {
    // deep discharge protection
    // if we drop below critical battery level - switch off all and sleep forever
    if( hal.battery.critical() ) {
      // this call will never return
      hal.sleepForever();
    }
    // if nothing to do - go sleep
    hal.sleep<>();
  }
}
jp112sdl hat geschrieben:
14.02.2021, 12:25
und stündlich gemessen.
Ten Sharp, echt jetzt!? :mrgreen: :mrgreen: :mrgreen:
Zeig mal deine Version, wenn du sie einstudiert hast. ;)
Grüße,
Patrick

https://github.com/der-pw

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

Re: HM-Sec-RHS Nachbau mit AA-Batterie

Beitrag von jp112sdl » 14.02.2021, 16:13

der-pw hat geschrieben:
14.02.2021, 16:06
Ten Sharp, echt jetzt!?
Oh ha, ich wollte eigentlich hier hin verlinken:
https://github.com/pa-pa/AskSinPP/blob/ ... S.ino#L253
...saß aber parallel am Piano an besagtem Song :roll: :mrgreen:
der-pw hat geschrieben:
14.02.2021, 16:06
Zeig mal deine Version, wenn du sie einstudiert hast.
Da gibt es ja schon lange eine.
Aber ich wollt mir jetzt noch den Rest draufdrücken, weil wir den mal mit der Band machen wollen (sofern wir irgendwann wieder proben dürfen :evil: )

VG,
Jérôme ☕️

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

der-pw
Beiträge: 435
Registriert: 26.01.2019, 13:39
Wohnort: Wolfenbüttel
Hat sich bedankt: 126 Mal
Danksagung erhalten: 100 Mal
Kontaktdaten:

Re: HM-Sec-RHS Nachbau mit AA-Batterie

Beitrag von der-pw » 14.02.2021, 16:28

Ah doch, ich erinnere mich, dass ich das Video mal gesehen hab.
jp112sdl hat geschrieben:
14.02.2021, 16:13
(sofern wir irgendwann wieder proben dürfen )
Vermutlich dann, wenn ich meinen Job als Freizeitlehrer wieder abgebe. ;)
Grüße,
Patrick

https://github.com/der-pw

Antworten

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