From 62d175499bab8e25d66441fe135dbc38e4efbae6 Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Sat, 15 May 2010 12:26:16 +0000 Subject: [PATCH] Smallscreen additions git-svn-id: https://fhem.svn.sourceforge.net/svnroot/fhem/trunk/fhem@630 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- CHANGED | 1 + docs/HOWTO.html | 6 +- docs/commandref.html | 16 ++- examples/sample_pgm2 | 5 +- webfrontend/pgm2/01_FHEMWEB.pm | 153 ++++++++++++++++--------- webfrontend/pgm2/98_SVG.pm | 5 +- webfrontend/pgm2/fhem_smallscreen.png | Bin 0 -> 5944 bytes webfrontend/pgm2/style.css | 10 +- webfrontend/pgm2/style_smallscreen.css | 21 ++++ 9 files changed, 149 insertions(+), 68 deletions(-) create mode 100644 webfrontend/pgm2/fhem_smallscreen.png create mode 100644 webfrontend/pgm2/style_smallscreen.css diff --git a/CHANGED b/CHANGED index a19c6f3f3..8e47429a0 100644 --- a/CHANGED +++ b/CHANGED @@ -585,3 +585,4 @@ - feature: CUL_HOERMANN module added - bugfix: DST change: absolute at and relative sunrise fix - feature: FHEMWEB javascript additions for SVG plots (click on lines/labels) + - feature: FHEMWEB smallscreen attribute diff --git a/docs/HOWTO.html b/docs/HOWTO.html index 191fcbf3c..edafaa570 100644 --- a/docs/HOWTO.html +++ b/docs/HOWTO.html @@ -57,10 +57,14 @@ After starting, the logfile should look like:
       2008.06.15 16:17:03 2: FHEMWEB port 8083 opened
+      2008.06.15 16:17:03 2: FHEMWEB port 8084 opened
       2008.06.15 16:17:03 0: Server started (version ...)
       
Connect to fhem with an internet browser: - http://localhost:8083/fhem + http://localhost:8083/fhem
+ or + http://localhost:8084/fhem if + you are using a small-screen browser (e.g a smartphone). diff --git a/docs/commandref.html b/docs/commandref.html index e109e2c96..c4fdf609e 100644 --- a/docs/commandref.html +++ b/docs/commandref.html @@ -4247,7 +4247,8 @@ Terminating
  • plotsize
    the default size of the plot, in pixels, separated by comma: width,height. You can set individual sizes by setting the plotsize of - the weblink. + the weblink. Default is 800,160 for desktop, and 480,160 for + smallscreen.

  • @@ -4257,7 +4258,18 @@ Terminating In plotmode gnuplot-scroll or SVG the given time-range will be used, and no scrolling for this weblinks will be possible. Needed e.g. for looking at last-years data without scrolling. -
    +
    + + +
  • smallscreen
    + Optimize for small screen size, e.g. smartphones. + Note: The default configuration installed with make install-pgm2 + installs 2 FHEMWEB instances: port 8083 for desktop browsers and + port 8084 for smallscreen browsers. +

  • + + + diff --git a/examples/sample_pgm2 b/examples/sample_pgm2 index d405c008b..f5132b219 100644 --- a/examples/sample_pgm2 +++ b/examples/sample_pgm2 @@ -11,8 +11,9 @@ attr global verbose 3 # "normal" verbosity (min 1, max 5) #define FHEM FHEM /dev/USB0 define WEB FHEMWEB 8083 global -attr WEB plotmode SVG -attr WEB plotsize 800,160 + +define WEBS FHEMWEB 8084 global +attr WEBS smallscreen # Fake logfile, to access the global log define Logfile FileLog /tmp/fhem-%Y-%m.log fakelog diff --git a/webfrontend/pgm2/01_FHEMWEB.pm b/webfrontend/pgm2/01_FHEMWEB.pm index 66a0debab..9907f7847 100755 --- a/webfrontend/pgm2/01_FHEMWEB.pm +++ b/webfrontend/pgm2/01_FHEMWEB.pm @@ -57,6 +57,7 @@ my $__plotsize; # Global plot size (WEB attribute) my $__data; # Filecontent from browser when editing a file my $__dir; # FHEM directory my $__reldoc; # $__ME/commandref.html; +my $__ss; # smallscreen ##################################### @@ -70,7 +71,8 @@ FHEMWEB_Initialize($) $hash->{DefFn} = "FW_Define"; $hash->{UndefFn} = "FW_Undef"; $hash->{AttrList}= "loglevel:0,1,2,3,4,5,6 webname fwmodpath fwcompress " . - "plotmode:gnuplot,gnuplot-scroll,SVG plotsize refresh"; + "plotmode:gnuplot,gnuplot-scroll,SVG plotsize refresh " . + "smallscreen"; ############### # Initialize internal structures @@ -184,7 +186,7 @@ FW_Read($) } # This is a hack... Dont want to do it each time after a fork. - if(!$modules{SVG}{LOADED}) { + if(!$modules{SVG}{LOADED} && -f "$attr{global}{modpath}/FHEM/98_SVG.pm") { my $ret = CommandReload(undef, "98_SVG"); Log 0, $ret if($ret); } @@ -202,7 +204,7 @@ FW_Read($) $hash->{BUF} .= $buf; return if($hash->{BUF} !~ m/\n\n$/ && $hash->{BUF} !~ m/\r\n\r\n$/); - #Log(0, "Got: >$hash->{BUF}<"); + #Log 0, "Got: >$hash->{BUF}<"; my @lines = split("[\r\n]", $hash->{BUF}); my @enc = grep /Accept-Encoding/, @lines; @@ -254,6 +256,7 @@ FW_AnswerCall($) $__RETTYPE = "text/html; charset=ISO-8859-1"; $__ME = "/" . FW_getAttr($__wname, "webname", "fhem"); $__dir = FW_getAttr($__wname, "fwmodpath", "$attr{global}{modpath}/FHEM"); + $__ss = FW_getAttr($__wname, "smallscreen", 0); # Lets go: if($arg =~ m,^${__ME}/(.*html)$, || $arg =~ m,^${__ME}/(example.*)$,) { @@ -320,7 +323,7 @@ FW_AnswerCall($) $cmd !~ /^edit/); $__plotmode = FW_getAttr($__wname, "plotmode", "SVG"); - $__plotsize = FW_getAttr($__wname, "plotsize", "800,200"); + $__plotsize = FW_getAttr($__wname, "plotsize", $__ss ? "480,160" : "800,160"); $__reldoc = "$__ME/commandref.html"; $__cmdret = $docmd ? fC($cmd) : ""; @@ -353,7 +356,9 @@ FW_AnswerCall($) pO "\n$t"; my $rf = FW_getAttr($__wname, "refresh", ""); pO "" if($rf); - pO ""; + my $stylecss = ($__ss ? "style_smallscreen.css" : "style.css"); + pO ""; + pO "" if($__ss); pO "\n"; if($__cmdret) { @@ -361,7 +366,7 @@ FW_AnswerCall($) $__room = ""; $__cmdret =~ s//>/g; - pO "
    "; + pO "
    "; pO "
    $__cmdret
    "; pO "
    "; } @@ -499,7 +504,7 @@ FW_makeTable($$$$$$$$) pO ""; } pO " "; - pO "
    "; + pO "
    "; } @@ -517,7 +522,7 @@ FW_showArchive($) $fn = FW_getAttr($d, "archivedir", "") . "/" . $fn; my $t = $defs{$d}{TYPE}; - pO "
    "; + pO "
    "; pO "
    "; pO "
    "; @@ -556,7 +561,7 @@ FW_doDetail($) $__room = FW_getAttr($d, "room", undef); my $t = $defs{$d}{TYPE}; - pO "
    "; + pO "
    "; pO "" if($idx); + pO " \n
    "; pO "Delete $d"; @@ -592,15 +597,15 @@ sub FW_roomOverview($) { my ($cmd) = @_; - pO "
    "; + ############## + # HEADER + pO ""; pO "
    "; pO "
    "; - pO FW_textfield("cmd", 30); - + pO FW_textfield("cmd", $__ss ? 20 : 40); if($__room) { pO FW_hidden("room", "$__room"); - # plots navigation buttons if(!$__detail || $defs{$__detail}{TYPE} eq "weblink") { if(FW_calcWeblink(undef,undef)) { @@ -615,47 +620,72 @@ FW_roomOverview($) } pO "
    "; pO "
    "; + pO "
    "; - pO "
    "; - pO "

    "; - pO " "; - pO " "; - pO "
    "; - pO " "; + ############## + # LOGO + my $logofile = ($__ss ? "fhem_smallscreen.png" : "fhem.png"); + pO "
    "; + ############## + # MENU + my (@list1, @list2); + push(@list1, ""); push(@list2, ""); if(defined($data{FWEXT})) { foreach my $k (sort keys %{$data{FWEXT}}) { my $h = $data{FWEXT}{$k}; next if($h !~ m/HASH/ || !$h->{LINK} || !$h->{NAME}); - pO ""; + push(@list1, $h->{NAME}); + push(@list2, $__ME ."/".$h->{LINK}); } - pO ""; + push(@list1, ""); push(@list2, ""); } - $__room = "" if(!$__room); foreach my $r (sort keys %__rooms) { next if($r eq "hidden"); - pF " ", $r eq $__room ? " class=\"sel\"" : ""; - pO ""; + push @list1, $r; + push @list2, "$__ME?room=$r"; } - pF " ", "all" eq $__room ? " class=\"sel\"" : ""; - pO " "; - pO "
    {LINK} . "\">" - . $h->{NAME}. "
    $r
    All together
    "; + push(@list1, "All together"); push(@list2, "$__ME?room=all"); + push(@list1, ""); push(@list2, ""); + push(@list1, "Howto"); push(@list2, "$__ME/HOWTO.html"); + push(@list1, "FAQ"); push(@list2, "$__ME/faq.html"); + push(@list1, "Details"); push(@list2, "$__ME/commandref.html"); + push(@list1, "Examples"); push(@list2, "$__ME/cmd=style examples"); + push(@list1, "Edit files"); push(@list2, "$__ME/cmd=style list"); + push(@list1, ""); push(@list2, ""); - pO "
    "; - pO " "; - pO " "; - pO " "; - pO " "; - my $sel = ($cmd =~ m/examples/) ? " class=\"sel\"" : ""; - pO " "; - $sel = ($cmd =~ m/list/) ? " class=\"sel\"" : ""; - pO " "; - pO "
    Howto
    FAQ
    Details
    Examples
    Edit files
    "; - pO "
    "; + pO "
    "; + if($__ss) { + foreach(my $idx = 0; $idx < @list1; $idx++) { + if(!$list1[$idx]) { + pO "" if($idx); + pO ""; + foreach(my $idx = 0; $idx < @list1; $idx++) { + if(!$list1[$idx]) { + pO "
    " + if($idx", $list1[$idx] eq $__room ? " class=\"sel\"" : ""; + pO ""; + } + } + pO "
    $list1[$idx]
    "; + + } pO ""; - pO ""; } @@ -680,7 +710,7 @@ FW_showRoom() } pO "
    "; - pO "
    "; + pO "
    "; pO " "; } pO "
    "; # Need for equal width of subtables foreach my $type (sort keys %__types) { @@ -804,7 +834,7 @@ FW_showRoom() pO "
    "; - pO "
    "; # Empty line + pO "
    "; # Empty line } pO "
    "; pO "
    "; @@ -846,7 +876,7 @@ FW_logWrapper($) $path = FW_getAttr($d,"archivedir","") . "/$file" if(!-f $path); if(!open(FH, $path)) { - pO "
    $path: $!
    "; + pO "
    $path: $!
    "; return; } binmode (FH); # necessary for Windows @@ -855,13 +885,13 @@ FW_logWrapper($) $cnt =~ s//>/g; - pO "
    "; + pO "
    "; pO "
    $cnt
    "; pO "
    "; } else { - pO "
    "; + pO "
    "; pO "
    "; pO ""; + pO "
    Convert to weblink
    "; pO "
    "; pO ""; @@ -874,7 +904,7 @@ FW_logWrapper($) pO ""; } - pO "
    Convert to weblink
    "; pO "
    "; pO "
    "; @@ -1123,7 +1153,7 @@ FW_makeEdit($$$$) pO ""; - pO "
    " . FW_submit("cmd.${cmd}$name", "$cmd $name"); + pO "
    " . FW_submit("cmd.${cmd}$name", "$cmd $name"); pO "
    "; $eval = "
    $eval
    " if($eval =~ m/\n/); pO "
    $eval
    "; @@ -1310,13 +1340,15 @@ FW_style($$) push(@fl, "
    "); push(@fl, FW_fileList("$__dir/.*.css")); push(@fl, "
    "); + push(@fl, FW_fileList("$__dir/.*.js")); + push(@fl, "
    "); push(@fl, FW_fileList("$__dir/.*.gplot")); push(@fl, "
    "); push(@fl, FW_fileList("$__dir/.*html")); - pO "
    "; + pO "
    "; pO "
    "; - pO " $msg

    " if($msg); + pO " $msg

    " if($msg); pO " "; my $row = 0; foreach my $file (@fl) { @@ -1331,9 +1363,9 @@ FW_style($$) } elsif($a[1] eq "examples") { my @fl = FW_fileList("$__dir/example.*"); - pO "
    "; + pO "
    "; pO "
    "; - pO " $msg

    " if($msg); + pO " $msg

    " if($msg); pO " "; my $row = 0; foreach my $file (@fl) { @@ -1357,9 +1389,9 @@ FW_style($$) my $data = join("", ); close(FH); - pO "
    "; + pO "
    "; pO "
    "; - pO FW_submit("save", "Save $f") . "

    "; + pO FW_submit("save", "Save $f") . "

    "; pO FW_hidden("cmd", "style save $a[2]"); pO ""; @@ -1446,7 +1478,12 @@ FW_showWeblink($$$) $defs{$va[0]}{currentlogfile} =~ m,([^/]*)$,; $va[2] = $1; } - pO "
    "; + + if($__ss) { + pO "$d
    " + } else { + pO "
    "; + } my $wl = "&pos=" . join(";", map {"$_=$__pos{$_}"} keys %__pos); @@ -1459,9 +1496,11 @@ FW_showWeblink($$$) pO ""; } - pO ""; - pO "$d"; - pO "
    "; + if($__ss) { + pO "
    "; + } else { + pO "
    $d
    "; + } } } diff --git a/webfrontend/pgm2/98_SVG.pm b/webfrontend/pgm2/98_SVG.pm index a8739169a..1ac2f6856 100755 --- a/webfrontend/pgm2/98_SVG.pm +++ b/webfrontend/pgm2/98_SVG.pm @@ -101,8 +101,11 @@ SVG_render($$$$$$) for my $i (0..int(@ltitle)-1) { my $j = $i+1; my $t = $ltitle[$i]; - my $desc = sprintf("$t: Min:%g Max:%g Last:%g", + my $desc = ""; + if(defined($data{"min$j"}) && $data{"min$j"} ne "undef") { + $desc = sprintf("$t: Min:%g Max:%g Last:%g", $data{"min$j"}, $data{"max$j"}, $data{"currval$j"}); + } pO "$t"; diff --git a/webfrontend/pgm2/fhem_smallscreen.png b/webfrontend/pgm2/fhem_smallscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5de7fc8a49a292b540401949b031d58dd97e33 GIT binary patch literal 5944 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 literal 0 HcmV?d00001 diff --git a/webfrontend/pgm2/style.css b/webfrontend/pgm2/style.css index f15f6b60c..c5c62421e 100644 --- a/webfrontend/pgm2/style.css +++ b/webfrontend/pgm2/style.css @@ -1,7 +1,8 @@ -body { background-color: #FFFFE7;} -#left { position:absolute; top:20px; left:20px; width:140px; } -#hdr { position:absolute; top:10px; left:180px; } -#right { position:absolute; top:50px; left:180px; bottom:20px; right:10px; } +body { background-color: #FFFFE7;} +#logo { position:absolute; top:10px; left:20px; width:140px; } +#menu { position:absolute; top:120px;left:20px; width:140px; } +#hdr { position:absolute; top:10px; left:180px; } +#content { position:absolute; top:50px; left:180px; bottom:20px; right:10px; } a { color: #278727; } table.block { border:1px solid gray; width: 100%; background: #F8F8E0; } @@ -9,7 +10,6 @@ table.block tr.odd { background: #F0F0D8; } table.block tr.sel { background: #F0F0D8; } table { -moz-border-radius:8px; } - table#room { background: #D7FFFF; } table#room tr.sel { background: #A0FFFF; } diff --git a/webfrontend/pgm2/style_smallscreen.css b/webfrontend/pgm2/style_smallscreen.css new file mode 100644 index 000000000..0dacd872f --- /dev/null +++ b/webfrontend/pgm2/style_smallscreen.css @@ -0,0 +1,21 @@ +body { background-color: #FFFFE7;} +#logo { position:absolute; top:10px; left:10px; } +#menu { position:absolute; top:10px; left:85px; } +#hdr { position:absolute; top:40px; left:85px; } +#content { position:absolute; top:85px; left:10px; } + +a { color: #278727; } + +table.block { border:1px solid gray; width: 100%; background: #F8F8E0; } +table.block tr.odd { background: #F0F0D8; } +table.block tr.sel { background: #F0F0D8; } +table { -moz-border-radius:8px; } + +table#room { background: #D7FFFF; } +table#room tr.sel { background: #A0FFFF; } + +/* Customize specific devices */ +/* +table#FS20 { background: #FF8080; } +table#FS20 tr.odd { background: #E08080; } +*/