Seite 1 von 1

HM-WDS100-C6-0 Wiederbelebung

Verfasst: 22.08.2019, 08:41
von fluxfrei
Hallo Ihr lieben
ich habe (offensichtlich nicht allein) einen nach Batteriewechsel defekten Wettersensor. Nach einigem hin und her ringen einen neuen zu kaufen oder einen kpl. Nachbau anzugehen (Bsp der von JP) habe ich mich entschlossen nur die Platine auszubauen und neu, auf Basis AsksinPP / Arduino, zu gestalten um Gehäuse und Mechanik weiter zu nutzen. (Funktionsumfang reicht mir).
Inzwischen ist fast alles fertig und läuft. Bei Interesse gerne Mehr Info's, Bilder und Source's !
Basis des Sketch ist PaPa's Beispiel zu HM-WDS100-C6-o-2
Hier habe ich nun das Problem, dass die Konfigurationsregister (List0 und List1) sich teilweise überschreiben.
Wenn ich den Wert für den Sonnenschein oder CycleInfoMessage ändere (Via CCU GUI) nehmen beide Variable den gleichen Wert an.
Ändere ich also CycleInfoMessage auf 5, nimmt SunshineThreshold den gleichen Wert (5) an.
Ändere ich dann SunshineThreshold auf 50, nimmt CycleInfoMessage den gleichen Wert an.
Es ist also immer SunshineThreshold = CycleInfoMessage.

Ich lese im Kontext der Trigger Routine aus mit

Code: Alles auswählen

    DPRINTLN("WSResult:" + String(this->getList1().windSpeedResultSource()));  // 0=Mittelwert  1=Maximalwert
    DPRINTLN("SunThres:" + String(this->getList1().sunshineThreshold()));
    DPRINTLN("LiveMode:" + String(device().getList0().liveModeRx()));
    DPRINTLN("locRestD:" + String(device().getList0().localResetDisable()));
    DPRINTLN("CycleMsg:" + String(device().getList0().cycleInfoMsgDis()));
Die Registerdefinition ist 1:1 die aus dem Beispiel.
kann mir jemand Helfen ?

Grüße
Tobias

Re: HM-WDS100-C6-0 Wiederbelebung

Verfasst: 23.08.2019, 23:11
von fluxfrei
Wer lange genug sucht, findet irgendwann selber eine Lösung :D

Ich habe die Listen nun auf die Verwendung der Register.h umgestellt und nun geht es.
Evtl. baut pa-pa das ja in den Example Sketch ein ?

Code: Alles auswählen

DEFREGISTER(UReg0, DREG_BURSTRX, DREG_CYCLICINFOMSGDIS, DREG_LOCALRESETDISABLE)
class Wds100List0 : public RegList0<UReg0> {
public:
  Wds100List0(uint16_t addr) : RegList0<UReg0>(addr) {}

  // AKA burstRx
  bool liveModeRx (bool v) const { return this->writeRegister(DREG_BURSTRX,v); }
  bool liveModeRx () const { return this->readRegister(DREG_BURSTRX,false); }
  
  uint8_t transmitDevTryMax () const { return 6; }
  uint8_t ledMode () const { return 0; }  // LED nur bei Button aktionen

  void defaults () {
    clear();
    liveModeRx(false);
    localResetDisable(false);
    cyclicInfoMsgDis(0);
  }
};

DEFREGISTER(UReg1, 0x05, 0x0a)
class Wds100List1 : public RegList1<UReg1> {
public:
  Wds100List1(uint16_t addr) : RegList1<UReg1>(addr) {}

  bool sunshineThreshold (uint8_t value) const { return this->writeRegister(0x05, value); }
  uint8_t sunshineThreshold () const { return this->readRegister(0x05, 0); }
  bool windSpeedResultSource (uint8_t value) const { return this->writeRegister(0x0a, value); }
  uint8_t windSpeedResultSource () const { return this->readRegister(0x0a, 0); }

  void defaults () {
    clear();
    sunshineThreshold(49);
    windSpeedResultSource(0); // 0=Mittelwert  1=Maximalwert
  }
};
nicht vergessen: #include <Register.h>

Grüße
Tobias

p.s.: Bei der Umstellung bin ich noch auf etwas im original Sketch gestossen. Die Variable ChannelList wird sowohl für die Liste0 als auch Liste 1 verwendet. Ich weiss leider nicht, ob dies die Ursache war.