Defekte HM-Sec-RHS mit AskSin-FW wiederbeleben?

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

Moderator: Co-Administratoren

frank!
Beiträge: 20
Registriert: 09.03.2021, 10:05
System: Alternative CCU (auf Basis OCCU)

Re: Defekte HM-Sec-RHS mit AskSin-FW wiederbeleben?

Beitrag von frank! » 04.04.2023, 10:05

jp112sdl hat geschrieben:
03.04.2023, 21:21
Und da du ja bewiesen hast, dass damit zyklisch eine Nachricht gesendet wird, scheint der MSP beim RHS tatsächlich nix zu quittieren, wie es beim SCI der Fall ist.
genau genommen nicht "nix", eher eine "schwarze" null, zb wie beim sci ohne aktivierter cycle msg.
könnte sein, dass der msp, diese spezielle, kurze timerzeit als "null" detektiert und daher mit null antwortet. vielleicht nur ein spezieller 1bit vergleich.


mein rhs ist scheinbar stehen geblieben, keine reaktionen mehr bei allen 4 tastern. letzte msg war:

Code: Alles auswählen

2023.04.04 03:57:17.434 0: HMLAN_Parse: hmlan1 R:E196BD8   stat:0000 t:39E13E80 d:FF r:FFCC     m:99 A210 196BD8 1ACE1F 0601640E36
etwas voodoo:
letzte msg nummer 0x99 (153) minus 1. msg nummer 0x0E (14) => 139 => "10001011" => 8bit antwort vom sci !?!
vielleicht also ein erwartbares stehenbleiben?
muss der avr etwas tun, um dieses erwartbare stehenbleiben zu verhindern?

ich werde mal zwischendurch ein taster betätigen.


du hattest noch eine andere antwort mit => 10011111 (159). ohne cycle msg, aber mit gesetztem delay.

frank!
Beiträge: 20
Registriert: 09.03.2021, 10:05
System: Alternative CCU (auf Basis OCCU)

Re: Defekte HM-Sec-RHS mit AskSin-FW wiederbeleben?

Beitrag von frank! » 05.04.2023, 11:25

das einschlafen des msp430 geschieht doch eher unregelmässig.

beim 1. mal waren es ca 7.5 std.
beim 2. mal habe ich nach 7 std den sabotagekontakt zu/auf gemacht. das hat nur weitere 1.5 std gebracht.
beim dritten mal waren es etwa 5 std.
vielleicht fehlt meinem rhs das setzen der delaytime.


ab dem booten wird mit meinem sketch grundsätzlich immer closed gesendet, obwohl es tilted sein müsste.

Code: Alles auswählen

#boot
2023.04.05 10:08:08.094 0: HMLAN_Parse: hmlan1 R:E196BD8   stat:0000 t:405B5624 d:FF r:FFCE     m:01 A210 196BD8 1ACE1F 0601000E00
2023.04.05 10:11:25.642 0: HMLAN_Parse: hmlan1 R:E196BD8   stat:0000 t:405E5B26 d:FF r:FFCF     m:02 A210 196BD8 1ACE1F 0601000E35
beim original besteht die bootsequenz immer aus 2 messages.
hier fehlt also eine trigger message mit nummer=00 und triggercounter=01.
ein wakemeup flag ist dann aber nur in der 2. message, um chaos zu vermeiden.

Code: Alles auswählen

2022.10.13 15:40:43.118 4 : CUL_Parse: cul868 A 0C 00 A441 1C1BE3 1ACE1F 0101C8
2022.10.13 15:40:43.373 4 : CUL_Parse: cul868 A 0D 01 A610 1C1BE3 1ACE1F 0601C80E
konfiguriert ist der geflashte rhs so:

Code: Alles auswählen

RHS02 type:threeStateSensor - 
list:peer	register         :value
   0:      	cyclicInfoMsg    :on
   0:      	pairCentral      :0x1ACE1F
   0:      	sabotageMsg      :on
   0:      	transmDevTryMax  :6
   1:      	eventDlyTime     :2 s
   1:      	ledOnTime        :0.5 s
   1:      	msgRhsPosA       :open
   1:      	msgRhsPosB       :tilted
   1:      	msgRhsPosC       :closed
   1:      	sign             :off
   1:      	transmitTryMax   :6

gegenüber dem original, sendet der geflashte rhs beim betätigen des sabotagekontaktes zusätzlich immer eine trigger msg.
schön wäre, wenn du diese verhindern könntest. störend ist:
1. der sich dadurch ändernde triggercounter.
2. beim senden von 2 msgs mit wakemeup flag gibt es chaos, wenn die zentrale kommunizieren will.
die zentrale reagiert dann bereits auf das erste angebot zur kommunikation und die triggermsg gretscht dann dazwischen. zusätzlich versucht das io ein weiteres wecken.

Code: Alles auswählen

2023.04.05 11:07:47.662 0: HMLAN_Parse: hmlan1 R:E196BD8   stat:0000 t:4091F843 d:FF r:FFC9     m:18 A210 196BD8 1ACE1F 0601640E36
2023.04.05 11:07:49.621 0: HMLAN_Parse: hmlan1 R:E196BD8   stat:0000 t:4091FFF4 d:FF r:FFCC     m:19 A241 196BD8 1ACE1F 010364

jp112sdl
Beiträge: 12116
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 849 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: Defekte HM-Sec-RHS mit AskSin-FW wiederbeleben?

Beitrag von jp112sdl » 05.04.2023, 21:10

Ich habe jetzt noch mal die Startup-Sequenz des SCI aufgezeichnet.
1x mit aktivierter zyklischer Meldung, ohne Event-Delay
1x mit aktivierter zyklischer Meldung, 7 Sekunden Event-Delay.
1x mit deaktivierter zyklischer Meldung, 7 Sekunden Event-Delay.

Dabei kann ich nun keine veränderte Antwort-Sequenz mehr finden.
Evtl kommt/kam es dazu nur, wenn man etwas an den Parametern zur Laufzeit ändert!?

Um hier nicht alles vollzukleistern, habe ich die Aufzeichnungen in ZIP Dateien verpackt.
startup_no_delay.zip
(169.76 KiB) 11-mal heruntergeladen
startup_7s_delay.zip
(170.01 KiB) 12-mal heruntergeladen
startup_no_cycl_7s_delay.zip
(198.2 KiB) 11-mal heruntergeladen

VG,
Jérôme ☕️

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

frank!
Beiträge: 20
Registriert: 09.03.2021, 10:05
System: Alternative CCU (auf Basis OCCU)

Re: Defekte HM-Sec-RHS mit AskSin-FW wiederbeleben?

Beitrag von frank! » 08.04.2023, 13:38

beim startup gibt es also 3 phasen mit insgesamt 5 kommunikations frames.

1. phase: initialisierung des avr
der avr bekommt 2x daten vom msp, die jeweils vom msp initiiert werden.
frame1 (config-8bit): vermutlich infos über die msp konfiguration, zb die anzahl der überwachten schalter.
frame2 (position-8bit): aktueller zustand der schalter

2. phase: initialisierung der timer des msp, beide initiiert durch den avr.
frame3 (cycle-18/8bit): initialisierung der cycletime plus antwort (cycleAck) des msp
frame4 (delay-10bit): initialisierung der delaytime
hier sind sogar 2 spikes zu sehen. die initialisierung erfolgt also in einem rutsch.

3. phase: schlafenlegen
frame5 (cycle-18/8bit): zum abschluss des startup wird der cycletimer noch mal neu gestartet.

Dabei kann ich nun keine veränderte Antwort-Sequenz mehr finden.
das ist nicht ganz richtig. es sind sogar 2 neue antworten erfolgt.
bei beiden versuchen mit aktiviertem cycle ist das cycleAck bei frame3 und frame5 immer unterschiedlich.
in frame3 bei beiden versuchen mit aktiviertem cycle "1001 0011", dezimal 147.
in frame5 bei beiden versuchen mit aktiviertem cycle "1000 0111", dezimal 135.

Code: Alles auswählen

00000000-  0 => no cycle
10010011-147 => init cycle on
10000111-135 => goto sleep with cycle after init
bisher:
10001011-139 => ?
10011111-159 => goto sleep with cycle after config delay, but no cycle change
eventuell ist auch der aktuelle status der taster im cycleAck enthalten.


2 neue variationen zum setzen der cycletime
ich bin guter hoffnung, dass mindestens eine der folgenden varianten den rhs dazu bringt, doch eine antwort zu senden.
bisher haben wir zuerst ein low auf die Data leitung geschrieben und anschliessend auf INPUT umgeschaltet.
das erzeugt einen tristate input, soweit ich das verstehe.
die 2 varianten erzeugen nun zuznächst einen input mit pullup vor der 18. fallenden flanke von Mout.
variante1 schaltet direkt nach der 18. fallenden flanke auf tristate und variante2 erst nach dem letzten bit der antwort (nach der for schleife).

zumindestens variante2 zeigt bei mir eine seltsame reaktion des msp:
anstatt (3x 64s + 5s wachzeit) abstand zwischen den zyklischen messages, erfolgen hiermit die msgs im abstand von genau (4x 64s +5s wachzeit).

Code: Alles auswählen

//variante1
      for (uint8_t i=0; i < 26; i++) {
        PORTC |= _BV(PC1);                //SET OUT    H (Aout)

        while (!(PINC & (1 << PC2)));     //WAIT WHILE L (Mout)
        PORTC &= ~_BV(PC1);               //SET OUT    L (Aout)
        if (i == 17) {
            _delay_us(100);
//            PORTC &= ~_BV(PC3);           //SET OUT    L (Data)
            DDRC=B00000010;               //SET INPUT    (Data)
        }

        while (PINC & (1 << PC2));        //WAIT WHILE H (Mout)
        if (i == 15)  PORTC |=  _BV(PC3); //SET OUT    H (Data)
        if (i == 17) {
            PORTC &= ~_BV(PC3);           //SET OUT    L (Data)
        }
        if (i < 25) _delay_us(700);
      }
      PORTC &= ~_BV(PC3);                 //SET OUT    L (Data)
      DDRC=B00000010;                     //SET INPUT    (Data)


//variante2
      for (uint8_t i=0; i < 26; i++) {
        PORTC |= _BV(PC1);                //SET OUT    H (Aout)

        while (!(PINC & (1 << PC2)));     //WAIT WHILE L (Mout)
        PORTC &= ~_BV(PC1);               //SET OUT    L (Aout)
        if (i == 17) {
            _delay_us(100);
//            PORTC &= ~_BV(PC3);           //SET OUT    L (Data)
            DDRC=B00000010;               //SET INPUT    (Data)
        }

        while (PINC & (1 << PC2));        //WAIT WHILE H (Mout)
        if (i == 15)  PORTC |=  _BV(PC3); //SET OUT    H (Data)
        if (i < 25) _delay_us(700);
      }
      PORTC &= ~_BV(PC3);                 //SET OUT    L (Data)
      DDRC=B00000010;                     //SET INPUT    (Data)
wenn das vorgehen funktioniert, könnte ein entsprechendes vorgehen beim ausschalten der zyklischen msg, eventuell sogar dort andere antworten erzeugen als nur "null" und würde weitere erkenntnisse zum dekodieren ergeben.
aber grundsätzlich benötigen wir die antwort eigentlich nicht, oder?

frohe ostern

jp112sdl
Beiträge: 12116
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 849 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: Defekte HM-Sec-RHS mit AskSin-FW wiederbeleben?

Beitrag von jp112sdl » 09.04.2023, 12:39

frank! hat geschrieben:
08.04.2023, 13:38
aber grundsätzlich benötigen wir die antwort eigentlich nicht, oder?
Wohl nicht.

Der Unterschied zwischen den MSP des SCI und RHS ist ja auch, dass das Lesen der Pin-Status beim SCI mit 8 Takten erfolgt und beim RHS mit 4 Takten.

VG,
Jérôme ☕️

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

frank!
Beiträge: 20
Registriert: 09.03.2021, 10:05
System: Alternative CCU (auf Basis OCCU)

Re: Defekte HM-Sec-RHS mit AskSin-FW wiederbeleben?

Beitrag von frank! » 13.04.2023, 10:35

hallo jerome,

ich habe mal ein paar strommessungen gemacht und led leuchten in den code eingefügt, um das einfrieren des rhs bei aktivierter cycle msg etwas zu erkunden. der hänger kann bereits nach ein paar minuten auftreten oder erst nach stunden. 21 stunden war bisher die längste zeit.

am strommesser kann ich 3 level beobachten: 1uA, 3mA und 22mA.
beim einfrieren sind immer 3mA zu sehen und die nadel des analogen multimeters flattert leicht.
dann habe ich vor den 2 verdächtigen while schleifen (init(), check()) jeweils eine led eingeschaltet und nach der while schleife wieder ausgeschaltet. die led farbe hat nun gezeigt, dass der rhs in init() hängen bleibt.

eventuell eine "falsche" interrupt erkennung?

oder fehlt mir die delaytime initialisierung?
kann eigentlich nicht sein, da beim betätigen der taster sofort reagiert wird, also delaytime=0.
wo und wie hast du das eingebaut? ...passt wahrscheinlich eh nicht mehr rein.

ich habe langsam den verdacht, dass entweder die msp firmware einen bug hat, oder hin und wieder eine spezielle kommunikation initiiert wird. eine aufzeichnung der kommunikation beim einfrieren wäre hier sicher hilfreich.

bleibt deiner denn auch hängen?
kennst du die original deviceinfos von deinem rhs?

diesen geflashten rhs habe ich bereits defekt bekommen. allerdings hat mein noch originaler rhs mit vergleichbaren deviceinfos, auch immer mal wieder so ein verhalten gezeigt, wenn ich es mir richtig überlege. da er im bad hing, war ich einfach davon ausgegangen, dass die batterien halt manchmal schlechten kontakt hatten. batterien gereinigt und schon lief er wieder. :D

original deviceinfos meiner 2 rhs
model: 0x0030
SN: JEQ...
fw: 2.0


workaround?
ich habe nun mal versucht jeweils einen "timeout" in die while schleifen einzubauen.
könnte dieser "timeout" theoretisch funktionieren, falls der msp noch "normal" funktioniert, oder fehlt da etwas entscheidendes?

Code: Alles auswählen

    void init () {
      pinMode(A1, OUTPUT); digitalWrite(A1, LOW);
      pinMode(A2, INPUT);
      pinMode(A3, INPUT);
      pinMode(A4, INPUT);

      pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LOW);    //led red off
      pinMode(LED_PIN2, OUTPUT); digitalWrite(LED_PIN2, HIGH); //led green on

      delay(2000);  // eQ-3 waits 3 seconds on the HM-SCI-3-FM

      unsigned long time = millis();
      while (!strobeA1readA3()) {
        if ((millis() - time) > 10000) {
          return;
        }
      }
      _delay_us(STROBE_DLY >> 4);
      if (digitalRead(A2) == HIGH || digitalRead(A3) == HIGH) strobeA1readA3();
      _delay_us(STROBE_DLY >> 4);
      if (digitalRead(A2) == HIGH || digitalRead(A3) == HIGH) strobeA1readA3();
      
      digitalWrite(LED_PIN2, LOW); //led green off
    }

Code: Alles auswählen

    void check() {
      canInterrupt = false;
      uint8_t newstate = sender.state;

      uint8_t posi = State::NoPos;

      uint8_t mspState = 0;

      digitalWrite(LED_PIN, HIGH); //led red on
      unsigned long time = millis();
      for (uint8_t i = 0; i < READ_COUNT; i++) {
        while (digitalRead(A2) == LOW) {
          if ((millis() - time) > 10000) {
            canInterrupt = true;
            return;
          }
        }
        if (strobeA1readA3()) bitSet(mspState, i);
      }
      digitalWrite(LED_PIN, LOW); //led red off

      delay(20);

frank!
Beiträge: 20
Registriert: 09.03.2021, 10:05
System: Alternative CCU (auf Basis OCCU)

Re: Defekte HM-Sec-RHS mit AskSin-FW wiederbeleben?

Beitrag von frank! » 13.04.2023, 18:35

neuer rekord. seit über 24 std ist der rhs nun online.
soweit ich sehe, hat er in der zeit mindestens 1x pro 5min gesendet.

ich hätte allerdings erwartet, dass beim erreichen des timeouts eine zyklische message ausbleibt.
entweder gab es noch kein timeout, oder im problemfall kommt tatsächlich eine "neue" message vom msp.
dann müsste wohl irgend ein interval 10s länger sein.

edit:
war leider nur ein wunschdenken.
nach ca 28 std war schluss.
ohne signalverlauf bleibt es stochern im nebel.

jp112sdl
Beiträge: 12116
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 849 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

Re: Defekte HM-Sec-RHS mit AskSin-FW wiederbeleben?

Beitrag von jp112sdl » 14.04.2023, 14:08

frank! hat geschrieben:
13.04.2023, 10:35
bleibt deiner denn auch hängen?
Ich hab keinen einzigen RHS im Einsatz und nur das eine Gerät zum Spielen.Das liegt momentan wieder in der Ecke.

VG,
Jérôme ☕️

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

Benutzeravatar
Wortmann30
Beiträge: 1353
Registriert: 21.03.2014, 21:39
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 7 Mal
Danksagung erhalten: 11 Mal

Re: Defekte HM-Sec-RHS mit AskSin-FW wiederbeleben?

Beitrag von Wortmann30 » 05.12.2023, 17:59

Hallo zusammen,

gibt es hier in der Zwischenzeit was neues zum Thema zyklische Statusmeldungen?
Das wäre doch sehr interessant habe inzwischen schon 4 Geräte die Probleme machen.

Danke
Grüsse


To be continued...

Antworten

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