Bodenfeuchtesensor HB-UNI-Sen-CAP-MOIST(-T)
Moderator: Co-Administratoren
-
- Beiträge: 12085
- Registriert: 20.11.2016, 20:01
- Hat sich bedankt: 847 Mal
- Danksagung erhalten: 2139 Mal
- Kontaktdaten:
Re: Bodenfeuchtesensor HB-UNI-Sen-CAP-MOIST(-T)
Könntest mal hier noch jeweils Debug für die 3 berechneten Werte ausgeben lassen:
https://github.com/jp112sdl/HB-UNI-Sen- ... #L269-L271
Irgendwo scheint da was nicht zu passen
https://github.com/jp112sdl/HB-UNI-Sen- ... #L269-L271
Irgendwo scheint da was nicht zu passen
Re: Bodenfeuchtesensor HB-UNI-Sen-CAP-MOIST(-T)
Oha, jetzt geht es gleich ans eingemachte! So bewandert bin ich in der Arduino Programmierung nämlich nicht. Mal sehen, ob ich da noch mitkomme!
Der markierte Bereich stellt den Part da, in dem die Berechnung für den Humidity Wert angestellt werden. Den habe ich in Excel mal nachgebaut, um zu sehen, was eigentlich herauskommen müsste.
Zum experimentieren habe ich einen Sensor auf dem Steckbrett nachgebaut und den "Problemfühler" angeschlossen. Die Werte für highValue und lowValue sind im Sketch auf 900, bzw. 300 gesetzt. Da ich den Sensor jetzt nicht unbedingt an der Zentrale anlernen will, möchte ich die high und low Werte im Sketch anpassen und neu flashen. Das funktioniert schon mal nicht wie gewünscht! 300 und 900 bleiben, wie sie sind.
Auch ist mir nicht ganz klar, was du mit "Debug für die 3 berechneten Werte ausgeben" meinst. Da müsstest du mir noch ein wenig auf die Sprünge helfen.
Gruß
edition
Der markierte Bereich stellt den Part da, in dem die Berechnung für den Humidity Wert angestellt werden. Den habe ich in Excel mal nachgebaut, um zu sehen, was eigentlich herauskommen müsste.
Zum experimentieren habe ich einen Sensor auf dem Steckbrett nachgebaut und den "Problemfühler" angeschlossen. Die Werte für highValue und lowValue sind im Sketch auf 900, bzw. 300 gesetzt. Da ich den Sensor jetzt nicht unbedingt an der Zentrale anlernen will, möchte ich die high und low Werte im Sketch anpassen und neu flashen. Das funktioniert schon mal nicht wie gewünscht! 300 und 900 bleiben, wie sie sind.
Auch ist mir nicht ganz klar, was du mit "Debug für die 3 berechneten Werte ausgeben" meinst. Da müsstest du mir noch ein wenig auf die Sprünge helfen.
Gruß
edition
-
- Beiträge: 12085
- Registriert: 20.11.2016, 20:01
- Hat sich bedankt: 847 Mal
- Danksagung erhalten: 2139 Mal
- Kontaktdaten:
Re: Bodenfeuchtesensor HB-UNI-Sen-CAP-MOIST(-T)
Wo genau hast du das angepasst?edition hat geschrieben: ↑07.06.2021, 09:32Die Werte für highValue und lowValue sind im Sketch auf 900, bzw. 300 gesetzt. Da ich den Sensor jetzt nicht unbedingt an der Zentrale anlernen will, möchte ich die high und low Werte im Sketch anpassen und neu flashen. Das funktioniert schon mal nicht wie gewünscht! 300 und 900 bleiben, wie sie sind.
Code: Alles auswählen
uint16_t range = upper_limit - lower_limit;
DPRINT("range=");DDECLN(range);
uint16_t base = sens_val - lower_limit;
DPRINT("base=");DDECLN(base);
uint8_t pct_inv = (base * 100) / range;
DPRINT("pct_inv =");DDECLN(pct_inv);
- stan23
- Beiträge: 2030
- Registriert: 13.12.2016, 21:14
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Altmühltal
- Hat sich bedankt: 576 Mal
- Danksagung erhalten: 335 Mal
- Kontaktdaten:
Re: Bodenfeuchtesensor HB-UNI-Sen-CAP-MOIST(-T)
Du kannst die 4 Zeilen z.B. so umbauen:
Code: Alles auswählen
uint16_t range = upper_limit - lower_limit;
uint16_t base = sens_val - lower_limit;
uint8_t pct_inv = (base * 100) / range;
humidity[s] = 100 - pct_inv;
DPRINT("lower limit: ");DDEC(lower_limit);
DPRINT(", upper limit: ");DDEC(upper_limit);
DPRINT(", range: ");DDEC(range);
DPRINT(", base: ");DDEC(base);
DPRINT(", pcv_inv");DDEC(pct_inv);
DPRINT(", humidity: ");DDECLN(humidity[s]);
Viele Grüße
Marco
RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)
Marco
RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)
Re: Bodenfeuchtesensor HB-UNI-Sen-CAP-MOIST(-T)
Im original Sketch ist das ab Zeile 157
Code: Alles auswählen
void defaults () {
clear();
HIGHValue(300);
LOWValue(100);
Nach dem flashen seigt die Konsole:
Code: Alles auswählen
15:59:12.762 -> AskSin++ V4.1.7 (Jun 7 2021 15:58:48)
15:59:12.762 -> Address Space: 32 - 102
15:59:12.762 -> CC init1
15:59:12.762 -> CC Version: 14
15:59:12.762 -> - ready
15:59:13.081 -> iVcc: 3587
15:59:13.081 -> eVcc: 5770
15:59:13.081 -> ID: F31104 Serial: JPCAPM0004
15:59:13.081 -> *LOW BAT Limit: 41
15:59:13.081 -> *Sendeintervall: 5
15:59:13.081 -> Config changed List1 (CH 1)
15:59:13.081 -> Config changed List1 (CH 2)
15:59:13.081 -> *HIGHValue : 900
15:59:13.081 -> *LOWValue : 300
15:59:19.612 -> +Analog (#1): 300range=600
15:59:19.612 -> base=0
15:59:19.612 -> pct_inv =0
15:59:19.647 ->
-
- Beiträge: 12085
- Registriert: 20.11.2016, 20:01
- Hat sich bedankt: 847 Mal
- Danksagung erhalten: 2139 Mal
- Kontaktdaten:
Re: Bodenfeuchtesensor HB-UNI-Sen-CAP-MOIST(-T)
Das sind die Default-Werte, die nach dem RESET auf Werkseinstellung ins EEPROM geschrieben werden.
Re: Bodenfeuchtesensor HB-UNI-Sen-CAP-MOIST(-T)
So, Umbau fertig. Hier die Ausgabe aus der Konsole:
Auch hier sind die lowValue und highValue Werte unverändert, obwohl im Sketch 300 und 100 hinterlegt ist!
Der Fühler steckt gerade im Wasser und meldet Analog 336 entspricht 91%. Ich lege ihn trocken und messe erneut:
Jetzt wird 959 gemessen. 3 unter highValue. Laut meiner Excel Tabelle müsste jetzt eigentlich 0,433... also 0 oder 1 rauskommen, jenachdem, wie gerundet wird.
Code: Alles auswählen
16:41:24.496 -> AskSin++ V4.1.7 (Jun 7 2021 16:40:55)
16:41:24.496 -> Address Space: 32 - 134
16:41:24.496 -> CC init1
16:41:24.496 -> CC Version: 04
16:41:24.543 -> - ready
16:41:24.798 -> iVcc: 3303
16:41:24.798 -> eVcc: 5239
16:41:24.844 -> DS18B20 Sensor OK
16:41:24.844 -> ID: F31200 Serial: JPCAPM0000
16:41:24.844 -> *LOW BAT Limit: 40
16:41:24.844 -> *Sendeintervall: 20
16:41:24.844 -> Config changed List1 (CH 1)
16:41:24.844 -> *Offset : -5
16:41:24.844 -> Config changed List1 (CH 2)
16:41:24.844 -> *HIGHValue : 810
16:41:24.844 -> *LOWValue : 336
16:41:24.844 -> Config changed List1 (CH 3)
16:41:24.844 -> *HIGHValue : 962
16:41:24.844 -> *LOWValue : 270
16:41:31.236 -> +Analog (#1): 796range=474
16:41:31.236 -> base=460
16:41:31.236 -> pct_inv =97
16:41:31.236 ->
16:41:31.336 -> +Analog (#2): 336range=692
16:41:31.336 -> base=66
16:41:31.336 -> pct_inv =9
16:41:31.336 ->
16:41:31.987 -> +Temp C : 240
16:41:31.987 -> +Battery V : 52
16:41:31.987 -> +Humidity (#1) %: 3
16:41:31.987 -> +Humidity (#2) %: 91
16:41:32.040 -> <- 12 01 A2 53 F31200 000FFF 00 41 00 F0 34 42 03 43 5B - 1759
16:41:32.141 -> -> 0A 01 80 02 000FFF F31200 00 - 1904
16:41:32.188 -> waitAck: 01
Der Fühler steckt gerade im Wasser und meldet Analog 336 entspricht 91%. Ich lege ihn trocken und messe erneut:
Code: Alles auswählen
16:51:57.113 -> AskSin++ V4.1.7 (Jun 7 2021 16:40:55)
16:51:57.113 -> Address Space: 32 - 134
16:51:57.113 -> CC init1
16:51:57.113 -> CC Version: 04
16:51:57.160 -> - ready
16:51:57.415 -> iVcc: 3342
16:51:57.415 -> eVcc: 5246
16:51:57.461 -> DS18B20 Sensor OK
16:51:57.461 -> ID: F31200 Serial: JPCAPM0000
16:51:57.461 -> *LOW BAT Limit: 40
16:51:57.461 -> *Sendeintervall: 20
16:51:57.461 -> Config changed List1 (CH 1)
16:51:57.461 -> *Offset : -5
16:51:57.461 -> Config changed List1 (CH 2)
16:51:57.461 -> *HIGHValue : 810
16:51:57.461 -> *LOWValue : 336
16:51:57.461 -> Config changed List1 (CH 3)
16:51:57.461 -> *HIGHValue : 962
16:51:57.461 -> *LOWValue : 270
16:52:03.874 -> +Analog (#1): 810range=474
16:52:03.874 -> base=474
16:52:03.874 -> pct_inv =100
16:52:03.874 ->
16:52:03.974 -> +Analog (#2): 959range=692
16:52:03.974 -> base=689
16:52:03.974 -> pct_inv =4
16:52:03.974 ->
16:52:04.578 -> +Temp C : 241
16:52:04.625 -> +Battery V : 52
16:52:04.625 -> +Humidity (#1) %: 0
16:52:04.625 -> +Humidity (#2) %: 96
16:52:04.625 -> <- 12 01 A2 53 F31200 000FFF 00 41 00 F1 34 42 00 43 60 - 1759
16:52:04.880 -> -> 0A 01 80 02 000FFF F31200 00 - 1974
16:52:04.880 -> waitAck: 01
- stan23
- Beiträge: 2030
- Registriert: 13.12.2016, 21:14
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Altmühltal
- Hat sich bedankt: 576 Mal
- Danksagung erhalten: 335 Mal
- Kontaktdaten:
Re: Bodenfeuchtesensor HB-UNI-Sen-CAP-MOIST(-T)
Bei der Integerrechnung wird nicht gerundet sondern abgeschnitten.
Aber trotzdem stimmen die Werte für den zweiten Sensor nicht.
Der Grund ist, dass (base * 100 = 68900) über die 16 Bit läuft und dann eben falsche Werte rauskommen.
Ändere doch mal die Zeilejp112sdl hat geschrieben: ↑07.06.2021, 14:01Code: Alles auswählen
uint8_t pct_inv = (base * 100) / range;
Code: Alles auswählen
uint16_t base = sens_val - lower_limit;
Code: Alles auswählen
uint32_t base = sens_val - lower_limit;
Viele Grüße
Marco
RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)
Marco
RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)
Re: Bodenfeuchtesensor HB-UNI-Sen-CAP-MOIST(-T)
Bingo! Das war es wohl tatsächlich.
Ich habe noch ein paar Gegenproben gemacht: Messfühler ins Wasser = 94%, Messfühler in den nicht mehr ganz so feuchten Blumentopf = 88%, Messfühler in den trockenen Blumentopf = 1%, Messfühler wieder auf den Tisch gelegt = 1%, Messfühler in den frisch gegossenen Blumentopf = 97%.
Das sind alles plausieble Werte. Damit kann ich arbeiten. Jetzt kann der Sensor in den Garten und ich bekomme endlich die Blumentöpfe vom Schreibtisch!
Vielen Dank für die Unterstützung!
Gruß
edition
Code: Alles auswählen
12:40:34.765 -> AskSin++ V4.1.7 (Jun 8 2021 12:40:08)
12:40:34.765 -> Address Space: 32 - 134
12:40:34.765 -> CC init1
12:40:34.765 -> CC Version: 04
12:40:34.765 -> - ready
12:40:35.020 -> iVcc: 3283
12:40:35.020 -> eVcc: 5244
12:40:35.120 -> DS18B20 Sensor OK
12:40:35.120 -> ID: F31200 Serial: JPCAPM0000
12:40:35.120 -> *LOW BAT Limit: 40
12:40:35.120 -> *Sendeintervall: 20
12:40:35.120 -> Config changed List1 (CH 1)
12:40:35.120 -> *Offset : -5
12:40:35.120 -> Config changed List1 (CH 2)
12:40:35.120 -> *HIGHValue : 810
12:40:35.120 -> *LOWValue : 336
12:40:35.120 -> Config changed List1 (CH 3)
12:40:35.120 -> *HIGHValue : 962
12:40:35.120 -> *LOWValue : 270
12:40:41.504 -> +Analog (#1): 809range=474
12:40:41.504 -> base=473
12:40:41.504 -> pct_inv =99
12:40:41.504 ->
12:40:41.605 -> +Analog (#2): 959range=692
12:40:41.605 -> base=689
12:40:41.605 -> pct_inv =99
12:40:41.605 ->
12:40:42.208 -> +Temp C : 238
12:40:42.261 -> +Battery V : 52
12:40:42.261 -> +Humidity (#1) %: 1
12:40:42.261 -> +Humidity (#2) %: 1
12:40:42.261 -> <- 12 01 A2 53 F31200 000FFF 00 41 00 EE 34 42 01 43 01 - 1759
12:40:42.409 -> -> 0A 01 80 02 000FFF F31200 00 - 1904
12:40:42.409 -> waitAck: 01
Das sind alles plausieble Werte. Damit kann ich arbeiten. Jetzt kann der Sensor in den Garten und ich bekomme endlich die Blumentöpfe vom Schreibtisch!
Vielen Dank für die Unterstützung!
Gruß
edition
- stan23
- Beiträge: 2030
- Registriert: 13.12.2016, 21:14
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Altmühltal
- Hat sich bedankt: 576 Mal
- Danksagung erhalten: 335 Mal
- Kontaktdaten:
Re: Bodenfeuchtesensor HB-UNI-Sen-CAP-MOIST(-T)
Prima!
Pull request ist gestellt.
Pull request ist gestellt.
Viele Grüße
Marco
RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)
Marco
RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)