Wetterstation HB-UNI-SEN-WEA

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

Moderator: Co-Administratoren

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: Wetterstation HB-UNI-SEN-WEA

Beitrag von jp112sdl » 15.02.2021, 06:23

rih hat geschrieben:
14.02.2021, 21:46
Das funktioniert zwar, aber nur solange temperature größer gleich Null ist. Sobald die Temperatur auf -0.1 Grad sinkt, wird statt -0.1 der positive Wert 3276.7 angezeigt.
Findet also ein Überlauf statt, denke ich.
Und das passiert hier im Wettersensor-Sketch oder in einem anderen?

Laut CCU-XML ist das ein "signed integer"
https://github.com/jp112sdl/JP-HB-Devic ... 4.xml#L296
in einer Range von -50 ... 120
https://github.com/jp112sdl/JP-HB-Devic ... 4.xml#L130
Da kann eigentlich niemals 3276.7 angezeigt werden.

Oder kommt FHEM mit dem "signed"-Bit durcheinander ?

VG,
Jérôme ☕️

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

rih
Beiträge: 123
Registriert: 09.05.2019, 23:04
System: keine Zentrale (nur Pairing, FHEM etc.)
Wohnort: Nürtingen
Hat sich bedankt: 19 Mal
Danksagung erhalten: 10 Mal

Re: Wetterstation HB-UNI-SEN-WEA

Beitrag von rih » 15.02.2021, 10:09

Und das passiert hier im Wettersensor-Sketch oder in einem anderen?
Ja, es geht um den Wettersensor-Sketch. Ich denke, es passiert im Wettersensor-Sketch. FHEM verarbeitet ja letzt endlich nur das Ergebnis der Addition, oder sehe ich das falsch? Und ohne meine Offset-Addition funktioniert ja die Anzeige von Minus-Graden.
Oder kommt FHEM mit dem "signed"-Bit durcheinander ?
Gute Frage. Wie kann ich das heraus finden? FHEM müsste aber mit dem Bit zurecht kommen, da Minus-Grade ohne meine Offset-Addition richtig angezeigt werden.
Warum die nachgeschaltete(?) xml-Datei den hohen Wert nicht herausfiltert, entzieht sich meinem laienhaften Verständnis.
Viele Grüße,
Hans

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: Wetterstation HB-UNI-SEN-WEA

Beitrag von jp112sdl » 15.02.2021, 10:25

rih hat geschrieben:
15.02.2021, 10:09
Und ohne meine Offset-Addition funktioniert ja die Anzeige von Minus-Graden.
Hmm... versuch mal

Code: Alles auswählen

temperature =  (int16_t)bme280.temperature() + (int16_t)OFFSETtemp;

VG,
Jérôme ☕️

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

rih
Beiträge: 123
Registriert: 09.05.2019, 23:04
System: keine Zentrale (nur Pairing, FHEM etc.)
Wohnort: Nürtingen
Hat sich bedankt: 19 Mal
Danksagung erhalten: 10 Mal

Re: Wetterstation HB-UNI-SEN-WEA

Beitrag von rih » 15.02.2021, 11:02

Hmm... versuch mal

Code: Alles auswählen

temperature = (int16_t)bme280.temperature() + (int16_t)OFFSETtemp;
OK, werde ich versuchen. Aber sowohl temperature als auch OFFSETtemp sind doch schon als int16-t deklariert?

Code: Alles auswählen

int16_t OFFSETtemp = 9;

Code: Alles auswählen

class WeatherChannel : public Channel<Hal, SensorList1, EmptyList, List4, PEERS_PER_CHANNEL, SensorList0>, public Alarm {
int16_t       temperature;
Komme leider erst heute Abend wieder an die Wetterstation.
Viele Grüße,
Hans

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: Wetterstation HB-UNI-SEN-WEA

Beitrag von jp112sdl » 15.02.2021, 11:35

rih hat geschrieben:
15.02.2021, 11:02
OK, werde ich versuchen. Aber sowohl temperature als auch OFFSETtemp sind doch schon als int16-t deklariert?
Bin leider auch kein Programmierer... hab nur woanders schon mal gesehen, dass es manchmal notwendig ist, direkt bei der Verwendung noch mal den Typ zu deklarieren.
Meine Vermutung: Der Compiler "optimiert" das unsigned weg, weil OFFSETtemp nur einmalig den positiven Wert "9" zugewiesen bekommt.
Alternativ könntest du auch versuchen, statt "int16_t OFFSETtemp = 9;" es so zu definieren:

Code: Alles auswählen

#define OFFSETtemp (-9 * -1)

VG,
Jérôme ☕️

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

rih
Beiträge: 123
Registriert: 09.05.2019, 23:04
System: keine Zentrale (nur Pairing, FHEM etc.)
Wohnort: Nürtingen
Hat sich bedankt: 19 Mal
Danksagung erhalten: 10 Mal

Re: Wetterstation HB-UNI-SEN-WEA

Beitrag von rih » 15.02.2021, 19:46

Hallo Jerome,
Bin leider auch kein Programmierer...
Da stellt aber jemand sein Licht schwer unter den Scheffel :D

Ich habe nun nach der Korrektur-Addition einen Debug-Print eingefügt: das Ergebnis passt an der Stelle noch! Es wird also der richtige Minus-Wert angezeigt. Egal ob mit oder ohne (int16_t). :?

Was passiert denn dann anschliessend mit "temperature" im Sketch? Oder kann es sein, dass der Datentyp von "temperature" nach der Addition nicht mehr passt und FHEM deshalb durcheinander kommt?
Viele Grüße,
Hans

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: Wetterstation HB-UNI-SEN-WEA

Beitrag von jp112sdl » 15.02.2021, 19:58

Ein Negativwert ist ja nichts anderes als ein positiver Wert mit "signed-Bit". Also von den 16 Bits bleiben 15Bit für den Wert.
Macht maximal 32767 (0 1111111 11111111) bis minimal -32767 (1 1111111 11111111).

Und irgendwas kommt in FHEM durcheinander wenn das erste Bit kippt.
Aber warum das nur ist, wenn du einen Offset hinzufügst... ich bin da auch echt planlos :roll:

Ich weiß nicht, ob das hier Einfluss hat:
https://github.com/jp112sdl/HB-UNI-Sen- ... A.ino#L118

Code: Alles auswählen

(temp >> 8) & 0x7f
Was passiert wenn du da

Code: Alles auswählen

(temp >> 8) & 0xff
draus machst?

VG,
Jérôme ☕️

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

TomMajor
Beiträge: 1790
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 175 Mal
Danksagung erhalten: 399 Mal
Kontaktdaten:

Re: Wetterstation HB-UNI-SEN-WEA

Beitrag von TomMajor » 15.02.2021, 20:02

in einem int16_t sitzt das Vorzeichen-Bit in Bit15.
Dieses Bit wird aber hier mit dem & 0x7f generell auf 0 gesetzt, also immer positiv besetzt, oder?

Code: Alles auswählen

(temp >> 8) & 0x7f, temp & 0xff
https://github.com/jp112sdl/HB-UNI-Sen- ... A.ino#L118
Viele Grüße,
Tom

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

Re: Wetterstation HB-UNI-SEN-WEA

Beitrag von jp112sdl » 15.02.2021, 20:13

TomMajor hat geschrieben:
15.02.2021, 20:02
Dieses Bit wird aber hier mit dem & 0x7f generell auf 0 gesetzt, also immer positiv besetzt, oder?
Ich hab das ursprünglich vor Jahren mal von hier:
https://github.com/pa-pa/AskSinPP/blob/ ... ther.h#L17

Und mit Homematic funktioniert das auch (aktuell bei Temperaturen bis -20°C)

VG,
Jérôme ☕️

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

rih
Beiträge: 123
Registriert: 09.05.2019, 23:04
System: keine Zentrale (nur Pairing, FHEM etc.)
Wohnort: Nürtingen
Hat sich bedankt: 19 Mal
Danksagung erhalten: 10 Mal

Re: Wetterstation HB-UNI-SEN-WEA

Beitrag von rih » 15.02.2021, 20:21

Habe den Wert 7f auf ff geändert. Bringt aber leider nichts (keine Minus-Temperatur).

Wie kann ich das Bit versuchsweise setzen? Vielleicht fehlt es an der Stelle schon, obwohl es gesetzt sein müsste.

Und wieso heißt die Variable der Stelle nun temp und nicht mehr temperature? Wo wird die umbenannt? Vielleicht passiert da irgendwo ein Fehler?
Viele Grüße,
Hans

Antworten

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