14_Hideki.pm: Windrichtung passt nicht

Begonnen von Ralf9, 11 März 2022, 22:32:30

Vorheriges Thema - Nächstes Thema

Ralf9

Bei dem Hideki Windmesser von @brezel passt anscheinend die Windrichtung nicht
http://www.dobraschuetz-wetter.de/images/Windsensor/Wind.jpg
ZitatBei meinem Hideki Windsensor ist die Windrichtung West mit East vertausch, Nord und South passt, also die Gradzahl gegen den Uhrzeiger! Es gibt im Hideki Modul ein Attributes "windDirCorr" welches, egal was man da angibt, keine Wirkung zeigt, da im Modul nach meinen Verständnis kein Code vorhanden ist.

Zitat
Kontrolliert bzw. verglichen habe ich es mit der Station, dort ist auch eine Windrose und die Gradangabe.

http://www.wetter-kahla.de/assets/images/cresta-815-lm-gro-1-600x430.png

Die Stationsanzeige und FHEM sind in der freier Wildbahn nicht immer synchron, dazu dreht sich der Wind bei mir zwischen den Häusern zu schnell, Nord und Süd stimmen so ziemlich immer überein, dazwischen gibt es immer mal wieder Abweichungen um +-22,5 Grad. Ich vermute das es mit unterschiedliche Pakete zu tun hat was die Station bzw. der SignalESP aufschnappt. Wie gesagt stimmt jetzt ganz grob W<>E was vor mein Hack ($winddir = 16 - $winddir;) gespiegelt war.

Zitat
Der Windmesser ist nicht falsch montiert sonnst würde das Solar Panel zum Boden zeigen  ;) und Nord und Süd passen und sind nicht vertauscht,

Hallo Martin,

wenn Nord und Süd passen, aber Ost und West vertauscht sind, dann passt Dein Hack nicht ganz. Mit "$winddir = 16 - $winddir;" wird auch Nord und Süd vertauscht.

Ist der Windmesser einigermassen gut zugänglich? Dann kannst Du mal, wenn kein Wind bläst, den Windmesser ungefähr auf die vier Positionen (laut der Anzeige der Station) Nord, Ost, Süd und West drehen und vom sduino das jeweilige reading "windDirection" und nach möglichkeit auch die DMSG (P12#75...) posten

Edit, es sollten auch 2 Postionen reichen

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

brezel

#1
Hallo Ralf,

habe den Windsensor abgeschraubt und mich damit so pensioniert das ich meine Wetterstation und den Bildschirm in Sichtweite habe. Ich habe 3 Durchgänge mit Nord, Ost, Süd und West gemacht, immer so lange gewartet bis in der Wetterstation die simulierte Windrichtung angezeigt wurde, bis dorthin habe ich fleißig am Windrad gedreht.  ;) Den event-min-interval im Device habe ich auf 11 Sekunden eingestellt.

Windfahne mit der Spitze nach Norden und zeigt von der Haupteinheit weg und die Flosse zeigt im Süden also zur Haupteinheit.

Das Display der Wetterstation zeigt N und 0 Grad

windDirection 0
signalESP_DMSG
P12#7585B24487BF87BFFD0000008E1801
P12#7585B24470BF70BF02000000717101
P12#7585B2841FBE1FBEE070FEFC216101

Windfahne mit der Spitze nach Osten und die Flosse zeigt nach Westen

Das Display der Wetterstation zeigt E  und 90 Grad

windDirection 10
signalESP_DMSG
P12#7585B2C471BF71BFFDF0029C605C03
P12#7585B284FFBEFFBE0F000260DE7901
P12#7585B2841CBE1CBE1F30FC9CFC3E01

Windfahne mit der Spitze zeigt im Süden also zur Haupteinheit und die Flosse nach Norden und zeigt von der Haupteinheit weg.

Das Display der Wetterstation zeigt S und 180 GRAD
windDirection 12
signalESP_DMSG
P12#7585B244FDBEFDBEF000FE403D6C01
P12#7585B244F8BEF8BE0FE00140DD2D01
P12#7585B2C418BE18BE1EE0FD40B05803

Windfahne mit der Spitze nach Westen und die Flosse zeigt nach Osten

Das Display der Wetterstation zeigt W und 270 GRAD

windDirection 6
signalESP_DMSG
P12#7585B2840EBE0EBEF1F002DC6C1D01
P12#7585B284F3BEF3BEF2D0FC204D3601
P12#7585B2C40DBE0DBE0DE0FC20C20003

Alles mit original 14_Hideki.pm ohne Hack und einem SignalESP 8266 V 3.5.0-dev+20210808 SIGNALESP cc1101 (chip CC1101) - compiled at Aug 7 2021 22:44:01

Grüße
Martin

Ralf9

#2
Hallo Martin,

irgendwas passt da nicht.

Winddir in Grad sollte sein: Winddir * 22.5

Die Zuorndnung winddir zu den Windrichtungen sollte sein:
"N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"
0    1     2    3    4    5     6    7    8    9    10   11   12    13   14   15



Bei Deinem Windmesser ist:

Station  -  sduino Winddir
N 0   - 0
E 90  - 10
S 180 - 12
W 270 - 6

Das ist total durcheinander, da ist für mich kein System erkennbar.
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

Ralf9

Ich hab mal bei E, S und W die ist-winddir mit der soll-winddir verglichen:
station: sduino winddir
E 90 : ist 10 1010  soll 4  0100
S 180: ist 12 1100  soll 8  1000
W 270: ist 6  0110  soll 12 1100

dabei ist mir aufgefallen, daß es bei den 3 Windrichtungen passt, wenn ich die Bits der Winddir um 1 Stelle verschiebe
station: sduino windir
E 90 : ist 10 1 0100  soll 4  0100
S 180: ist 12 1 1000  soll 8  1000
W 270: ist 6  0 1100  soll 12 1100


Bitte ändere mal in der sub wind dies:
#$winddir = ($Hidekibytes[11] >> 4);
$winddir = ($Hidekibytes[11] >> 3) & 0x0f;

und teste mal ob es auch bei den zwischen Windrichtungen mit den halben Grad (z.B. ENE, ESE, SSW) was eine ungerade winddir ergeben muss, passt 

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

brezel

noch ein paar windir von heute Mittag


station: sduino winddir
315 : 3
337 : 1
135 : 15
157 : 13
67   : 11
45   : 9


ich ändere mal jetzt die sub win und mache morgen weitere versuche  ;)

Grüße Martin

Ralf9

#5
mit diesen weiteren Werten passt es nicht mehr
NW  315:  3 0011  soll 14  1110
NNW 337:  1 0001  soll 15  1111
SE  135: 15 1111  soll  6  0110
SEE 157: 13 1101  soll  7  0111
ENE  67: 11 1011  soll  3  0011
NE   45:  9 1001  soll  2  0010

Ich kann nun kein System mehr dahiner erkennen, wahrscheinlich bleibt nichts anderes übrig als eine Umsetztabelle zu machen
  0  22.5  45   67.5  90  112.5 135  157.5 180 202.5 225  247.5 270 292.5 315  337.5
"N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"
0    1     2    3    4    5     6    7    8    9    10   11   12    13   14   15   soll
0          9   11   10         15   13   12                    6          3    1   ist


Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

elektron-bbs

In der hideki.c von https://github.com/merbanan/rtl_433/blob/master/src/devices/hideki.c finde ich auch so eine ähnliche Zuordnung:

        if (sensortype == HIDEKI_WIND) {
            int const wd[] = { 0, 15, 13, 14, 9, 10, 12, 11, 1, 2, 4, 3, 8, 7, 5, 6 };
            int wind_direction = wd[((packet[10] & 0xF0) >> 4)] * 225;
Intel(R) Atom(TM) CPU N270 mit 2 SIGNALduino nanoCC1101 + ESPEasy 2x serial server SIGNALduino nanoCC1101, Raspberry Pi 2 mit 2 CUL Stackable CC1101, Raspberry Pi 3 mit SIGNALduino radino + nano328 + 2 x SIGNAL-ESP CC1101 + 2 x rf_Gateway

brezel

habe jetzt alle winddir erfasst, das passt jetzt aber nicht mit der gefunden hideki.c Quelle überein.  :o Da ich jedes mindestens winddir zwei mal überprüft habe bin ich davon überzeugt das sie richtig sind.  8)


  0  22.5  45   67.5  90  112.5 135  157.5 180 202.5 225  247.5 270 292.5 315  337.5
"N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"
0    1     2    3    4    5     6    7    8    9    10   11   12    13   14   15   soll
0    8     9   11   10   14    15   13   12    4     5    7    6     2    3    1   ist


Den original Windmesser von meiner Cresta WXR815LM habe ich vor Jahren mal ersetzt müssen und der neue stammt von einer Funk-Wetterstation DV928 die seinerzeit der Conrad verkauft hat. Schon verwunderlich das dieser Umstand mit den falschen Windrichtungen sonnst niemand aufgefallen ist, dass es nur bei mir so sein soll kann ich mir kaum vorstellen.  ;)

Grüße
Martin

Ralf9

#8
Demnach gibts bei den Windrichtungen mindestens 2 verschiedene Zuordnungen.
Ich hab beim rtl_433 folgendes gefunden:
https://github.com/sanrab/Raspberry3B-433-Mhz-HIDEKI-sensors
wireless (433 MHz) HIDEKI sensor TS805 for wind and temperature

https://github.com/merbanan/rtl_433/issues/371
TE827NL

https://github.com/merbanan/rtl_433/pull/384
Conrad TE831x

Da sind in der 14_Hideki.pm einige Änderungen und Erweiterungen notwendig, ich hab schon mal damit angefangen (ungetestet)
https://github.com/RFD-FHEM/RFFHEM/issues/1087

Demnach benötigen wir bei der winddir 2 Zuordnungstabellen. Es wird dafür ein neues Attribut "model" benötigt:
  $hash->{AttrList}  = "do_not_notify:0,1 showtime:0,1"
                       ." ignore:0,1"
                       ." windDirCorr windSpeedCorr"
                       ." model:wind_DV928,wind_TS805_TE827NL_TE831x"
                       ." $readingFnAttributes";


Hier ist die angepasste sub wind. Der Aufruf der sub wind muß hinter "my $hash = $def; $name = $hash->{NAME};" verschoben werden, da der $name vom device erst dort bekannt ist

sub wind {
my $name = shift;
my @Hidekibytes = @{$_[0]};
my @wd_DV928=(0, 8, 9, 11, 10, 14, 15, 13, 12, 4, 5, 7, 6, 2, 3, 1);
my @wd_TS805=(0, 15, 13, 14, 9, 10, 12, 11, 1, 2, 4, 3, 8, 7, 5, 6);
my @winddir_name=("N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW");
my $windspeed;
my $windchill;
my $windgust;
my $winddir;
my $winddirdeg;
my $winddirtext;
my $model;

$windchill = 100 * ($Hidekibytes[7] & 0x0f) + 10 * ($Hidekibytes[6] >> 4) + ($Hidekibytes[6] & 0x0f);
## windchill is negative?
if (!($Hidekibytes[7] & 0x80)) {
$windchill = -$windchill;
}
$windchill = $windchill / 10;
$windspeed = ($Hidekibytes[9] & 0x0f ) * 100 + ($Hidekibytes[8] >> 4) * 10 + ($Hidekibytes[8] & 0x0f);
$windgust = ($Hidekibytes[10] >> 4) * 100 + ($Hidekibytes[10] & 0x0f) * 10 + ($Hidekibytes[9] >> 4);
my $windSpeedCorr = AttrVal($name,"windSpeedCorr",0); ### -> hierher verschoben
if ($windSpeedCorr > 0) {
$windspeed = sprintf("%.2f", $windspeed * $windSpeedCorr);
$windgust  = sprintf("%.2f", $windgust * $windSpeedCorr);
Log3 $name, 4, "$name Hideki_Parse: WindSpeedCorr=$windSpeedCorr, WindSpeed=$windspeed, WindGust=$windgust";
}

$winddir = ($Hidekibytes[11] >> 4);
$model = AttrVal($name,"model",""); ### -> neu
if ($model eq 'wind_DV928') {
$winddir = $wd_DV928[$winddir];
}
elsif ($model eq 'wind_TS805_TE827NL_TE831x') {
$winddir = $wd_TS805[$winddir];
}
my $windDirCorr = AttrVal($name,"windDirCorr",0); ### -> neu
if ($windDirCorr > 0) {
$winddir += $windDirCorr
$winddir &= 15;
}
$winddirtext = $winddir_name[$winddir];
$winddirdeg = $winddir * 22.5;
 
return ($windchill,$windspeed,$windgust,$winddir,$winddirdeg,$winddirtext);
}

FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

brezel

Hallo Ralf,

leider läuft der Code noch nicht fehlerfrei, ein Fehler habe ich finden können, da hat ein Semikolon gefehlt


my $windDirCorr = AttrVal($name,"windDirCorr",0); ### -> neu
if ($windDirCorr > 0) {
$winddir += $windDirCorr; ### <- Semikolon!
$winddir &= 15;
}


Jetzt rebootet das FHEM sobald etwas vom Windsensor empfangen wird, im Log finde ich noch folgenden Eintrag


Can't use an undefined value as an ARRAY reference at ./FHEM/14_Hideki.pm line 404


das wäre dann diese Stelle


my @Hidekibytes = @{$_[0]};


hier ist mein Latein am Ende

Grüße
Martin

Ralf9

Der Code ist so noch nicht lauffähig, beim aufruf der sub wind muss noch einiges angepasst werden.

Zum Testen reicht es, wenn Du diese beiden Zeilen in die orginal sub wind einfügst:
my @wd_DV928=(0, 8, 9, 11, 10, 14, 15, 13, 12, 4, 5, 7, 6, 2, 3, 1);
$winddir = $wd_DV928[$winddir];
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

Ralf9

Zitat von: brezel am 13 März 2022, 13:58:52
habe jetzt alle winddir erfasst, das passt jetzt aber nicht mit der gefunden hideki.c Quelle überein.  :o Da ich jedes mindestens winddir zwei mal überprüft habe bin ich davon überzeugt das sie richtig sind.  8)


  0  22.5  45   67.5  90  112.5 135  157.5 180 202.5 225  247.5 270 292.5 315  337.5
"N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"
0    1     2    3    4    5     6    7    8    9    10   11   12    13   14   15   soll
0    8     9   11   10   14    15   13   12    4     5    7    6     2    3    1   ist  -> dies ist die Position im Array

Ich hatte da einen Denkfehler, dies ist das gleiche wie in der gefunden hideki.c Quelle.
Wenn man Deine ermittelte Zuordnung in ein array schreibt kommt das gleiche heraus.

my @wd=(0, 15, 13, 14, 9, 10, 12, 11, 1, 2, 4, 3, 8, 7, 5, 6);

Es ist deshalb auch kein neues Attribut für das Windmesser Model notwendig.
Das Attribut "windDirCorr" funktioniert nun auch.

https://github.com/RFD-FHEM/RFFHEM/blob/Hideki_wrong_winddir/FHEM/14_Hideki.pm
https://github.com/RFD-FHEM/RFFHEM/commit/6f7f3df58821ebd5595b5712472c596348cfb6af

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

brezel

Hallo Ralf,

bin noch nicht dazugekommen alle 16 Windir's auszuprobieren,  ;) aber auf den ersten Blick sieht es soweit gut aus.  :) Wenn sich die Windrichtung nicht alle paar Sekunden ändert,  :o stimmt die Anzeige der Station mit der im Device überein.  8) Das die Anzeige der Station nicht immer mit dem Device synchron ist, liegt wohl jetzt eher an der schnell  ??? geänderten Windrichtung, den unterschiedlichen Empfangsintervalle und dadurch die unterschiedlichen Pakete die Empfangen wurden.  :-\

Grüße
Martin

Ralf9

Zitatbin noch nicht dazugekommen alle 16 Windir's auszuprobieren,
dies sollte nicht notwendig sein, es reichen ein paar Stichproben durch Vergleich mit dem Display.

Die Windrichtungen E, S und W habe ich schon mit diesen dmsg und einen dummysduino getestet:
Zitat von: brezel am 12 März 2022, 15:31:00
Das Display der Wetterstation zeigt E  und 90 Grad

windDirection 10
signalESP_DMSG
P12#7585B2C471BF71BFFDF0029C605C03
P12#7585B284FFBEFFBE0F000260DE7901
P12#7585B2841CBE1CBE1F30FC9CFC3E01

Windfahne mit der Spitze zeigt im Süden also zur Haupteinheit und die Flosse nach Norden und zeigt von der Haupteinheit weg.

Das Display der Wetterstation zeigt S und 180 GRAD
windDirection 12
signalESP_DMSG
P12#7585B244FDBEFDBEF000FE403D6C01
P12#7585B244F8BEF8BE0FE00140DD2D01
P12#7585B2C418BE18BE1EE0FD40B05803

Windfahne mit der Spitze nach Westen und die Flosse zeigt nach Osten

Das Display der Wetterstation zeigt W und 270 GRAD

windDirection 6
signalESP_DMSG
P12#7585B2840EBE0EBEF1F002DC6C1D01
P12#7585B284F3BEF3BEF2D0FC204D3601
P12#7585B2C40DBE0DBE0DE0FC20C20003


Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

brezel

Bin leider jetzt erst wieder dazugekommen, also die Windrichtungen passen jetzt soweit, Danke!

Grüße
Martin