diff --git a/fhem/FHEM/23_WEBTHERM.pm b/fhem/FHEM/23_WEBTHERM.pm index 837c231b2..d6dbf95d7 100644 --- a/fhem/FHEM/23_WEBTHERM.pm +++ b/fhem/FHEM/23_WEBTHERM.pm @@ -1,30 +1,34 @@ -################################################################ -# -# Copyright notice -# -# (c) 2010 Sacha Gloor (sacha@imp.ch) -# -# This script is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# The GNU General Public License can be found at -# http://www.gnu.org/copyleft/gpl.html. -# A copy is found in the textfile GPL.txt and important notices to the license -# from the author is found in LICENSE.txt distributed with these scripts. -# -# This script is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# This copyright notice MUST APPEAR in all copies of the script! -# -################################################################ # $Id$ +################################################################ +# +# This module will connect a webbased thermometer +# to your fhem installation. +# +# Further informations about required hardware: +# http://www.wut.de/e-57w0w-ww-dade-000.php +# +# (c) 2010 Sacha Gloor (sacha@imp.ch) +# +# corrections & documentation added for fhem +# 2013-07-30 by betateilchen ® +# +# This file is part of fhem. +# +# Fhem is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# Fhem is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with fhem. If not, see . +# +################################################################ -############################################## package main; use strict; @@ -51,71 +55,115 @@ WEBTHERM_Define($$) my $host = $a[2]; my $host_port = $a[3]; - my $delay=$a[4]; - $attr{$name}{delay}=$delay if $delay; + my $interval=$a[4]; + $attr{$name}{interval}=$interval if $interval; - return "Wrong syntax: use define WEBTHERM " if(int(@a) != 5); + return "Usage: define WEBTHERM " if(int(@a) != 5); $hash->{Host} = $host; $hash->{Host_Port} = $host_port; - InternalTimer(gettimeofday()+$delay, "WEBTHERM_GetStatus", $hash, 0); + InternalTimer(gettimeofday()+$interval, "WEBTHERM_GetStatus", $hash, 0); - return undef; + return; } -##################################### - sub WEBTHERM_GetStatus($) { - my ($hash) = @_; - my $err_log=''; - my $line; + my ($hash) = @_; + my $err_log=''; + my $line; - my $name = $hash->{NAME}; - my $host = $hash->{Host}; + my $name = $hash->{NAME}; + my $host = $hash->{Host}; - my $delay=$attr{$name}{delay}||300; - InternalTimer(gettimeofday()+$delay, "WEBTHERM_GetStatus", $hash, 0); + my $interval=$attr{$name}{interval}||300; + InternalTimer(gettimeofday()+$interval, "WEBTHERM_GetStatus", $hash, 0); - if(!defined($hash->{Host_Port})) { return(""); } - my $host_port = $hash->{Host_Port}; + if(!defined($hash->{Host_Port})) { return(""); } + my $host_port = $hash->{Host_Port}; - my $URL="http://".$host."/Single".$host_port; - my $agent = LWP::UserAgent->new(env_proxy => 1,keep_alive => 1, timeout => 3); - my $header = HTTP::Request->new(GET => $URL); - my $request = HTTP::Request->new('GET', $URL, $header); - my $response = $agent->request($request); +### 2013-07-30 corrected by betateilchen +# my $URL="http://".$host."/Single".$host_port; + my $URL="http://".$host.":".$host_port."/Single"; +### end-of-correction + my $agent = LWP::UserAgent->new(env_proxy => 1,keep_alive => 1, timeout => 3); + my $header = HTTP::Request->new(GET => $URL); + my $request = HTTP::Request->new('GET', $URL, $header); + my $response = $agent->request($request); - $err_log.= "Can't get $URL -- ".$response->status_line + $err_log.= "Can't get $URL -- ".$response->status_line unless $response->is_success; - if($err_log ne "") - { - Log GetLogLevel($name,2), "WEBTHERM ".$err_log; - return(""); - } + if($err_log ne "") + { + Log GetLogLevel($name,2), "WEBTHERM $name ".$err_log; + return; + } - my $body = $response->content; - my $text=''; -# print $body."\n"; - my @values=split(/;/,$body); - my $last=$values[$#values]; - my $state=$last; - $state=~s/,/./g; - $state=substr($state,0,-2); + my $body = $response->content; + my $text=''; - my $sensor="temperature"; - Log 4, "WEBTHERM_GetStatus: $name $host_port ".$hash->{STATE}." -> ".$state; + my @values=split(/;/,$body); + my $last=$values[$#values]; + my $state=$last; + $state=~s/,/./g; + $state=substr($state,0,-2); - $text="Temperature: ".$state; - $hash->{STATE} = "T: ".$state; + my $sensor="temperature"; + Log 4, "WEBTHERM_GetStatus: $name $host_port ".$hash->{STATE}." -> ".$state; - $hash->{CHANGED}[0] = $text; - $hash->{READINGS}{$sensor}{TIME} = TimeNow(); - $hash->{READINGS}{$sensor}{VAL} = $state." (Celsius)"; - DoTrigger($name, undef) if($init_done); + $text="Temperature: ".$state; + $hash->{STATE} = "T: ".$state; + $hash->{CHANGED}[0] = $text; + + readingsSingleUpdate($name, $sensor, $state, 1); + return; } 1; + +=pod +=begin html + + +

WEBTHERM

+
    + This module connects a Web-Thermometer made by W&T to your FHEM installation.
    + Currently this module is no longer maintained, but it should work in its current state.
    + It is provided "as is" for backward compatibility.
    +
    + + Define +

      + define <name> WEBTHERM <ip-address> <port-nr> <interval>
      +
      + Defines a WEBTHERM device at given ip and port.
      + Values are polled periodically defined by given interval (in seconds).
      + Read temperature is written into reading "state".
      +
    +

    + + + Set +
      + N/A +
    +

    + + + Get +
      + N/A +
    +

    + + + Attr +
      + N/A +
    +
+=end html +=cut