jp112sdl / Beispiel_AskSinPP

88 stars 36 forks source link

Threshold Regelung beim HM-Sen-LI-O #36

Closed der-pw closed 4 years ago

der-pw commented 4 years ago

Falls mal ganz, ganz viel Zeit über ist, würde ich mich beim HM-Sen-LI-O über eine Implementierung des Threshold, zur Verringerung des Sendezyklus, freuen. Ich scheitere arg. Prinzipiell wüsste ich was nötig wäre, aber ich habe null Plan, das asksintauglich umzusetzen.

Grüße, Patrick

jp112sdl commented 4 years ago

Bitte mal den HM-Sen-LI-O Sketch aus dem dev_HM-Sen-LI-O_txThreshold Branch testen. Hab grad keine Hardware zum Testen.

Unsicher bin ich mir bei der Berechnung der prozentualen Änderungen zwischen altem und neuem Lux-Wert: https://github.com/jp112sdl/Beispiel_AskSinPP/blob/abfb98fdc5e7fdb595c83e59e164254818dd7d5c/examples/HM-Sen-LI-O/HM-Sen-LI-O.ino#L158

P.S.: Vorher die AskSinPP Lib auf den neuesten Master updaten. Hab da noch was anpassen müssen.

der-pw commented 4 years ago

Du bist ja wieder flott unterwegs!

Es scheint als würde "txThresholdPercent" nicht geändert werden. Bleibt bei 0

Habe die Ser.-Printausgabe mal vor die Bedingung geholt:

      bool sendMsg = true;
      uint8_t txThresholdPercent = this->getList1().txThresholdPercent();
      DPRINT(F("thresholdPcnt pcnt: "));DDECLN(txThresholdPercent);
      if (txThresholdPercent > 0) {  // a threshold is configured
        uint8_t pcnt = (lux > 0) ? min(abs(100L / (lux_prev / lux) - 100), 100) : 0;
        DPRINT(F("thresholdPcnt pcnt: "));DDECLN(txThresholdPercent);
        DPRINT(F("lux changed   pcnt: "));DDECLN(pcnt);
        if (pcnt >= txThresholdPercent) { // the calculated percentage between lux_prev and lux is greater or equal to the configured txThresholdPercent
          lux_prev = lux;                 // save the current lux in lux_prev
        } else {
          sendMsg = false;                // otherwise do not send messager
        }
      }

Weil sie sonst nicht ausgegeben wurde.

AskSin++ V4.1.1 (Dec 22 2019 13:49:21)
MAX44009 Sensor OK
Address Space: 32 - 77
CC init1
CC Version: 14
 - ready
iVcc: 3332
TX Delay = 8
Measure... 864 lux
thresholdPcnt pcnt: 0
<- 0F 01 84 53 34FD01 000000 00 C1 00 01 51 80  - 1337
<- 0E 02 A2 10 34FD01 6A5EFF 06 01 00 00 00  - 1437
-> 0A 02 80 02 6A5EFF 34FD01 00  - 1562
waitAck: 01
TX Delay = 8
Measure... 864 lux
thresholdPcnt pcnt: 0
<- 0F 03 84 53 34FD01 000000 00 C1 00 01 51 80  - 2093

nachdem ich das Register vorkonfiguriert (txThresholdPercent(10);) habe und nach einem Reset erfolgt das:


AskSin++ V4.1.1 (Dec 22 2019 13:59:41)
MAX44009 Sensor OK
Address Space: 32 - 77
CC init1
CC Version: 14
 - ready
iVcc: 3332
TX Delay = 8
Measure... 864 lux
thresholdPcnt pcnt: 1
thresholdPcnt pcnt: 1
lux changed   pcnt: 100
<- 0F 01 84 53 34FD01 000000 00 C1 00 01 51 80  - 1339
<- 0E 02 86 10 34FD01 000000 06 01 00 00 00  - 1435
TX Delay = 8
Measure... 835 lux
thresholdPcnt pcnt: 1
thresholdPcnt pcnt: 1
lux changed   pcnt: 0
TX Delay = 8
Measure... 864 lux
thresholdPcnt pcnt: 1
thresholdPcnt pcnt: 1
lux changed   pcnt: 0
´´´