Hallo,
wir haben den Ventus W174 eingearbeitet. Dieser wird nun erkannt und ausgewertet.
Zusätzlich haben wir einen "Patch" vorgenommen in einer Abfrage für die ABS700 Erkennung. --> Forum (https://github.com/mhop/fhem-mirror/pull/27/commits/17d7063eb137a6d2169d222441bf8db0181292cd)
Da ich die Änderung hier zum ersten mal teile bzw. nutze im FHEM Development Bereich, so habe ich sicherhaltshalber parallel einen sichtbaren Commit bei Github erstellt.
Github --> Ventus W174 | ABS700 Patch (https://github.com/mhop/fhem-mirror/pull/27/commits/ea96e365a0fc34626bfa564246e3afd45cf81197)
Anpassungen in 14_CUL_TCM97001.pm
# All suported models
#
my %models = (
"TCM97..." => 'TCM97...',
"ABS700" => 'ABS700',
"TCM21...." => 'TCM21....',
"Prologue" => 'Prologue',
"Rubicson" => 'Rubicson',
"NC_WS" => 'NC_WS',
"GT_WT_02" => 'GT_WT_02',
"AURIOL" => 'AURIOL',
"PFR_130" => 'PFR_130',
"Type1" => 'Type1',
"Mebus" => 'Mebus',
"Eurochron" => 'Eurochron',
"KW9010" => 'KW9010',
"Unknown" => 'Unknown',
"W174" => 'W174',
);
sub
CUL_TCM97001_Initialize($)
{
my ($hash) = @_;
$hash->{Match} = "^s.....";
$hash->{DefFn} = "CUL_TCM97001_Define";
$hash->{UndefFn} = "CUL_TCM97001_Undef";
$hash->{ParseFn} = "CUL_TCM97001_Parse";
$hash->{AttrList} = "IODev do_not_notify:1,0 ignore:0,1 showtime:1,0 " .
"$readingFnAttributes " .
"model:".join(",", sort keys %models);
$hash->{AutoCreate}=
{
"CUL_TCM97001_Unknown.*" => { GPLOT => "", FILTER => "%NAME", autocreateThreshold => "2:10" },
"CUL_TCM97001.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", GPLOT => "temp4hum4:Temp/Hum,", FILTER => "%NAME", autocreateThreshold => "2:180"},
"Prologue_.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", GPLOT => "temp4hum4:Temp/Hum,", FILTER => "%NAME", autocreateThreshold => "2:180"},
"Mebus_.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", GPLOT => "temp4hum4:Temp/Hum,", FILTER => "%NAME", autocreateThreshold => "2:180"},
"NC_WS.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", GPLOT => "temp4hum4:Temp/Hum,", FILTER => "%NAME", autocreateThreshold => "2:180"},
"ABS700.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", GPLOT => "temp4hum4:Temp/Hum,", FILTER => "%NAME", autocreateThreshold => "2:180"},
"Eurochron.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", GPLOT => "temp4hum4:Temp/Hum,", FILTER => "%NAME", autocreateThreshold => "2:180"},
"TCM21....*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", GPLOT => "temp4hum4:Temp/Hum,", FILTER => "%NAME", autocreateThreshold => "2:180"},
"TCM97..._.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", GPLOT => "temp4hum4:Temp/Hum,", FILTER => "%NAME", autocreateThreshold => "2:180"},
"GT_WT_02.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", GPLOT => "temp4hum4:Temp/Hum,", FILTER => "%NAME", autocreateThreshold => "2:180"},
"Type1.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", GPLOT => "temp4hum4:Temp/Hum,", FILTER => "%NAME", autocreateThreshold => "2:180"},
"Rubicson.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", GPLOT => "temp4hum4:Temp/Hum,", FILTER => "%NAME", autocreateThreshold => "2:180"},
"AURIOL.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", GPLOT => "temp4hum4:Temp/Hum,", FILTER => "%NAME", autocreateThreshold => "2:180"},
"PFR_130.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", GPLOT => "temp4hum4:Temp/Hum,", FILTER => "%NAME", autocreateThreshold => "2:180"},
"KW9010.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", GPLOT => "temp4hum4:Temp/Hum,", FILTER => "%NAME", autocreateThreshold => "2:180"},
"TCM97001.*" => { ATTR => "event-on-change-reading:.*", GPLOT => "temp4hum4:Temp/Hum,", FILTER => "%NAME", autocreateThreshold => "2:340"},
"W174.*" => { ATTR => "event-min-interval:.*:300 event-on-change-reading:.*", GPLOT => "rain4:Rain,", FILTER => "%NAME", autocreateThreshold => "2:180"},
"Unknown_.*" => { autocreateThreshold => "2:10"}
};
}
#####################################
sub
CUL_TCM97001_Undef($$)
{
my ($hash, $name) = @_;
delete($modules{CUL_TCM97001}{defptr}{$hash->{CODE}})
if(defined($hash->{CODE}) &&
defined($modules{CUL_TCM97001}{defptr}{$hash->{CODE}}));
return undef;
}
### inserted by elektron-bbs/HomeAuto_User for rain gauge Ventus W174
# Checksum for Rain Gauge VENTUS W174 Protocol Auriol
# n8 = ( 0x7 + n0 + n1 + n2 + n3 + n4 + n5 + n6 + n7 ) & 0xf
sub checksum_W174 {
my $msg = shift;
Log3 "CUL_TCM97001: ", 4 , "CUL_TCM97001: W174 checksum calc for: $msg";
my @a = split("", $msg);
my $bitReverse = undef;
my $x = undef;
foreach $x (@a) {
my $bin3=sprintf("%04b",hex($x));
$bitReverse = $bitReverse . reverse($bin3);
}
my $hexReverse = unpack("H*", pack ("B*", $bitReverse));
my @aReverse = split("", $hexReverse); # Split reversed a again
my $CRC = (7 + hex($aReverse[0])+hex($aReverse[1])+hex($aReverse[2])+hex($aReverse[3])+hex($aReverse[4])+hex($aReverse[5])+hex($aReverse[6])+hex($aReverse[7])) & 15;
if ($CRC == hex($aReverse[8])) {
Log3 "CUL_TCM97001: ", 4 , "CUL_TCM97001: W174 checksum ok $CRC == ".hex($aReverse[8]);
return TRUE;
} else {
#Log3 "CUL_TCM97001: ", 3 , "CUL_TCM97001: W174 ERROR - checksum $CRC != ".hex($aReverse[8]);
return FALSE;
}
}
#
# CRC Check for TCM 21....
#
$def = $modules{CUL_TCM97001}{defptr}{$deviceCode};
if($def) {
$name = $def->{NAME};
}
if(!$def) {
Log3 $name, 2, "CUL_TCM97001 Unknown device $deviceCode, please define it";
return "UNDEFINED $model" . substr($deviceCode, rindex($deviceCode,"_")) . " CUL_TCM97001 $deviceCode";
}
if (defined($humidity)) {
if ($humidity >= 20) {
$hashumidity = TRUE;
}
}
$hasbatcheck = TRUE;
$haschannel = TRUE;
$packageOK = TRUE;
$hasmode = TRUE;
$readedModel=$model;
} else {
$name = "Unknown";
}
}
### inserted by elektron-bbs/HomeAuto_User for rain gauge Ventus W174
if (checksum_W174($msg) == TRUE && ($readedModel eq "Unknown" || $readedModel eq "W174")) {
# VENTUS W174 Rain gauge
# Documentation also at http://www.tfd.hu/tfdhu/files/wsprotocol/auriol_protocol_v20.pdf
# * Format for Rain
# * AAAAAAAA vXXB CCCC DDDD DDDD DDDD DDDD EEEE FFFF FFFF
# * RC Type Rain Checksum
# * A = Rolling Code /Device ID
# * B = Message type (xyyx = NON temp/humidity data if yy = '11')
# * v = 0: Sensor's battery voltage is normal, 1: Battery voltage is below ~2.6 V.
# * XX = 11: Non temperature/humidity data. All other type data packets have this value in this field.
# * C = fixed to 1100 for rain gauge
# * D = Rain (bitvalue * 0.25 mm)
# * E = Checksum
# * F = 0000 0000 (W174!!!)
my @a = split("", $msg);
my $bitReverse = undef;
my $bitUnreverse = undef;
my $x = undef;
my $bin3;
foreach $x (@a) {
$bin3=sprintf("%024b",hex($x));
$bitReverse = $bitReverse . substr(reverse($bin3),0,4);
$bitUnreverse = $bitUnreverse . sprintf( "%b", hex( substr($bin3,0,4) ) );
}
my $hexReverse = unpack("H*", pack ("B*", $bitReverse));
my @aReverse = split("", $hexReverse); # Split reversed a again
Log3 $hash,4, "CUL_TCM97001: W174 original-msg: $msg , reversed nibbles: $hexReverse";
Log3 $hash,4, "CUL_TCM97001: W174 nibble 2: $aReverse[2] , nibble 3: $aReverse[3]";
# Nibble 2 must be x110 for rain gauge
# Nibble 3 must be 0x03 for rain gauge
#if ((hex($aReverse[2]) & 0b0110) == 6 && $aReverse[3] == 3) {
if ((hex($aReverse[2]) >> 1) == 3 && $aReverse[3] == 0x03) {
Log3 $hash,4, "CUL_TCM97001: W174 detected rain gauge message ok";
$batbit = $aReverse[2] & 0b0001; # Bat bit normal=0, low=1
Log3 $hash,4, "CUL_TCM97001: W174 battery bit: $batbit";
$batbit = ~$batbit & 0x1; # Bat bit negation
$hasbatcheck = TRUE;
my $rainticks = hex($aReverse[4]) + hex($aReverse[5]) * 16 + hex($aReverse[6]) * 256 + hex($aReverse[7]) * 4096;
Log3 $hash,4, "CUL_TCM97001: W174 rain gauge swing count: $rainticks";
$rain = ($rainticks + ($rainticks & 1)) / 4; # 1 tick = 0,5 l/qm
Log3 $hash,4, "CUL_TCM97001: W174 rain total: $rain l/qm";
$hasrain = TRUE;
$model="W174";
$def = $modules{CUL_TCM97001}{defptr}{$deviceCode};
if($def) {
$name = $def->{NAME};
}
if(!$def) {
Log3 $name, 2, "CUL_TCM97001 Unknown device $deviceCode, please define it";
return "UNDEFINED $model" . substr($deviceCode, rindex($deviceCode,"_")) . " CUL_TCM97001 $deviceCode";
}
$readedModel=$model;
$packageOK = TRUE;
}
}
if (checkCRC($msg) == TRUE && ($readedModel eq "Unknown" || $readedModel eq "TCM21....")) {
if ($packageOK == TRUE) {
# save lastT, calc rainMM sum for day and hour
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
my $lastDay=$mday;
my $lastHour=$hour;
my $rainSumDay=0;
my $rainSumHour=0;
if($def) {
$def->{lastT} = $now;
}
readingsBeginUpdate($def);
my ($val, $valH, $state);
if (defined($temp)) {
$msgtype = "temperature";
$val = sprintf("%2.1f", ($temp) );
$state="T: $val";
# if ($hashumidity == TRUE) {
#zusätzlich Daten für Wetterstation
if ($hasrain == TRUE) {
### inserted by elektron-bbs/HomeAuto_User
my $rain_old = ReadingsVal($name, "rain", "unknown");
if ($rain != $rain_old) {
readingsBulkUpdate($def, "israining", "yes");
} else {
readingsBulkUpdate($def, "israining", "no");
}
readingsBulkUpdate($def, "rain", $rain );
$state = "R: $rain";
$hasrain = FALSE;
}
Bitte diese Änderung einarbeiten Björn und freigeben für das nächste Update.
MfG
@HomeAuto_User:
Bitte Patches im zugehörigen Forenbereich laut fhem.de/MAINTAINER.txt (Hinweis für Entwickler (https://forum.fhem.de/index.php/topic,18962.0.html) und https://wiki.fhem.de/wiki/How_to_write_a_patch) posten. Habe den Thread deshalb verschoben.
Der Github-Link führt zu einem privaten Read-Only Repo. Es soll ein Mirror von svn.fhem.de/fhem/trunk sein, was ich nicht kontrolliert habe. Das (einzige) offizielle Repo von FHEM ist über https://svn.fhem.de/ erreichbar.
Gruß, Christian
Hallo,
da ich mich erstmal in SVN hereinfuchsen musste, so folgt heute die Patch-Datei.
Ich hoffe das nimmt nun seinen richtigen Lauf ;-)
MfG
Hallo,
ich habe das Modul gepatcht und es wird auch sofort ein neues Gerät angelegt. Dafür schon mal Danke. Nun aber mein Problem:
Ich bekomme fleißig alle 90 Sekunden Werte rein, allerdings sobal ich die Wippe manuel einmal bewege, kommt danach nie wieder ein Wert. An meinen nanoCUL Einstellungen kann es doch nicht liegen, oder?
Was kann ich da noch ausprobieren? Jemand eine Idee?
Gruß
Thorsten
Hallo,
mein W174 verhält sich auch wie deiner, Thorsten, einmal die Wippe betätigen und alles friert ein.
Mit Verbose=5 für den W174 finde ich im Logfile folgende Fehlermeldung:
2018.04.16 19:30:45 4: nanoCUL433: CUL_TCM97001 W174_208 208 (D06C3000E030) length: 12 RSSI: -50
2018.04.16 19:30:45 4: nanoCUL433: CUL_TCM97001 Parse Name: W174_208 , devicecode: CUL_TCM97001_208 , Model defined: W174
2018.04.16 19:30:45 4: nanoCUL433: CUL_TCM97001 W174_208 old rain 0, age 1, new rain 3, diff rain 3.0
2018.04.16 19:30:45 4: nanoCUL433: CUL_TCM97001 W174_208 max difference rain 1.1 l
2018.04.16 19:30:45 3: nanoCUL433: CUL_TCM97001 W174_208 ERROR - Rain diff too large (old 0, new 3, diff 3.0)
2018.04.16 19:30:45 4: nanoCUL433: CUL_TCM97001 W174_208 208 (D06C3000E02F) length: 12 RSSI: -50.5
2018.04.16 19:30:45 4: nanoCUL433: CUL_TCM97001 Parse Name: W174_208 , devicecode: CUL_TCM97001_208 , Model defined: W174
2018.04.16 19:30:45 4: nanoCUL433: CUL_TCM97001 W174_208 old rain 0, age 0, new rain 3, diff rain 3.0
2018.04.16 19:30:45 4: nanoCUL433: CUL_TCM97001 W174_208 max difference rain 1.1 l
2018.04.16 19:30:45 3: nanoCUL433: CUL_TCM97001 W174_208 ERROR - Rain diff too large (old 0, new 3, diff 3.0)
Wo kann ich denn die max difference höher setzten, oder was ist falsch?
Hallo,
ich habe die 14_CUL_TCM97001.pm geändert.
Zuerst habe ich aber das
attr global exclude_from_update 14_CUL_TCM97001.pm
für das device global gesetzt.
In der 14_CUL_TCM97001.pm habe ich nach
$maxDiffRain = sprintf("%.1f", $maxDiffRain + 0.05);
gesucht und in
$maxDiffRain = sprintf("%.1f", $maxDiffRain + 10.05);
geändert.
Nach dem ich in der Kommandozeile ein
update
durchgeführt habe, läuft man W174 wieder.
Gruß Thomas
Hallo,
ich habe nun auch den W174 im Einsatz. Fhem hat ihn schnell erkannt und eingefügt.
Nun habe ich von Hand etwas Wasser in den Sensor gekippt und scheinbar etwas durcheinander gebracht.
2019.06.07 22:16:11 4: nanoCUL: CUL_TCM97001 Rainsensor 145 (916C84002007) length: 12 RSSI: -70.5
2019.06.07 22:16:11 4: nanoCUL: CUL_TCM97001 Parse Name: Rainsensor , devicecode: CUL_TCM97001_145 , Model defined: W174
2019.06.07 22:16:11 4: nanoCUL: CUL_TCM97001 Rainsensor old rain 0.5, age 0, new rain 8.25, diff rain 7.8
2019.06.07 22:16:11 4: nanoCUL: CUL_TCM97001 Rainsensor max difference rain 1.1 l
2019.06.07 22:16:11 3: nanoCUL: CUL_TCM97001 Rainsensor ERROR - Rain diff too large (old 0.5, new 8.25, diff 7.8)
Muss ich nun den Sensor wieder zurücksetzen? Oder kann ich das anders bewerkstelligen?
Vielen Dank
Update: Ich habe es mit einem setreading Rainsensor rain 8.0 wieder gerade gebogen. Nur schade, dass ich den Fehler gar nicht gesehen hätte.
Das Modul hat noch einige ,,Macken". Es wäre schön, wenn eingereichte Patches eingespielt werden oder man eine Einigung findet, anderen Usern diese ,,Fehlverhalten" zu korrigieren. Vorschlag meinerseits, das man vielleicht mit Zustimmung des Maintainer einen 2. Verantwortlichen bestimmt um nicht gegen die Regeln zu verstoßen.
Gesendet von iPhone mit Tapatalk Pro
Hier sollten wir was tun. Nach der Regenmenge heute hier in Berlin hat der Sensor versagt :-( Da kam einiges runter.
Die maxDiffRain sollte per Attribut konfigurierbar gemacht werden.
Ist hier sonst noch was offen?
Gruß Ralf
Wenn nichts dagegen spricht, werde ich es so einbauen:
$hash->{AttrList} = ...
"max-diff-rain:0,1,2,3,4,5,6,7,8,9,10,15,20,25,30,35,40,45,50 ".
my $maxDiffRain = AttrVal($name, "max-diff-rain", 0);
if ($maxDiffRain) {
$maxDiffRain += $timeSinceLastUpdate / 60; # 1.0 Liter/Minute + maxDiffRain
$maxDiffRain = sprintf("%.1f", $maxDiffRain + 0.05); # round 0.1
Log3 $hash, 4, "$iodev: CUL_TCM97001 $name max difference rain $maxDiffRain l";
if ($diffRain > $maxDiffRain) {
Log3 $hash, 3, "$iodev: CUL_TCM97001 $name ERROR - Rain diff too large (old $oldRain, new $rain, diff $diffRain)";
return "";
}
}
Die maxDiffRain Abfrage ist dann per Default nicht aktiv, da sie wegen der Checksumme eigentlich nicht notwendig sein sollte.
Gruß Ralf
Hallo zusammen,
kann mir jemand sagen wieviel mm bzw L/qm der Wert "Rain" angibt?
Ich habe den Sensor W174 erfolgreich eingebunden, nach ein paar händischen Kippungen zeigt der Wert R: 3.5 an.
Update: ist das vielleicht schon l/m?
Danke :)
Hallo zusammen,
ich hoffe es fühlt sich hier noch jemand zuständig ;)
Ich habe den W174 über ein halbes Jahr in Betrieb und er funktioniert soweit gut. Im Plot kann ich auch schön alles ablesen usw..
Nun wollte ich Daten aus dem Device in einem DOIF für die Bewässerung nutzen und musste feststellen, dass die implementierten Stunden/Tagesmenge- Berechnungen scheinbar nicht funktioniert. Muss hier noch etwas eingestellt werden?
Hier mal ein List des Devices:
Internals:
.lastTimeisraining 1592139408.1423
.lastTimerain 1592139371.38304
.lastTimestate 1592139371.38304
CODE CUL_TCM97001_226
CUL433_MSGCNT 2759
CUL433_RAWMSG sE26CBA60C0F5; 480: 9040
CUL433_TIME 2020-06-14 15:06:39
DEF CUL_TCM97001_226
FUUID 5daf4564-f33f-0fc8-34af-5a9fc606218483f3
LASTInputDev CUL433
MSGCNT 2759
NAME Regenmesser
NR 248
RSSI -79.5
STATE R: 407.25
TYPE CUL_TCM97001
lastH 0
lastT 1592139999
.attraggr:
.attreocr:
.*
.attrminint:
.*:1800
READINGS:
2019-10-22 20:08:09 battery ok
2019-10-22 20:08:09 batteryState ok
2020-06-14 15:06:39 israining no
2020-06-14 15:06:39 rain 407.25
2020-02-02 16:06:26 rain_calc_all cH: 0.6 lH: 0.2 cD: 1.3 lD: 127.5 IR: yes Rnow: 1.1 Rdif: 0.600000000000023
2020-02-02 16:06:26 rain_calc_d_curr 1.3
2020-02-02 13:20:33 rain_calc_d_last 127.5
2020-02-02 13:20:33 rain_calc_d_start 127.5
2020-02-02 13:20:33 rain_calc_d_trig_tsecs 1580711400
2020-02-02 16:06:26 rain_calc_h_curr 0.6
2020-02-02 15:33:08 rain_calc_h_last 0.2
2020-02-02 15:33:08 rain_calc_h_start 128.2
2020-02-02 15:33:08 rain_calc_h_trig_tsecs 1580657400
2020-02-02 16:06:26 rain_calc_now_diff 0.600000000000023
2020-02-02 16:06:26 rain_calc_now_rate 1.1
2020-02-02 16:06:26 rain_calc_now_value 128.8
2020-02-02 16:06:26 rain_calc_tsecs 1580655986
2019-11-08 23:55:34 statRain Hour: 0 Day: 0 Month: 0 Year: 0 (since: 2019-11-08_23:55:34 )
2020-06-14 15:06:39 state R: 407.25
Attributes:
event-min-interval .*:1800
event-on-change-reading .*
model W174
room Garten,Wetter
Gruß
Ich würde mich der Frage von kabanett anschließen.