From eec0c840fc21cccfe289e13c30afd967abb9060c Mon Sep 17 00:00:00 2001 From: borisneubert <> Date: Fri, 18 Apr 2014 13:42:28 +0000 Subject: [PATCH] 02_RSS.pm: HTTPS enabled, png as image type added, autofreshing HTML page with image map added git-svn-id: https://svn.fhem.de/fhem/trunk@5553 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 2 + fhem/FHEM/02_RSS.pm | 116 +++++++++++++++++++++++++++++++++----------- 2 files changed, 89 insertions(+), 29 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index 995bc98e6..fc7dbed24 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,6 +1,8 @@ # 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. - SVN + - feature: 02_RSS.pm: HTTPS enabled, png as image type added, autofreshing + HTML page with image map added - feature: ECMD and ECMDDevice completely reworked, see http://forum.fhem.de/index.php/topic,21515.0.html - feature: new layout command rect and new attribute bgcolor for RSS diff --git a/fhem/FHEM/02_RSS.pm b/fhem/FHEM/02_RSS.pm index 4a607f7e9..5059696ea 100644 --- a/fhem/FHEM/02_RSS.pm +++ b/fhem/FHEM/02_RSS.pm @@ -46,7 +46,7 @@ RSS_Initialize($) { my ($hash) = @_; $hash->{DefFn} = "RSS_Define"; #$hash->{AttrFn} = "RSS_Attr"; - $hash->{AttrList}= "size bg bgcolor tmin"; + $hash->{AttrList}= "size bg bgcolor tmin refresh areas"; $hash->{SetFn} = "RSS_Set"; RSS_addExtension("RSS_CGI","rss","RSS"); @@ -80,7 +80,7 @@ RSS_Define($$) { my @a = split("[ \t]+", $def); - return "Usage: define RSS jpg hostname filename" if(int(@a) != 5); + return "Usage: define RSS jpg|png hostname filename" if(int(@a) != 5); my $name= $a[0]; my $style= $a[2]; my $hostname= $a[3]; @@ -131,7 +131,8 @@ sub RSS_getURL($) { my ($hostname)= @_; # http://hostname:8083/fhem - return "http://$hostname:" . $defs{$FW_wname}{PORT} . $FW_ME; + my $proto = (AttrVal($FW_wname, 'HTTPS', 0) == 1) ? 'https' : 'http'; + return $proto."://$hostname:" . $defs{$FW_wname}{PORT} . $FW_ME; } # ################## @@ -190,10 +191,12 @@ RSS_splitRequest($) { } else { # http://hostname:8083/fhem/rss/myDeviceName.rss # http://hostname:8083/fhem/rss/myDeviceName.jpg + # http://hostname:8083/fhem/rss/myDeviceName.png + # http://hostname:8083/fhem/rss/myDeviceName.html my $call= $request; $call =~ s/^.*\/rss\/([^\/]*)$/$1/; my $name= $call; - $name =~ s/^(.*)\.(jpg|rss)$/$1/; + $name =~ s/^(.*)\.(jpg|png|rss|html)$/$1/; my $ext= $call; $ext =~ s/^$name\.(.*)$/$1/; return ($name,$ext); @@ -206,12 +209,28 @@ RSS_returnRSS($) { my ($name) = @_; my $url= RSS_getURL($defs{$name}{fhem}{hostname}); - - my $code= "$name1"; + my $type = $defs{$name}{fhem}{style}; + my $mime = ($type eq 'png')? 'image/png' : 'image/jpeg'; + my $code= "$name1"; return ("application/xml; charset=utf-8", $code); } +################## +sub +RSS_returnHTML($) { + my ($name) = @_; + + my $url= RSS_getURL($defs{$name}{fhem}{hostname}); + my $type = $defs{$name}{fhem}{style}; + my $img= "$url/rss/$name.$type"; + my $refresh= AttrVal($name, 'refresh', 60); + my $areas= AttrVal($name, 'areas', ""); + my $mime = ($type eq 'png')? 'image/png' : 'image/jpeg'; + my $code= "\n \n $name\n \n \n \n \n \n $areas\n \n \n"; + return ("text/html; charset=utf-8", $code); +} + ################## # Library ################## @@ -547,8 +566,8 @@ RSS_evalLayout($$@) { ################## sub -RSS_returnJPEG($) { - my ($name)= @_; +RSS_returnIMG($$) { + my ($name,$type)= @_; my ($width,$height)= split(/x/, AttrVal($name,"size","800x600")); @@ -641,9 +660,10 @@ RSS_returnJPEG($) { }; warn $@ if $@; # - # return jpeg image + # return image # - return ("image/jpeg; charset=utf-8", $S->jpeg); + return ("image/jpeg; charset=utf-8", $S->jpeg) if $type eq 'jpg'; + return ("image/png; charset=utf-8", $S->png) if $type eq 'png'; } ################## @@ -652,9 +672,9 @@ RSS_returnJPEG($) { sub RSS_CGI(){ - my ($request) = @_; # /rss or /rss/name.rss or /rss/name.jpg + my ($request) = @_; # /rss or /rss/name.rss or /rss/name.jpg or /rss/name.png - my ($name,$ext)= RSS_splitRequest($request); # name, ext (rss, jpg) + my ($name,$ext)= RSS_splitRequest($request); # name, ext (rss, jpg, png) if(defined($name)) { if($ext eq "") { @@ -665,9 +685,13 @@ RSS_CGI(){ } if($ext eq "jpg") { - return RSS_returnJPEG($name); + return RSS_returnIMG($name,'jpg'); + } elsif($ext eq "png") { + return RSS_returnIMG($name,'png'); } elsif($ext eq "rss") { return RSS_returnRSS($name); + } elsif($ext eq "html") { + return RSS_returnHTML($name); } } else { return RSS_Overview(); @@ -689,31 +713,60 @@ RSS_CGI(){

RSS