50_HP1000: correct default unit for windSpeed/windGust and use UConv.pm

git-svn-id: https://svn.fhem.de/fhem/trunk@12400 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
loredo
2016-10-22 13:22:15 +00:00
parent d64260ae24
commit 8146f18e22
3 changed files with 172 additions and 277 deletions

View File

@@ -1,5 +1,7 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- bugfix: 50_HP1000: correct default unit for windSpeed/windGust from m/s to
km/h and transfer unit conversions to new UConv.pm
- feature: Pushsafer: new option "picture", "picture2" and "picture3" for - feature: Pushsafer: new option "picture", "picture2" and "picture3" for
"message" set command to send pictures from local "message" set command to send pictures from local
filesystem or a IPCAM device. See commandref for details filesystem or a IPCAM device. See commandref for details

View File

@@ -30,10 +30,11 @@ use strict;
use warnings; use warnings;
use vars qw(%data); use vars qw(%data);
use HttpUtils; use HttpUtils;
use UConv;
use Time::Local; use Time::Local;
use Data::Dumper;
use List::Util qw(sum); use List::Util qw(sum);
use FHEM::98_dewpoint; use FHEM::98_dewpoint;
use Data::Dumper;
sub HP1000_Define($$); sub HP1000_Define($$);
sub HP1000_Undefine($$); sub HP1000_Undefine($$);
@@ -70,7 +71,7 @@ sub HP1000_Initialize($) {
$hash->{UndefFn} = "HP1000_Undefine"; $hash->{UndefFn} = "HP1000_Undefine";
$hash->{DbLog_splitFn} = "HP1000_DbLog_split"; $hash->{DbLog_splitFn} = "HP1000_DbLog_split";
$hash->{AttrList} = $hash->{AttrList} =
"wu_push:1,0 wu_id wu_password wu_realtime:1,0 extSrvPush_Url " "wu_push:1,0 wu_id wu_password wu_realtime:1,0 wu_apikey extSrvPush_Url "
. $readingFnAttributes; . $readingFnAttributes;
} }
@@ -87,9 +88,42 @@ sub HP1000_Define($$) {
$hash->{ID} = $a[2] if ( defined( $a[2] ) ); $hash->{ID} = $a[2] if ( defined( $a[2] ) );
$hash->{PASSWORD} = $a[3] if ( defined( $a[3] ) ); $hash->{PASSWORD} = $a[3] if ( defined( $a[3] ) );
return "Device already defined: " . $modules{HP1000}{defptr}{NAME} return
"Device already defined: "
. $modules{HP1000}{defptr}{NAME}
. " (there can only be one instance as per restriction of the weather station itself)"
if ( defined( $modules{HP1000}{defptr} ) && !defined( $hash->{OLDDEF} ) ); if ( defined( $modules{HP1000}{defptr} ) && !defined( $hash->{OLDDEF} ) );
# check FHEMWEB instance
my $FWports;
foreach ( devspec2array('TYPE=FHEMWEB:FILTER=TEMPORARY!=1') ) {
$hash->{FW} = $_
if ( AttrVal( $_, "webname", "fhem" ) eq "weatherstation" );
push( @{$FWports}, $defs{$_}->{PORT} )
if ( defined( $defs{$_}->{PORT} ) );
}
if ( !defined( $hash->{FW} ) ) {
$hash->{FW} = "WEBweatherstation";
my $port = 8084;
until ( !grep ( /^$port$/, @{$FWports} ) ) {
$port++;
}
if ( !defined( $defs{ $hash->{FW} } ) ) {
Log3 $name, 3,
"HP1000 $name: Creating new FHEMWEB instance "
. $hash->{FW}
. " with webname 'weatherstation'";
fhem "define " . $hash->{FW} . " FHEMWEB $port global";
fhem "attr " . $hash->{FW} . " webname weatherstation";
}
}
$hash->{FW_PORT} = $defs{ $hash->{FW} }{PORT};
if ( HP1000_addExtension( $name, "HP1000_CGI", "updateweatherstation" ) ) { if ( HP1000_addExtension( $name, "HP1000_CGI", "updateweatherstation" ) ) {
$hash->{fhem}{infix} = "updateweatherstation"; $hash->{fhem}{infix} = "updateweatherstation";
} }
@@ -184,6 +218,9 @@ sub HP1000_CGI() {
$webArgs->{$p} = $v; $webArgs->{$p} = $v;
} }
Log3 $name, 5,
"HP1000: received insufficient data:\n" . Dumper($webArgs);
return ( "text/plain; charset=utf-8", "Insufficient data" ) return ( "text/plain; charset=utf-8", "Insufficient data" )
if ( !defined( $webArgs->{softwaretype} ) if ( !defined( $webArgs->{softwaretype} )
|| !defined( $webArgs->{dateutc} ) || !defined( $webArgs->{dateutc} )
@@ -224,8 +261,17 @@ sub HP1000_CGI() {
} }
Log3 $name, 5, "HP1000: received data:\n" . Dumper($webArgs); Log3 $name, 5, "HP1000: received data:\n" . Dumper($webArgs);
delete $webArgs->{ID} if ( defined( $webArgs->{ID} ) );
delete $webArgs->{PASSWORD} if ( defined( $webArgs->{PASSWORD} ) ); # rename wind speed values as those are in m/sec and
# we want km/h to be our metric default
if ( defined( $webArgs->{windspeed} ) ) {
$webArgs->{windspeedmps} = $webArgs->{windspeed};
delete $webArgs->{windspeed};
}
if ( defined( $webArgs->{windgust} ) ) {
$webArgs->{windgustmps} = $webArgs->{windgust};
delete $webArgs->{windgust};
}
# calculate readings for Metric standard from Angloamerican standard # calculate readings for Metric standard from Angloamerican standard
# #
@@ -252,7 +298,8 @@ sub HP1000_CGI() {
&& $webArgs->{dewptf} ne "" && $webArgs->{dewptf} ne ""
&& !defined( $webArgs->{dewpoint} ) ) && !defined( $webArgs->{dewpoint} ) )
{ {
$webArgs->{dewpoint} = HP1000_f2c( $webArgs->{dewptf} ); $webArgs->{dewpoint} =
UConv::f2c( $webArgs->{dewptf} );
} }
# relbaro in hPa (convert from baromin) # relbaro in hPa (convert from baromin)
@@ -260,7 +307,7 @@ sub HP1000_CGI() {
&& $webArgs->{baromin} ne "" && $webArgs->{baromin} ne ""
&& !defined( $webArgs->{relbaro} ) ) && !defined( $webArgs->{relbaro} ) )
{ {
$webArgs->{relbaro} = HP1000_inhg2hpa( $webArgs->{baromin} ); $webArgs->{relbaro} = UConv::inhg2hpa( $webArgs->{baromin} );
} }
# absbaro in hPa (convert from absbaromin) # absbaro in hPa (convert from absbaromin)
@@ -268,7 +315,8 @@ sub HP1000_CGI() {
&& $webArgs->{absbaromin} ne "" && $webArgs->{absbaromin} ne ""
&& !defined( $webArgs->{absbaro} ) ) && !defined( $webArgs->{absbaro} ) )
{ {
$webArgs->{absbaro} = HP1000_inhg2hpa( $webArgs->{absbaromin} ); $webArgs->{absbaro} =
UConv::inhg2hpa( $webArgs->{absbaromin} );
} }
# rainrate in mm/h (convert from rainin) # rainrate in mm/h (convert from rainin)
@@ -276,7 +324,7 @@ sub HP1000_CGI() {
&& $webArgs->{rainin} ne "" && $webArgs->{rainin} ne ""
&& !defined( $webArgs->{rainrate} ) ) && !defined( $webArgs->{rainrate} ) )
{ {
$webArgs->{rainrate} = HP1000_in2mm( $webArgs->{rainin} ); $webArgs->{rainrate} = UConv::in2mm( $webArgs->{rainin} );
} }
# dailyrain in mm (convert from dailyrainin) # dailyrain in mm (convert from dailyrainin)
@@ -284,7 +332,8 @@ sub HP1000_CGI() {
&& $webArgs->{dailyrainin} ne "" && $webArgs->{dailyrainin} ne ""
&& !defined( $webArgs->{dailyrain} ) ) && !defined( $webArgs->{dailyrain} ) )
{ {
$webArgs->{dailyrain} = HP1000_in2mm( $webArgs->{dailyrainin} ); $webArgs->{dailyrain} =
UConv::in2mm( $webArgs->{dailyrainin} );
} }
# weeklyrain in mm (convert from weeklyrainin) # weeklyrain in mm (convert from weeklyrainin)
@@ -292,7 +341,8 @@ sub HP1000_CGI() {
&& $webArgs->{weeklyrainin} ne "" && $webArgs->{weeklyrainin} ne ""
&& !defined( $webArgs->{weeklyrain} ) ) && !defined( $webArgs->{weeklyrain} ) )
{ {
$webArgs->{weeklyrain} = HP1000_in2mm( $webArgs->{weeklyrainin} ); $webArgs->{weeklyrain} =
UConv::in2mm( $webArgs->{weeklyrainin} );
} }
# monthlyrain in mm (convert from monthlyrainin) # monthlyrain in mm (convert from monthlyrainin)
@@ -300,7 +350,8 @@ sub HP1000_CGI() {
&& $webArgs->{monthlyrainin} ne "" && $webArgs->{monthlyrainin} ne ""
&& !defined( $webArgs->{monthlyrain} ) ) && !defined( $webArgs->{monthlyrain} ) )
{ {
$webArgs->{monthlyrain} = HP1000_in2mm( $webArgs->{monthlyrainin} ); $webArgs->{monthlyrain} =
UConv::in2mm( $webArgs->{monthlyrainin} );
} }
# yearlyrain in mm (convert from yearlyrainin) # yearlyrain in mm (convert from yearlyrainin)
@@ -308,7 +359,8 @@ sub HP1000_CGI() {
&& $webArgs->{yearlyrainin} ne "" && $webArgs->{yearlyrainin} ne ""
&& !defined( $webArgs->{yearlyrain} ) ) && !defined( $webArgs->{yearlyrain} ) )
{ {
$webArgs->{yearlyrain} = HP1000_in2mm( $webArgs->{yearlyrainin} ); $webArgs->{yearlyrain} =
UConv::in2mm( $webArgs->{yearlyrainin} );
} }
# outtemp in Celsius (convert from tempf) # outtemp in Celsius (convert from tempf)
@@ -316,7 +368,8 @@ sub HP1000_CGI() {
&& $webArgs->{tempf} ne "" && $webArgs->{tempf} ne ""
&& !defined( $webArgs->{outtemp} ) ) && !defined( $webArgs->{outtemp} ) )
{ {
$webArgs->{outtemp} = HP1000_f2c( $webArgs->{tempf} ); $webArgs->{outtemp} =
UConv::f2c( $webArgs->{tempf} );
} }
# intemp in Celsius (convert from indoortempf) # intemp in Celsius (convert from indoortempf)
@@ -325,7 +378,7 @@ sub HP1000_CGI() {
&& !defined( $webArgs->{intemp} ) ) && !defined( $webArgs->{intemp} ) )
{ {
$webArgs->{intemp} = $webArgs->{intemp} =
HP1000_f2c( $webArgs->{indoortempf} ); UConv::f2c( $webArgs->{indoortempf} );
} }
# windchill in Celsius (convert from windchillf) # windchill in Celsius (convert from windchillf)
@@ -334,7 +387,7 @@ sub HP1000_CGI() {
&& !defined( $webArgs->{windchill} ) ) && !defined( $webArgs->{windchill} ) )
{ {
$webArgs->{windchill} = $webArgs->{windchill} =
HP1000_f2c( $webArgs->{windchillf} ); UConv::f2c( $webArgs->{windchillf} );
} }
# windgust in km/h (convert from windgustmph) # windgust in km/h (convert from windgustmph)
@@ -342,7 +395,8 @@ sub HP1000_CGI() {
&& $webArgs->{windgustmph} ne "" && $webArgs->{windgustmph} ne ""
&& !defined( $webArgs->{windgust} ) ) && !defined( $webArgs->{windgust} ) )
{ {
$webArgs->{windgust} = HP1000_mph2kph( $webArgs->{windgustmph} ); $webArgs->{windgust} =
UConv::mph2kph( $webArgs->{windgustmph} );
} }
# windspeed in km/h (convert from windspdmph) # windspeed in km/h (convert from windspdmph)
@@ -350,7 +404,8 @@ sub HP1000_CGI() {
&& $webArgs->{windspdmph} ne "" && $webArgs->{windspdmph} ne ""
&& !defined( $webArgs->{windspeed} ) ) && !defined( $webArgs->{windspeed} ) )
{ {
$webArgs->{windspeed} = HP1000_mph2kph( $webArgs->{windspdmph} ); $webArgs->{windspeed} =
UConv::mph2kph( $webArgs->{windspdmph} );
} }
# calculate readings for Angloamerican standard from Metric standard # calculate readings for Angloamerican standard from Metric standard
@@ -366,7 +421,8 @@ sub HP1000_CGI() {
&& $webArgs->{dewpoint} ne "" && $webArgs->{dewpoint} ne ""
&& !defined( $webArgs->{dewptf} ) ) && !defined( $webArgs->{dewptf} ) )
{ {
$webArgs->{dewptf} = HP1000_c2f( $webArgs->{dewpoint} ); $webArgs->{dewptf} =
UConv::c2f( $webArgs->{dewpoint} );
} }
# baromin in inch (convert from relbaro) # baromin in inch (convert from relbaro)
@@ -374,7 +430,7 @@ sub HP1000_CGI() {
&& $webArgs->{relbaro} ne "" && $webArgs->{relbaro} ne ""
&& !defined( $webArgs->{baromin} ) ) && !defined( $webArgs->{baromin} ) )
{ {
$webArgs->{baromin} = HP1000_hpa2inhg( $webArgs->{relbaro} ); $webArgs->{baromin} = UConv::hpa2inhg( $webArgs->{relbaro} );
} }
# absbaromin in inch (convert from absbaro) # absbaromin in inch (convert from absbaro)
@@ -382,7 +438,8 @@ sub HP1000_CGI() {
&& $webArgs->{absbaro} ne "" && $webArgs->{absbaro} ne ""
&& !defined( $webArgs->{absbaromin} ) ) && !defined( $webArgs->{absbaromin} ) )
{ {
$webArgs->{absbaromin} = HP1000_hpa2inhg( $webArgs->{absbaro} ); $webArgs->{absbaromin} =
UConv::hpa2inhg( $webArgs->{absbaro} );
} }
# rainin in in/h (convert from rainrate) # rainin in in/h (convert from rainrate)
@@ -390,7 +447,7 @@ sub HP1000_CGI() {
&& $webArgs->{rainrate} ne "" && $webArgs->{rainrate} ne ""
&& !defined( $webArgs->{rainin} ) ) && !defined( $webArgs->{rainin} ) )
{ {
$webArgs->{rainin} = HP1000_mm2in( $webArgs->{rainrate} ); $webArgs->{rainin} = UConv::mm2in( $webArgs->{rainrate} );
} }
# dailyrainin in inch (convert from dailyrain) # dailyrainin in inch (convert from dailyrain)
@@ -398,7 +455,8 @@ sub HP1000_CGI() {
&& $webArgs->{dailyrain} ne "" && $webArgs->{dailyrain} ne ""
&& !defined( $webArgs->{dailyrainin} ) ) && !defined( $webArgs->{dailyrainin} ) )
{ {
$webArgs->{dailyrainin} = HP1000_mm2in( $webArgs->{dailyrain} ); $webArgs->{dailyrainin} =
UConv::mm2in( $webArgs->{dailyrain} );
} }
# weeklyrainin in inch (convert from weeklyrain) # weeklyrainin in inch (convert from weeklyrain)
@@ -406,7 +464,8 @@ sub HP1000_CGI() {
&& $webArgs->{weeklyrain} ne "" && $webArgs->{weeklyrain} ne ""
&& !defined( $webArgs->{weeklyrainin} ) ) && !defined( $webArgs->{weeklyrainin} ) )
{ {
$webArgs->{weeklyrainin} = HP1000_mm2in( $webArgs->{weeklyrain} ); $webArgs->{weeklyrainin} =
UConv::mm2in( $webArgs->{weeklyrain} );
} }
# monthlyrainin in inch (convert from monthlyrain) # monthlyrainin in inch (convert from monthlyrain)
@@ -414,7 +473,8 @@ sub HP1000_CGI() {
&& $webArgs->{monthlyrain} ne "" && $webArgs->{monthlyrain} ne ""
&& !defined( $webArgs->{monthlyrainin} ) ) && !defined( $webArgs->{monthlyrainin} ) )
{ {
$webArgs->{monthlyrainin} = HP1000_mm2in( $webArgs->{monthlyrain} ); $webArgs->{monthlyrainin} =
UConv::mm2in( $webArgs->{monthlyrain} );
} }
# yearlyrainin in inch (convert from yearlyrain) # yearlyrainin in inch (convert from yearlyrain)
@@ -422,7 +482,8 @@ sub HP1000_CGI() {
&& $webArgs->{yearlyrain} ne "" && $webArgs->{yearlyrain} ne ""
&& !defined( $webArgs->{yearlyrainin} ) ) && !defined( $webArgs->{yearlyrainin} ) )
{ {
$webArgs->{yearlyrainin} = HP1000_mm2in( $webArgs->{yearlyrain} ); $webArgs->{yearlyrainin} =
UConv::mm2in( $webArgs->{yearlyrain} );
} }
# tempf in Fahrenheit (convert from outtemp) # tempf in Fahrenheit (convert from outtemp)
@@ -430,7 +491,8 @@ sub HP1000_CGI() {
&& $webArgs->{outtemp} ne "" && $webArgs->{outtemp} ne ""
&& !defined( $webArgs->{tempf} ) ) && !defined( $webArgs->{tempf} ) )
{ {
$webArgs->{tempf} = HP1000_c2f( $webArgs->{outtemp} ); $webArgs->{tempf} =
UConv::c2f( $webArgs->{outtemp} );
} }
# indoortempf in Fahrenheit (convert from intemp) # indoortempf in Fahrenheit (convert from intemp)
@@ -439,7 +501,7 @@ sub HP1000_CGI() {
&& !defined( $webArgs->{indoortempf} ) ) && !defined( $webArgs->{indoortempf} ) )
{ {
$webArgs->{indoortempf} = $webArgs->{indoortempf} =
HP1000_c2f( $webArgs->{intemp} ); UConv::c2f( $webArgs->{intemp} );
} }
# windchillf in Fahrenheit (convert from windchill) # windchillf in Fahrenheit (convert from windchill)
@@ -448,7 +510,26 @@ sub HP1000_CGI() {
&& !defined( $webArgs->{windchillf} ) ) && !defined( $webArgs->{windchillf} ) )
{ {
$webArgs->{windchillf} = $webArgs->{windchillf} =
HP1000_c2f( $webArgs->{windchill} ); UConv::c2f( $webArgs->{windchill} );
}
# windgustmps in m/s (convert from windgust)
if ( defined( $webArgs->{windgust} )
&& $webArgs->{windgust} ne ""
&& !defined( $webArgs->{windgustmps} ) )
{
$webArgs->{windgustmps} =
UConv::kph2mps( $webArgs->{windgust} );
}
# windgust in km/h (convert from windgustmps,
# not exactly from angloamerican...)
if ( defined( $webArgs->{windgustmps} )
&& $webArgs->{windgustmps} ne ""
&& !defined( $webArgs->{windgust} ) )
{
$webArgs->{windgust} =
UConv::mps2kph( $webArgs->{windgustmps} );
} }
# windgustmph in mph (convert from windgust) # windgustmph in mph (convert from windgust)
@@ -456,7 +537,27 @@ sub HP1000_CGI() {
&& $webArgs->{windgust} ne "" && $webArgs->{windgust} ne ""
&& !defined( $webArgs->{windgustmph} ) ) && !defined( $webArgs->{windgustmph} ) )
{ {
$webArgs->{windgustmph} = HP1000_kph2mph( $webArgs->{windgust} ); $webArgs->{windgustmph} =
UConv::kph2mph( $webArgs->{windgust} );
}
# windspeedmps in m/s (convert from windspeed,
# not exactly from angloamerican...)
if ( defined( $webArgs->{windspeed} )
&& $webArgs->{windspeed} ne ""
&& !defined( $webArgs->{windspeedmps} ) )
{
$webArgs->{windspeedmps} =
UConv::kph2mps( $webArgs->{windspeed} );
}
# windspeed in km/h (convert from windspeedmps)
if ( defined( $webArgs->{windspeedmps} )
&& $webArgs->{windspeedmps} ne ""
&& !defined( $webArgs->{windspeed} ) )
{
$webArgs->{windspeed} =
UConv::mps2kph( $webArgs->{windspeedmps} );
} }
# windspdmph in mph (convert from windspeed) # windspdmph in mph (convert from windspeed)
@@ -464,7 +565,8 @@ sub HP1000_CGI() {
&& $webArgs->{windspeed} ne "" && $webArgs->{windspeed} ne ""
&& !defined( $webArgs->{windspdmph} ) ) && !defined( $webArgs->{windspdmph} ) )
{ {
$webArgs->{windspdmph} = HP1000_kph2mph( $webArgs->{windspeed} ); $webArgs->{windspdmph} =
UConv::kph2mph( $webArgs->{windspeed} );
} }
# write general readings # write general readings
@@ -511,7 +613,9 @@ sub HP1000_CGI() {
$p = "temperatureIndoor" if ( $p eq "_intemp" ); $p = "temperatureIndoor" if ( $p eq "_intemp" );
$p = "windChill" if ( $p eq "_windchill" ); $p = "windChill" if ( $p eq "_windchill" );
$p = "windGust" if ( $p eq "_windgust" ); $p = "windGust" if ( $p eq "_windgust" );
$p = "windGustMps" if ( $p eq "_windgustmps" );
$p = "windSpeed" if ( $p eq "_windspeed" ); $p = "windSpeed" if ( $p eq "_windspeed" );
$p = "windSpeedMps" if ( $p eq "_windspeedmps" );
# name translation for Angloamerican standard # name translation for Angloamerican standard
$p = "dewpointF" if ( $p eq "_dewptf" ); $p = "dewpointF" if ( $p eq "_dewptf" );
@@ -609,7 +713,7 @@ sub HP1000_CGI() {
# UVI (convert from uW/cm2) # UVI (convert from uW/cm2)
if ( defined( $webArgs->{UV} ) ) { if ( defined( $webArgs->{UV} ) ) {
$webArgs->{UVI} = HP1000_uwpscm2uvi( $webArgs->{UV} ); $webArgs->{UVI} = UConv::uwpscm2uvi( $webArgs->{UV} );
readingsBulkUpdate( $hash, "uvIndex", $webArgs->{UVI} ); readingsBulkUpdate( $hash, "uvIndex", $webArgs->{UVI} );
} }
@@ -635,20 +739,22 @@ sub HP1000_CGI() {
# solarradiation in W/m2 (convert from lux) # solarradiation in W/m2 (convert from lux)
if ( defined( $webArgs->{light} ) ) { if ( defined( $webArgs->{light} ) ) {
$webArgs->{solarradiation} = HP1000_lux2wpsm( $webArgs->{light} ); $webArgs->{solarradiation} =
UConv::lux2wpsm( $webArgs->{light} );
readingsBulkUpdate( $hash, "solarradiation", readingsBulkUpdate( $hash, "solarradiation",
$webArgs->{solarradiation} ); $webArgs->{solarradiation} );
} }
# pressureMm in mmHg (convert from hpa) # pressureMm in mmHg (convert from hpa)
if ( defined( $webArgs->{relbaro} ) ) { if ( defined( $webArgs->{relbaro} ) ) {
$webArgs->{barommm} = HP1000_hpa2mmhg( $webArgs->{relbaro} ); $webArgs->{barommm} = UConv::hpa2mmhg( $webArgs->{relbaro} );
readingsBulkUpdate( $hash, "pressureMm", $webArgs->{barommm} ); readingsBulkUpdate( $hash, "pressureMm", $webArgs->{barommm} );
} }
# pressureAbsMm in mmHg (convert from hpa) # pressureAbsMm in mmHg (convert from hpa)
if ( defined( $webArgs->{absbaro} ) ) { if ( defined( $webArgs->{absbaro} ) ) {
$webArgs->{absbarommm} = HP1000_hpa2mmhg( $webArgs->{absbaro} ); $webArgs->{absbarommm} =
UConv::hpa2mmhg( $webArgs->{absbaro} );
readingsBulkUpdate( $hash, "pressureAbsMm", $webArgs->{absbarommm} ); readingsBulkUpdate( $hash, "pressureAbsMm", $webArgs->{absbarommm} );
} }
@@ -729,61 +835,49 @@ sub HP1000_CGI() {
# windCompasspoint # windCompasspoint
if ( defined( $webArgs->{winddir} ) ) { if ( defined( $webArgs->{winddir} ) ) {
$webArgs->{windcompasspoint} = $webArgs->{windcompasspoint} =
HP1000_CompassPoint( $webArgs->{winddir} ); UConv::direction2compasspoint( $webArgs->{winddir} );
readingsBulkUpdate( $hash, "windCompasspoint", readingsBulkUpdate( $hash, "windCompasspoint",
$webArgs->{windcompasspoint} ); $webArgs->{windcompasspoint} );
} }
# windSpeedBft in Beaufort (convert from km/h) # windSpeedBft in Beaufort (convert from km/h)
if ( defined( $webArgs->{windspeed} ) ) { if ( defined( $webArgs->{windspeed} ) ) {
$webArgs->{windspeedbft} = HP1000_kph2bft( $webArgs->{windspeed} ); $webArgs->{windspeedbft} =
UConv::kph2bft( $webArgs->{windspeed} );
readingsBulkUpdate( $hash, "windSpeedBft", $webArgs->{windspeedbft} ); readingsBulkUpdate( $hash, "windSpeedBft", $webArgs->{windspeedbft} );
} }
# windSpeedMps in m/s (convert from km/h)
if ( defined( $webArgs->{windspeed} ) ) {
my $v = HP1000_kph2mps( $webArgs->{windspeed} );
$webArgs->{windspeedmps} = ( $v > 0.5 ? round( $v, 1 ) : "0.0" );
readingsBulkUpdate( $hash, "windSpeedMps", $webArgs->{windspeedmps} );
}
# windSpeedKn in kn (convert from km/h) # windSpeedKn in kn (convert from km/h)
if ( defined( $webArgs->{windspeed} ) ) { if ( defined( $webArgs->{windspeed} ) ) {
my $v = HP1000_kph2kn( $webArgs->{windspeed} ); my $v = UConv::kph2kn( $webArgs->{windspeed} );
$webArgs->{windspeedkn} = ( $v > 0.5 ? round( $v, 1 ) : "0.0" ); $webArgs->{windspeedkn} = ( $v > 0.5 ? round( $v, 1 ) : "0.0" );
readingsBulkUpdate( $hash, "windSpeedKn", $webArgs->{windspeedkn} ); readingsBulkUpdate( $hash, "windSpeedKn", $webArgs->{windspeedkn} );
} }
# windSpeedFts in ft/s (convert from mph) # windSpeedFts in ft/s (convert from mph)
if ( defined( $webArgs->{windspeedmph} ) ) { if ( defined( $webArgs->{windspeedmph} ) ) {
my $v = HP1000_mph2fts( $webArgs->{windspeedmph} ); my $v = UConv::mph2fts( $webArgs->{windspeedmph} );
$webArgs->{windspeedfts} = ( $v > 0.5 ? round( $v, 1 ) : "0.0" ); $webArgs->{windspeedfts} = ( $v > 0.5 ? round( $v, 1 ) : "0.0" );
readingsBulkUpdate( $hash, "windSpeedFts", $webArgs->{windspeedfts} ); readingsBulkUpdate( $hash, "windSpeedFts", $webArgs->{windspeedfts} );
} }
# windGustBft in Beaufort (convert from km/h) # windGustBft in Beaufort (convert from km/h)
if ( defined( $webArgs->{windgust} ) ) { if ( defined( $webArgs->{windgust} ) ) {
$webArgs->{windgustbft} = HP1000_kph2bft( $webArgs->{windgust} ); $webArgs->{windgustbft} =
UConv::kph2bft( $webArgs->{windgust} );
readingsBulkUpdate( $hash, "windGustBft", $webArgs->{windgustbft} ); readingsBulkUpdate( $hash, "windGustBft", $webArgs->{windgustbft} );
} }
# windGustMps in m/s (convert from km/h)
if ( defined( $webArgs->{windgust} ) ) {
my $v = HP1000_kph2mps( $webArgs->{windgust} );
$webArgs->{windgustmps} = ( $v > 0.5 ? round( $v, 1 ) : "0.0" );
readingsBulkUpdate( $hash, "windGustMps", $webArgs->{windgustmps} );
}
# windGustKn in m/s (convert from km/h) # windGustKn in m/s (convert from km/h)
if ( defined( $webArgs->{windgust} ) ) { if ( defined( $webArgs->{windgust} ) ) {
my $v = HP1000_kph2kn( $webArgs->{windgust} ); my $v = UConv::kph2kn( $webArgs->{windgust} );
$webArgs->{windgustkn} = ( $v > 0.5 ? round( $v, 1 ) : "0.0" ); $webArgs->{windgustkn} = ( $v > 0.5 ? round( $v, 1 ) : "0.0" );
readingsBulkUpdate( $hash, "windGustKn", $webArgs->{windgustkn} ); readingsBulkUpdate( $hash, "windGustKn", $webArgs->{windgustkn} );
} }
# windGustFts ft/s (convert from mph) # windGustFts ft/s (convert from mph)
if ( defined( $webArgs->{windgustmph} ) ) { if ( defined( $webArgs->{windgustmph} ) ) {
my $v = HP1000_mph2fts( $webArgs->{windgustmph} ); my $v = UConv::mph2fts( $webArgs->{windgustmph} );
$webArgs->{windgustfts} = ( $v > 0.5 ? round( $v, 1 ) : "0.0" ); $webArgs->{windgustfts} = ( $v > 0.5 ? round( $v, 1 ) : "0.0" );
readingsBulkUpdate( $hash, "windGustFts", $webArgs->{windgustfts} ); readingsBulkUpdate( $hash, "windGustFts", $webArgs->{windgustfts} );
} }
@@ -802,7 +896,7 @@ sub HP1000_CGI() {
# averages/windCompasspoint_avg2m # averages/windCompasspoint_avg2m
if ( defined( $webArgs->{winddir_avg2m} ) ) { if ( defined( $webArgs->{winddir_avg2m} ) ) {
$webArgs->{windcompasspoint_avg2m} = $webArgs->{windcompasspoint_avg2m} =
HP1000_CompassPoint( $webArgs->{winddir_avg2m} ); UConv::direction2compasspoint( $webArgs->{winddir_avg2m} );
readingsBulkUpdate( $hash, "windCompasspoint_avg2m", readingsBulkUpdate( $hash, "windCompasspoint_avg2m",
$webArgs->{windcompasspoint_avg2m} ); $webArgs->{windcompasspoint_avg2m} );
} }
@@ -832,14 +926,22 @@ sub HP1000_CGI() {
# averages/windSpeedBft_avg2m in Beaufort (convert from km/h) # averages/windSpeedBft_avg2m in Beaufort (convert from km/h)
if ( defined( $webArgs->{windspeed_avg2m} ) ) { if ( defined( $webArgs->{windspeed_avg2m} ) ) {
$webArgs->{windspeedbft_avg2m} = $webArgs->{windspeedbft_avg2m} =
HP1000_kph2bft( $webArgs->{windspeed_avg2m} ); UConv::kph2bft( $webArgs->{windspeed_avg2m} );
readingsBulkUpdate( $hash, "windSpeedBft_avg2m", readingsBulkUpdate( $hash, "windSpeedBft_avg2m",
$webArgs->{windspeedbft_avg2m} ); $webArgs->{windspeedbft_avg2m} );
} }
# averages/windSpeedKn_avg2m in Kn (convert from km/h)
if ( defined( $webArgs->{windspeed_avg2m} ) ) {
$webArgs->{windspeedkn_avg2m} =
UConv::kph2kn( $webArgs->{windspeed_avg2m} );
readingsBulkUpdate( $hash, "windSpeedKn_avg2m",
$webArgs->{windspeedkn_avg2m} );
}
# averages/windSpeedMps_avg2m in m/s # averages/windSpeedMps_avg2m in m/s
if ( defined( $webArgs->{windspeed_avg2m} ) ) { if ( defined( $webArgs->{windspeed_avg2m} ) ) {
my $v = HP1000_kph2mps( $webArgs->{windspeed_avg2m} ); my $v = UConv::kph2mps( $webArgs->{windspeed_avg2m} );
$webArgs->{windspeedmps_avg2m} = $webArgs->{windspeedmps_avg2m} =
( $v > 0.5 ? round( $v, 1 ) : "0.0" ); ( $v > 0.5 ? round( $v, 1 ) : "0.0" );
readingsBulkUpdate( $hash, "windSpeedMps_avg2m", readingsBulkUpdate( $hash, "windSpeedMps_avg2m",
@@ -876,7 +978,7 @@ sub HP1000_CGI() {
# soilmoisture - [%] # soilmoisture - [%]
# leafwetness - [%] # leafwetness - [%]
# visibility - [nm visibility] # visibility - [nm visibility]
# condition_forecast (based on pressure trendency) # condition_forecast (based on pressure trend)
# dayNight # dayNight
# soilTemperature # soilTemperature
# brightness in % ?? # brightness in % ??
@@ -998,7 +1100,12 @@ sub HP1000_PushSrv($$) {
$cmd = "&"; $cmd = "&";
} }
$webArgs->{PASSWORD} = "";
while ( my ( $key, $value ) = each %{$webArgs} ) { while ( my ( $key, $value ) = each %{$webArgs} ) {
if ( $key eq "softwaretype" || $key eq "dateutc" ) {
$value = urlEncode($value);
}
$cmd .= "$key=" . $value . "&"; $cmd .= "$key=" . $value . "&";
} }
@@ -1058,7 +1165,8 @@ sub HP1000_PushWU($$) {
} }
$webArgs->{rtfreq} = 5 $webArgs->{rtfreq} = 5
if ( defined( $webArgs->{realtime} ) && !defined( $webArgs->{rtfreq} ) ); if ( defined( $webArgs->{realtime} )
&& !defined( $webArgs->{rtfreq} ) );
my $wu_url = ( my $wu_url = (
defined( $webArgs->{realtime} ) defined( $webArgs->{realtime} )
@@ -1357,222 +1465,6 @@ sub HP1000_DbLog_split($$) {
return ( $reading, $value, $unit ); return ( $reading, $value, $unit );
} }
###################################
sub HP1000_kph2bft($) {
my ($data) = @_;
my $v = "0";
if ( $data >= 118 ) {
$v = "12";
}
elsif ( $data >= 103 ) {
$v = "11";
}
elsif ( $data >= 89 ) {
$v = "10";
}
elsif ( $data >= 75 ) {
$v = "9";
}
elsif ( $data >= 62 ) {
$v = "8";
}
elsif ( $data >= 50 ) {
$v = "7";
}
elsif ( $data >= 39 ) {
$v = "6";
}
elsif ( $data >= 29 ) {
$v = "5";
}
elsif ( $data >= 20 ) {
$v = "4";
}
elsif ( $data >= 12 ) {
$v = "3";
}
elsif ( $data >= 6 ) {
$v = "2";
}
elsif ( $data >= 1 ) {
$v = "1";
}
return $v;
}
sub HP1000_CompassPoint($) {
my ($azimuth) = @_;
my $compassPoint = "";
if ( $azimuth < 22.5 ) {
$compassPoint = "N";
}
elsif ( $azimuth < 45 ) {
$compassPoint = "NNE";
}
elsif ( $azimuth < 67.5 ) {
$compassPoint = "NE";
}
elsif ( $azimuth < 90 ) {
$compassPoint = "ENE";
}
elsif ( $azimuth < 112.5 ) {
$compassPoint = "E";
}
elsif ( $azimuth < 135 ) {
$compassPoint = "ESE";
}
elsif ( $azimuth < 157.5 ) {
$compassPoint = "SE";
}
elsif ( $azimuth < 180 ) {
$compassPoint = "SSE";
}
elsif ( $azimuth < 202.5 ) {
$compassPoint = "S";
}
elsif ( $azimuth < 225 ) {
$compassPoint = "SSW";
}
elsif ( $azimuth < 247.5 ) {
$compassPoint = "SW";
}
elsif ( $azimuth < 270 ) {
$compassPoint = "WSW";
}
elsif ( $azimuth < 292.5 ) {
$compassPoint = "W";
}
elsif ( $azimuth < 315 ) {
$compassPoint = "WNW";
}
elsif ( $azimuth < 337.5 ) {
$compassPoint = "NW";
}
elsif ( $azimuth <= 361 ) {
$compassPoint = "NNW";
}
return $compassPoint;
}
###################################
sub HP1000_kph2mph($) {
my ($data) = @_;
# convert km/h to mph
return round( $data * 0.621, 1 );
}
###################################
sub HP1000_kph2mps($) {
my ($data) = @_;
# convert km/h to m/s
return round( $data / 3.6, 1 );
}
###################################
sub HP1000_kph2kn($) {
my ($data) = @_;
# convert km/h to knots
return round( $data * 0.539956803456, 1 );
}
###################################
sub HP1000_mph2kph($) {
my ($data) = @_;
# convert mph to km/h
return round( $data * 1.609344, 1 );
}
###################################
sub HP1000_mph2fts($) {
my ($data) = @_;
# convert mph to ft/s
return round( $data * 1.467, 1 );
}
###################################
sub HP1000_c2f($) {
my ($data) = @_;
# convert Celsius to Fahrenheit
return round( $data * 1.8 + 32, 1 );
}
###################################
sub HP1000_f2c($) {
my ($data) = @_;
# convert Fahrenheit to Celsius
return round( ( $data - 32 ) * 0.5556, 1 );
}
###################################
sub HP1000_mm2in($) {
my ($data) = @_;
# convert mm to inch
return round( $data * 0.039, 1 );
}
###################################
sub HP1000_in2mm($) {
my ($data) = @_;
# convert mm to inch
return round( $data * 25.4, 1 );
}
###################################
sub HP1000_hpa2inhg($) {
my ($data) = @_;
# convert Hecto Pascal to Inches of Mercury
return round( $data * 0.02952998751, 1 );
}
###################################
sub HP1000_hpa2mmhg($) {
my ($data) = @_;
# convert Hecto Pascal to Milimeter of Mercury
return round( $data * 0.00750061561303, 1 );
}
###################################
sub HP1000_inhg2hpa($) {
my ($data) = @_;
# convert Inches of Mercury to Hecto Pascal
return round( $data * 33.8638816, 1 );
}
###################################
# Forum topic,44403.msg501704.html#msg501704
sub HP1000_uwpscm2uvi($) {
my ($data) = @_;
# convert uW/cm2 to UV-Index
return floor( ( $data - 100 ) / 450 + 1 );
}
###################################
# Forum topic,44403.msg501704.html#msg501704
sub HP1000_lux2wpsm($) {
my ($data) = @_;
# convert lux to W/m2
return round( $data / 126.7, 1 );
}
1; 1;
=pod =pod

View File

@@ -415,6 +415,7 @@ FHEM/SHC_parser.pm rr2000 http://forum.fhem.de Sonstige
FHEM/SubProcess.pm borisneubert http://forum.fhem.de FHEM Development FHEM/SubProcess.pm borisneubert http://forum.fhem.de FHEM Development
FHEM/TcpServerUtils.pm rudolfkoenig http://forum.fhem.de Automatisierung FHEM/TcpServerUtils.pm rudolfkoenig http://forum.fhem.de Automatisierung
FHEM/TimeSeries.pm borisneubert/jensb http://forum.fhem.de FHEM Development FHEM/TimeSeries.pm borisneubert/jensb http://forum.fhem.de FHEM Development
FHEM/UConv.pm loredo http://forum.fhem.de FHEM Development
FHEM/YahooWeatherAPI.pm borisneubert http://forum.fhem.de Unterstuetzende Dienste/Wettermodule FHEM/YahooWeatherAPI.pm borisneubert http://forum.fhem.de Unterstuetzende Dienste/Wettermodule
FHEM/lib/Device/Firmata/* ntruchsess http://forum.fhem.de Sonstige Systeme FHEM/lib/Device/Firmata/* ntruchsess http://forum.fhem.de Sonstige Systeme
FHEM/lib/Device/MySensors/* ntruchsess http://forum.fhem.de Sonstige Systeme FHEM/lib/Device/MySensors/* ntruchsess http://forum.fhem.de Sonstige Systeme