selfbus/software-arm-incubation

RM-bcu1: Summierung der RM-Werte immer Null nach Busspannungsausfall

Opened this issue · 8 comments

Wie im Forum und in #12 von clown angesprochen: die Werte wie Anzahl Alarme, Anzahl Testalarme, etc. werden auf 0 gesetzt, wenn man den Rauchmelder vom Sockel abzieht oder die Busspannung vom RM- Modul trennt.

Nach Stefan Sveriges und oldcoolmans Ausführungen würde ich das aktuell als Feature (enhancement) einstufen, welches man durchaus mit dem ARM umsetzen könnte.

Die Werte bleiben so lange erhalten wie die Busspannung anliegt, ein Trennen vom Sockel (Melder power off) hat keinen Einfluß. Busspannung weg = Werte weg !

Hi Stefan,
danke für die Info! Der entscheidende Punkt ist, dass in der Lpc Version dann irgendwann doch der Summenwert vom RM kommt und auch auf den bis gegeben wird. Das scheint nach Michaels Aussage aktuell in der ARM Version noch nicht so zu sein. Da beginnt immer alles komplett von vorne.
Ich habs aber selbst nicht analysieren können bis jetzt.

Hier habe ich etwas zu dem Fehler geschrieben und (hoffentlich) behoben:
https://selfbus.org/forum/viewtopic.php?p=4736#p4736

Bitte testen!

Olli

Wie im RocketChat besprochen sind die Werte in der Rauchmelder-MCU flüchtig: sobald der Melder von der Bodenplatte genommen wird UND keine Stützspannung vom RM-Modul mehr anliegt, werden die Werte zurückgesetzt.

Drei Use Cases sollten unterstützt werden:

  1. Wenn man das RM-Modul neu startet, z.B. nach einer Programmierung aus der ETS, wird weitergezählt.
  2. Wenn man einen Melder mal runterbaut, z.B. um zu weißeln, dann werden die Werte gespeichert und nach Wiederinbetriebnahme wird weitergezählt statt die Werte zurückzusetzen und bei 0 zu beginnen.
  3. Wenn man nach 10 Jahren den Melder tauscht und das Modul in den neuen Melder umbaut, dann werden die Werte zurückgesetzt.

Zur Implementierung dieser Erweiterung muss man sich die Seriennummer des Rauchmelders speichern und für jeden zu merkenden Zähler zwei Werte wegspeichern, ich nenne sie hier mal lastBaseValue und lastValue, dazu noch zwei weitere Werte im RAM halten, baseValue und currentValue. Die Umsetzung besteht dann aus folgenden Teilen:

  1. Nach dem Start des RM-Moduls werden nach Ablauf des Startup Delays alle Werte aus dem Melder abgerufen. Dann wird verglichen, ob die Seriennummer mit der gespeicherten Seriennummer übereinstimmt.
    1. Nein => Modul in neuen Melder umgebaut und daher baseValue = 0.
    2. Ja => Zwei Möglichkeiten: Nur das RM-Modul wurde neu gestartet (z.B. nach Programmierung aus der ETS) oder der ganze Melder wurde neu gestartet. Zur Unterscheidung dieser beiden Fälle vergleicht man die vom Melder gelieferte Betriebszeit mit der gespeicherten lastValue-Betriebszeit.
      • Gemeldet > gespeichert => Melder ist weitergelaufen, nur das RM-Modul wurde neu gestartet und daher baseValue = lastBaseValue.
      • Sonst => Melder wurde neu gestartet und daher baseValue = lastBaseValue + lastValue.
  2. Beim Schreiben der Werte in die jeweiligen Gruppenobjekte wird nicht nur der vom Melder gelieferte currentValue geschrieben, sondern baseValue + currentValue.
  3. Bei Busspannungsabfall: wegspeichern von baseValue und currentValue als lastBaseValue und lastValue.

Solange wir keine Busspannungserkennung in der Lib haben, könnte man Punkt 3 alternativ implementieren, indem man die Werte wegschreibt wenn der Melder von der Bodenplatte genommen wurde.

  1. Beim Brownout: wegspeichern...

Ins eeprom speichern dauert 104-110ms. Die Brown-Out-Detection kommt dafür zu spät. Da kommt man um Busspannungserkennung nicht drumrum.

Werte wegschreibt wenn der Melder von der Bodenplatte genommen wurde.

Geht leider so nicht, der Bodenplattenkontakt ist nach erstmaliger Betätigung ein ODER für Batteriespannung vorhanden oder 12V Betriebsspannung vorhanden. Löst also nicht mehr aus, wenn die Busspannung vorhanden ist und man den Rauchmelder von der Bodenplatte abnimmt.

Danke für das Feedback, habe ich in den obigen Kommentar eingearbeitet.