2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-12 16:46:35 +00:00
git-svn-id: https://svn.fhem.de/fhem/trunk@184 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
tdressler 2008-05-11 21:17:30 +00:00
parent b09f8b9a78
commit 683bda8d2f
2 changed files with 34 additions and 21 deletions

View File

@ -205,7 +205,7 @@ FHZ_Define($$)
{
my ($hash, $def) = @_;
my @a = split("[ \t][ \t]*", $def);
my $po;
$hash->{STATE} = "Initialized";
delete $hash->{PortObj};
@ -225,11 +225,11 @@ FHZ_Define($$)
Log 3, "FHZ opening FHZ device $dev";
if ($^O=~/Win/) {
eval ("use Win32::SerialPort;");
my $po = new Win32::SerialPort ($dev);
require Win32::SerialPort;
$po = new Win32::SerialPort ($dev);
}else{
eval ("use Device::SerialPort;");
my $po = new Device::SerialPort ($dev);
require Device::SerialPort;
$po = new Device::SerialPort ($dev);
}
return "Can't open $dev: $!\n" if(!$po);
Log 3, "FHZ opened FHZ device $dev";

View File

@ -4,7 +4,7 @@ package main;
# Modul for FHEM
#
# contributed by thomas dressler 2008
# $Id: 87_WS2000.pm,v 1.2 2008-05-11 17:34:07 tdressler Exp $
# $Id: 87_WS2000.pm,v 1.3 2008-05-11 21:17:30 tdressler Exp $
###########################
use strict;
use Switch;
@ -303,14 +303,18 @@ sub
WS2000_Parse($$) {
my ($hash,$msg) = @_;
my ($stx,$typ,$w1,$w2,$w3,$w4,$w5,$etx)=map {$_ & 0x7F} unpack("U*",$msg);
my ($sensor,$daten1,$einheit1,$daten2,$einheit2,$daten3,$einheit3,$result,$shortname,$val, $unit);
my $group = ($typ & 0x70)/16 ;#/slash for komodo syntax checker!
my $snr = $typ % 16;
my $tm=TimeNow();
my $name=$hash->{NAME};
my $factor=$attr{$name}{rain}||366;
my $altitude=$attr{$name}{altitude}||0;
if ($etx != 3) {
Log 4, "$name:Frame Error!";
return undef;
}
my ($sensor,$daten1,$einheit1,$daten2,$einheit2,$daten3,$einheit3,$result,$shortname,$val, $unit);
my $group = ($typ & 0x70)/16 ;#/slash for komodo syntax checker!
my $snr = $typ % 16;
#duplicate check (repeater?)
my $prevmsg=$hash->{READINGS}{RAW}{VAL}||'';
@ -319,7 +323,7 @@ WS2000_Parse($$) {
Log 4,"$name check: Duplicate detected";
return undef;
}
my $rawtext="Typ=$typ,W1=$w1,W2=$w2,W3=$w3,W4=$w4,W5=$w5";
my $rawtext="Typ:$typ,W1:$w1,W2:$w2,W3:$w3,W4:$w4,W5:$w5";
Log 4, "$name parsing: $rawtext";
#break into sensor specs
@ -345,7 +349,7 @@ WS2000_Parse($$) {
}
$shortname='TX'.$snr;
$einheit1 = " C";
$result = $shortname . " => T=" . $daten1 . $einheit1;
$result = $shortname . " => T:" . $daten1 . $einheit1;
}
case 1 {
@ -366,7 +370,7 @@ WS2000_Parse($$) {
$daten3 = 0;
$einheit2 = " %";
$result = $shortname . " => T=" . $daten1 . $einheit1 . ", H=" . $daten2 .$einheit2;
$result = $shortname . " => T:" . $daten1 . $einheit1 . ", H:" . $daten2 .$einheit2;
}
@ -388,8 +392,10 @@ WS2000_Parse($$) {
}
my $diff=$daten1-$prev;
$daten2= $diff * $factor/1000;
$einheit2 = " l/m²";
$result = $shortname . " => M=".$daten2. $einheit2."(". $diff . $einheit1 ." x Faktor $factor), C=$daten1, P=$prev" ;
$einheit2 = " l/m2";
$result = $shortname
. " => M:".$daten2. $einheit2."(". $diff . $einheit1 ." x Faktor $factor)"
. ", C:$daten1, P:$prev" ;
}
case 3 {
@ -414,7 +420,7 @@ WS2000_Parse($$) {
my @wr=("N","NNO","NO","ONO","O","OSO","SO","SSO","S","SSW","SW","WSW","W","WNW","NW","NNW");
my @bf=(0,0.7,5.4,11.9,19.4,38.7,49.8,61.7,74.6,88.9,102.4,117.4);
my @bfn=("Windstille","leiser Zug","leichte Brise","schwache Brise","maessige Brise","frische Brise",
"starker Wind","steifer Wind","stürmischer Wind","Sturm","schweer Sturm","orkanartiger Sturm","Orkan");
"starker Wind","steifer Wind","stuermischer Wind","Sturm","schwerer Sturm","orkanartiger Sturm","Orkan");
my $i=1;
foreach (1..$#bf) {
if ($daten1<$bf[$i]) {
@ -426,7 +432,11 @@ WS2000_Parse($$) {
#windrichtung
my $w=int($daten2/22.5+0.5);
if ($w ==16) {$w=0;}
$result = $shortname . " => S=" . $daten1 . $einheit1 . ", B=$i($bfn[$i]),D=" . $daten2 . $einheit2 . "($wr[$w]) $einheit3 $daten3";
$result = $shortname
. " => S:" . $daten1 . $einheit1
. ", BF:$i($bfn[$i])"
. " ,R:" . $daten2 . $einheit2
. "($wr[$w])".$einheit3. $daten3;
}
case 4 {
@ -447,7 +457,10 @@ WS2000_Parse($$) {
$einheit1 = " C";
$einheit2 = " %";
$einheit3 = " hPa";
$result = $shortname . " => T=" . $daten1 . $einheit1 . ", H=" . $daten2 . $einheit2 . ", D=" . $daten3 . $einheit3;
$result = $shortname
. " => T:" . $daten1 . $einheit1
. ", H:" . $daten2 . $einheit2
. ", D:" . $daten3 . $einheit3;
}
case 5 {
@ -462,7 +475,7 @@ WS2000_Parse($$) {
}
$daten1 = $daten1 * ($w1 * 128 + $w2);
$einheit1 = "Lux";
$result = $shortname . " => L=" . $daten1 . $einheit1;
$result = $shortname . " => L:" . $daten1 . $einheit1;
}
case 6 {
@ -477,8 +490,8 @@ WS2000_Parse($$) {
case 3 {$daten1 = 1000;}
}
$daten1 = $daten1 * ($w1 * 128 + $w2);
$einheit1 = " W/m²";
$result = $shortname . " => P=" . $daten1 . $einheit1;
$einheit1 = " W/m2";
$result = $shortname . " => P:" . $daten1 . $einheit1;
}
else {