mirror of
https://github.com/fhem/fhem-mirror.git
synced 2024-11-22 02:59:49 +00:00
01_FHEMWEB.pm: parallel computing of non-embed SVG and other small changes (Forum #82351)
git-svn-id: https://svn.fhem.de/fhem/trunk@16985 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
97a34aa4bd
commit
35a1cfa800
@ -1,5 +1,6 @@
|
|||||||
# 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.
|
||||||
|
- change: 01_FHEMWEB.pm: default plotEmbed to 0 (Forum #82351)
|
||||||
- feature: 73_GardenaSmartBridge: 74_GeardenaSmartDevice: add support for
|
- feature: 73_GardenaSmartBridge: 74_GeardenaSmartDevice: add support for
|
||||||
Irrigation Control
|
Irrigation Control
|
||||||
- change: 98_feels_like.pm: Improved algorithms, fix reDEFINE
|
- change: 98_feels_like.pm: Improved algorithms, fix reDEFINE
|
||||||
|
@ -6,6 +6,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use TcpServerUtils;
|
use TcpServerUtils;
|
||||||
use HttpUtils;
|
use HttpUtils;
|
||||||
|
use Blocking;
|
||||||
use Time::HiRes qw(gettimeofday);
|
use Time::HiRes qw(gettimeofday);
|
||||||
|
|
||||||
#########################
|
#########################
|
||||||
@ -89,9 +90,7 @@ use vars qw($FW_userAgent); # user agent string
|
|||||||
|
|
||||||
$FW_formmethod = "post";
|
$FW_formmethod = "post";
|
||||||
|
|
||||||
my $FW_zlib_checked;
|
my %FW_use;
|
||||||
my $FW_use_zlib = 1;
|
|
||||||
my $FW_use_sha = 0;
|
|
||||||
my $FW_activateInform = 0;
|
my $FW_activateInform = 0;
|
||||||
my $FW_lastWebName = ""; # Name of last FHEMWEB instance, for caching
|
my $FW_lastWebName = ""; # Name of last FHEMWEB instance, for caching
|
||||||
my $FW_lastHashUpdate = 0;
|
my $FW_lastHashUpdate = 0;
|
||||||
@ -119,6 +118,7 @@ my $FW_headerlines; #
|
|||||||
my $FW_chash; # client fhem hash
|
my $FW_chash; # client fhem hash
|
||||||
my $FW_encoding="UTF-8";
|
my $FW_encoding="UTF-8";
|
||||||
my $FW_styleStamp=time();
|
my $FW_styleStamp=time();
|
||||||
|
my %FW_svgData;
|
||||||
|
|
||||||
|
|
||||||
#####################################
|
#####################################
|
||||||
@ -228,13 +228,21 @@ FHEMWEB_Initialize($)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
eval { require Digest::SHA; };
|
my %optMod = (
|
||||||
if($@) {
|
zlib => { mod=>"Compress::Zlib", txt=>"compressed HTTP transfer" },
|
||||||
Log 4, $@;
|
sha => { mod=>"Digest::SHA", txt=>"longpoll via websocket" },
|
||||||
Log 3, "FHEMWEB: Can't load Digest::SHA, ".
|
base64 => { mod=>"MIME::Base64", txt=>"parallel SVG computing" }
|
||||||
"longpoll via websocket is not available";
|
);
|
||||||
|
foreach my $mod (keys %optMod) {
|
||||||
|
eval "require $optMod{$mod}{mod}";
|
||||||
|
if($@) {
|
||||||
|
Log 4, $@;
|
||||||
|
Log 3, "FHEMWEB: Can't load $optMod{$mod}{mod}, ".
|
||||||
|
"$optMod{$mod}{txt} is not available";
|
||||||
|
} else {
|
||||||
|
$FW_use{$mod} = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$FW_use_sha = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#####################################
|
#####################################
|
||||||
@ -310,20 +318,6 @@ FW_Read($$)
|
|||||||
$FW_subdir = "";
|
$FW_subdir = "";
|
||||||
|
|
||||||
my $c = $hash->{CD};
|
my $c = $hash->{CD};
|
||||||
if(!$FW_zlib_checked) {
|
|
||||||
$FW_zlib_checked = 1;
|
|
||||||
$FW_use_zlib = AttrVal($FW_wname, "fwcompress", 1);
|
|
||||||
if($FW_use_zlib) {
|
|
||||||
eval { require Compress::Zlib; };
|
|
||||||
if($@) {
|
|
||||||
$FW_use_zlib = 0;
|
|
||||||
Log3 $FW_wname, 1, $@;
|
|
||||||
Log3 $FW_wname, 1,
|
|
||||||
"$FW_wname: Can't load Compress::Zlib, deactivating compression";
|
|
||||||
$attr{$FW_wname}{fwcompress} = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!$reread) {
|
if(!$reread) {
|
||||||
# Data from HTTP Client
|
# Data from HTTP Client
|
||||||
@ -478,7 +472,7 @@ FW_Read($$)
|
|||||||
$FW_CSRF = (defined($defs{$FW_wname}{CSRFTOKEN}) ?
|
$FW_CSRF = (defined($defs{$FW_wname}{CSRFTOKEN}) ?
|
||||||
"&fwcsrf=".$defs{$FW_wname}{CSRFTOKEN} : "");
|
"&fwcsrf=".$defs{$FW_wname}{CSRFTOKEN} : "");
|
||||||
|
|
||||||
if($FW_use_sha && $method eq 'GET' &&
|
if($FW_use{sha} && $method eq 'GET' &&
|
||||||
$FW_httpheader{Connection} && $FW_httpheader{Connection} =~ /Upgrade/i) {
|
$FW_httpheader{Connection} && $FW_httpheader{Connection} =~ /Upgrade/i) {
|
||||||
|
|
||||||
my $shastr = Digest::SHA::sha1_base64($FW_httpheader{'Sec-WebSocket-Key'}.
|
my $shastr = Digest::SHA::sha1_base64($FW_httpheader{'Sec-WebSocket-Key'}.
|
||||||
@ -504,7 +498,7 @@ FW_Read($$)
|
|||||||
|
|
||||||
$arg = "" if(!defined($arg));
|
$arg = "" if(!defined($arg));
|
||||||
Log3 $FW_wname, 4, "$name $method $arg; BUFLEN:".length($hash->{BUF});
|
Log3 $FW_wname, 4, "$name $method $arg; BUFLEN:".length($hash->{BUF});
|
||||||
my $pf = AttrVal($FW_wname, "plotfork", undef);
|
my $pf = AttrVal($FW_wname, "plotfork", 0);
|
||||||
if($pf) { # 0 disables
|
if($pf) { # 0 disables
|
||||||
# Process SVG rendering as a parallel process
|
# Process SVG rendering as a parallel process
|
||||||
my $p = $data{FWEXT};
|
my $p = $data{FWEXT};
|
||||||
@ -540,12 +534,22 @@ FW_Read($$)
|
|||||||
FW_closeConn($hash);
|
FW_closeConn($hash);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
return if($cacheable == -2); # async op, well be answered later
|
||||||
|
FW_finishRead($hash, $cacheable, $arg);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sub
|
||||||
|
FW_finishRead($$$)
|
||||||
|
{
|
||||||
|
my ($hash, $cacheable, $arg) = @_;
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
my $compressed = "";
|
my $compressed = "";
|
||||||
if($FW_RETTYPE =~ m/(text|xml|json|svg|script)/i &&
|
if($FW_RETTYPE =~ m/(text|xml|json|svg|script)/i &&
|
||||||
($FW_httpheader{"Accept-Encoding"} &&
|
($FW_httpheader{"Accept-Encoding"} &&
|
||||||
$FW_httpheader{"Accept-Encoding"} =~ m/gzip/) &&
|
$FW_httpheader{"Accept-Encoding"} =~ m/gzip/) &&
|
||||||
$FW_use_zlib) {
|
$FW_use{zlib}) {
|
||||||
utf8::encode($FW_RET)
|
utf8::encode($FW_RET)
|
||||||
if(utf8::is_utf8($FW_RET) && $FW_RET =~ m/[^\x00-\xFF]/ );
|
if(utf8::is_utf8($FW_RET) && $FW_RET =~ m/[^\x00-\xFF]/ );
|
||||||
eval { $FW_RET = Compress::Zlib::memGzip($FW_RET); };
|
eval { $FW_RET = Compress::Zlib::memGzip($FW_RET); };
|
||||||
@ -558,7 +562,7 @@ FW_Read($$)
|
|||||||
|
|
||||||
my $length = length($FW_RET);
|
my $length = length($FW_RET);
|
||||||
my $expires = ($cacheable?
|
my $expires = ($cacheable?
|
||||||
("Expires: ".FmtDateTimeRFC1123($now+900)."\r\n") : "");
|
("Expires: ".FmtDateTimeRFC1123($hash->{LASTACCESS}+900)."\r\n") : "");
|
||||||
Log3 $FW_wname, 4,
|
Log3 $FW_wname, 4,
|
||||||
"$FW_wname: $arg / RL:$length / $FW_RETTYPE / $compressed / $expires";
|
"$FW_wname: $arg / RL:$length / $FW_RETTYPE / $compressed / $expires";
|
||||||
if( ! FW_addToWritebuffer($hash,
|
if( ! FW_addToWritebuffer($hash,
|
||||||
@ -1025,7 +1029,7 @@ FW_answerCall($)
|
|||||||
my $csrf= ($FW_CSRF ? "fwcsrf='$defs{$FW_wname}{CSRFTOKEN}'" : "");
|
my $csrf= ($FW_CSRF ? "fwcsrf='$defs{$FW_wname}{CSRFTOKEN}'" : "");
|
||||||
my $gen = 'generated="'.(time()-1).'"';
|
my $gen = 'generated="'.(time()-1).'"';
|
||||||
my $lp = 'longpoll="'.AttrVal($FW_wname,"longpoll",
|
my $lp = 'longpoll="'.AttrVal($FW_wname,"longpoll",
|
||||||
$FW_use_sha && $FW_userAgent=~m/Chrome/ ? "websocket": 1).'"';
|
$FW_use{sha} && $FW_userAgent=~m/Chrome/ ? "websocket": 1).'"';
|
||||||
$FW_id = $FW_chash->{NR} if( !$FW_id );
|
$FW_id = $FW_chash->{NR} if( !$FW_id );
|
||||||
|
|
||||||
my $dataAttr = FW_dataAttr();
|
my $dataAttr = FW_dataAttr();
|
||||||
@ -1069,15 +1073,16 @@ FW_answerCall($)
|
|||||||
return $ret if($ret);
|
return $ret if($ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $srVal = 0;
|
||||||
if($cmd =~ m/^style /) { FW_style($cmd,undef); }
|
if($cmd =~ m/^style /) { FW_style($cmd,undef); }
|
||||||
elsif($FW_detail) { FW_doDetail($FW_detail); }
|
elsif($FW_detail) { FW_doDetail($FW_detail); }
|
||||||
elsif($FW_room) { FW_showRoom(); }
|
elsif($FW_room) { $srVal = FW_showRoom(); }
|
||||||
elsif(!defined($FW_cmdret) &&
|
elsif(!defined($FW_cmdret) &&
|
||||||
!$FW_contentFunc) {
|
!$FW_contentFunc) {
|
||||||
|
|
||||||
$FW_room = AttrVal($FW_wname, "defaultRoom", '');
|
$FW_room = AttrVal($FW_wname, "defaultRoom", '');
|
||||||
if($FW_room ne '') {
|
if($FW_room ne '') {
|
||||||
FW_showRoom();
|
$srVal = FW_showRoom();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
my $motd = AttrVal("global","motd","none");
|
my $motd = AttrVal("global","motd","none");
|
||||||
@ -1086,6 +1091,7 @@ FW_answerCall($)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return $srVal if($srVal);
|
||||||
FW_pO "</body></html>";
|
FW_pO "</body></html>";
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1810,7 +1816,7 @@ FW_sortIndex($)
|
|||||||
sub
|
sub
|
||||||
FW_showRoom()
|
FW_showRoom()
|
||||||
{
|
{
|
||||||
return if(!$FW_room);
|
return 0 if(!$FW_room);
|
||||||
|
|
||||||
%FW_hiddengroup = ();
|
%FW_hiddengroup = ();
|
||||||
foreach my $r (split(",",AttrVal($FW_wname, "hiddengroup", ""))) {
|
foreach my $r (split(",",AttrVal($FW_wname, "hiddengroup", ""))) {
|
||||||
@ -1898,15 +1904,60 @@ FW_showRoom()
|
|||||||
FW_pO "</table><br>";
|
FW_pO "</table><br>";
|
||||||
|
|
||||||
# Now the "atEnds"
|
# Now the "atEnds"
|
||||||
foreach my $d (sort { $sortIndex{$a} cmp $sortIndex{$b} } @atEnds) {
|
my $doBC = (AttrVal($FW_wname, "plotfork", 0) &&
|
||||||
|
AttrVal($FW_wname, "plotEmbed", 0) == 0);
|
||||||
|
my %res;
|
||||||
|
my $idx = 1;
|
||||||
|
@atEnds = sort { $sortIndex{$a} cmp $sortIndex{$b} } @atEnds;
|
||||||
|
foreach my $d (@atEnds) {
|
||||||
no strict "refs";
|
no strict "refs";
|
||||||
|
my $fn = $modules{$defs{$d}{TYPE}}{FW_summaryFn};
|
||||||
$extPage{group} = "atEnd";
|
$extPage{group} = "atEnd";
|
||||||
FW_pO &{$modules{$defs{$d}{TYPE}}{FW_summaryFn}}($FW_wname, $d,
|
$extPage{index} = $idx++;
|
||||||
$FW_room, \%extPage);
|
if($doBC && $defs{$d}{TYPE} eq "SVG" && $FW_use{base64}) {
|
||||||
|
BlockingCall(sub {
|
||||||
|
return "$FW_cname,$d,".
|
||||||
|
encode_base64(&{$fn}($FW_wname,$d,$FW_room,\%extPage),'');
|
||||||
|
}, undef, "FW_svgCollect");
|
||||||
|
} else {
|
||||||
|
$res{$d} = &{$fn}($FW_wname,$d,$FW_room,\%extPage);
|
||||||
|
}
|
||||||
use strict "refs";
|
use strict "refs";
|
||||||
}
|
}
|
||||||
|
return FW_svgDone(\%res, \@atEnds, undef);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub
|
||||||
|
FW_svgDone($$$)
|
||||||
|
{
|
||||||
|
my ($res, $atEnds, $delayedReturn) = @_;
|
||||||
|
|
||||||
|
if(int(keys %{$res}) != int(@{$atEnds})) {
|
||||||
|
$FW_svgData{$FW_cname} = { FW_RET=>$FW_RET, RES=>$res, ATENDS=>$atEnds };
|
||||||
|
return -2 ;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach my $d (@{$atEnds}) {
|
||||||
|
FW_pO $res->{$d};
|
||||||
|
}
|
||||||
FW_pO "</div>";
|
FW_pO "</div>";
|
||||||
FW_pO "</form>";
|
FW_pO "</form>";
|
||||||
|
FW_pO "</body></html>" if($delayedReturn);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub
|
||||||
|
FW_svgCollect($)
|
||||||
|
{
|
||||||
|
my ($cname,$d,$enc) = split(",",$_[0],3);
|
||||||
|
my $h = $FW_svgData{$cname};
|
||||||
|
my ($res, $atEnds) = ($h->{RES}, $h->{ATENDS});
|
||||||
|
$res->{$d} = decode_base64($enc);
|
||||||
|
return if(int(keys %{$res}) != int(@{$atEnds}));
|
||||||
|
$FW_RET = $h->{FW_RET};
|
||||||
|
delete($FW_svgData{$cname});
|
||||||
|
FW_svgDone($res, $atEnds, 1);
|
||||||
|
FW_finishRead($defs{$cname}, 0, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
# Room1:col1group1,col1group2|col2group1,col2group2 Room2:...
|
# Room1:col1group1,col1group2|col2group1,col2group2 Room2:...
|
||||||
@ -2021,7 +2072,7 @@ FW_returnFileAsStream($$$$$)
|
|||||||
$etag = defined($etag) ? "ETag: \"$etag\"\r\n" : "";
|
$etag = defined($etag) ? "ETag: \"$etag\"\r\n" : "";
|
||||||
my $expires = $cacheable ? ("Expires: ".gmtime(time()+900)." GMT\r\n"): "";
|
my $expires = $cacheable ? ("Expires: ".gmtime(time()+900)." GMT\r\n"): "";
|
||||||
my $compr = ($FW_httpheader{"Accept-Encoding"} &&
|
my $compr = ($FW_httpheader{"Accept-Encoding"} &&
|
||||||
$FW_httpheader{"Accept-Encoding"} =~ m/gzip/ && $FW_use_zlib) ?
|
$FW_httpheader{"Accept-Encoding"} =~ m/gzip/ && $FW_use{zlib}) ?
|
||||||
"Content-Encoding: gzip\r\n" : "";
|
"Content-Encoding: gzip\r\n" : "";
|
||||||
TcpServer_WriteBlocking($FW_chash, "HTTP/1.1 200 OK\r\n".
|
TcpServer_WriteBlocking($FW_chash, "HTTP/1.1 200 OK\r\n".
|
||||||
$compr . $expires . $FW_headerlines . $etag .
|
$compr . $expires . $FW_headerlines . $etag .
|
||||||
@ -2608,7 +2659,7 @@ FW_Attr(@)
|
|||||||
|
|
||||||
if($attrName eq "longpoll" && $type eq "set" && $param[0] eq "websocket") {
|
if($attrName eq "longpoll" && $type eq "set" && $param[0] eq "websocket") {
|
||||||
return "$devName: Could not load Digest::SHA on startup, no websocket"
|
return "$devName: Could not load Digest::SHA on startup, no websocket"
|
||||||
if(!$FW_use_sha);
|
if(!$FW_use{sha});
|
||||||
}
|
}
|
||||||
|
|
||||||
return $retMsg;
|
return $retMsg;
|
||||||
@ -3732,25 +3783,18 @@ FW_widgetOverride($$)
|
|||||||
</li><br>
|
</li><br>
|
||||||
|
|
||||||
<a name="plotEmbed"></a>
|
<a name="plotEmbed"></a>
|
||||||
<li>plotEmbed 0<br>
|
<li>plotEmbed<br>
|
||||||
SVG plots are rendered as part of <embed> tags, as in the past
|
If set (to 1), SVG plots will be rendered as part of <embed>
|
||||||
this was the only way to display SVG, and it allows to render them in
|
tags, as in the past this was the only way to display SVG. Setting
|
||||||
parallel, see plotfork.
|
plotEmbed to 0 (the default) will render SVG in-place.<br>
|
||||||
Setting plotEmbed to 0 will render SVG in-place, but as a side-effect
|
|
||||||
makes the plotfork attribute meaningless.<br>
|
|
||||||
</li><br>
|
</li><br>
|
||||||
|
|
||||||
<a name="plotfork"></a>
|
<a name="plotfork"></a>
|
||||||
<li>plotfork [<Δp>]<br>
|
<li>plotfork<br>
|
||||||
If set to a nonzero value, run part of the processing (e.g. <a
|
If set to a nonzero value, run part of the processing (e.g. <a
|
||||||
href="#SVG">SVG</a> plot generation or <a href="#RSS">RSS</a> feeds) in
|
href="#SVG">SVG</a> plot generation or <a href="#RSS">RSS</a> feeds) in
|
||||||
parallel processes. Actually, child processes are forked whose
|
parallel processes, default is 0. Note: do not use it on systems with
|
||||||
priorities are the FHEM process' priority plus Δp.
|
small memory footprint.
|
||||||
Higher values mean lower priority. e.g. use Δp= 10 to renice the
|
|
||||||
child processes and provide more CPU power to the main FHEM process.
|
|
||||||
Δp is optional and defaults to 0.<br>
|
|
||||||
Note: do not use it
|
|
||||||
on Windows and on systems with small memory footprint.
|
|
||||||
</li><br>
|
</li><br>
|
||||||
|
|
||||||
<a name="plotmode"></a>
|
<a name="plotmode"></a>
|
||||||
@ -4439,24 +4483,17 @@ FW_widgetOverride($$)
|
|||||||
|
|
||||||
<a name="plotEmbed"></a>
|
<a name="plotEmbed"></a>
|
||||||
<li>plotEmbed 0<br>
|
<li>plotEmbed 0<br>
|
||||||
SVG Grafiken werden als Teil der <embed> Tags dargestellt, da
|
Falls gesetzt (auf 1), dann werden SVG Grafiken mit <embed> Tags
|
||||||
früher das der einzige Weg war SVG darzustellen, weiterhin
|
gerendert, da auf älteren Browsern das die einzige
|
||||||
erlaubt es das parallele Berechnen via plotfork (s.o.)
|
Möglichkeit war, SVG dastellen zu können. Falls 0 (die
|
||||||
Falls plotEmbed auf 0 gesetzt wird, dann werden die SVG Grafiken als
|
Voreinstellung), dann werden die SVG Grafiken "in-place" gezeichnet.
|
||||||
Teil der HTML-Seite generiert, was leider das plotfork Attribut
|
|
||||||
wirkungslos macht.
|
|
||||||
</li><br>
|
</li><br>
|
||||||
|
|
||||||
<a name="plotfork"></a>
|
<a name="plotfork"></a>
|
||||||
<li>plotfork<br>
|
<li>plotfork<br>
|
||||||
Normalerweise wird die Ploterstellung im Hauptprozess ausgeführt,
|
Falls gesetzt, dann werden bestimmte Berechnungen (z.Bsp. SVG und RSS)
|
||||||
FHEM wird wärend dieser Zeit nicht auf andere Ereignisse
|
auf nebenläufige Prozesse verteilt. Voreinstellung ist 0. Achtung:
|
||||||
reagieren.
|
nicht auf Systemen mit wenig Hauptspeicher verwenden.
|
||||||
Falls dieses Attribut auf einen nicht 0 Wert gesetzt ist, dann wird die
|
|
||||||
Berechnung in weitere Prozesse ausgelagert. Das kann die Berechnung auf
|
|
||||||
Rechnern mit mehreren Prozessoren beschleunigen, allerdings kann es auf
|
|
||||||
Rechnern mit wenig Speicher (z.Bsp. FRITZ!Box 7390) zum automatischen
|
|
||||||
Abschuss des FHEM Prozesses durch das OS führen.
|
|
||||||
</li><br>
|
</li><br>
|
||||||
|
|
||||||
<a name="plotmode"></a>
|
<a name="plotmode"></a>
|
||||||
|
@ -199,8 +199,7 @@ SVG_getplotsize($)
|
|||||||
sub
|
sub
|
||||||
SVG_isEmbed($)
|
SVG_isEmbed($)
|
||||||
{
|
{
|
||||||
return (AttrVal($FW_wname, "plotEmbed", 1));
|
return AttrVal($FW_wname, "plotEmbed", 0);
|
||||||
# $FW_userAgent !~ m/(iPhone|iPad|iPod).*OS (8|9)/));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub
|
sub
|
||||||
@ -222,16 +221,13 @@ SVG_FwFn($$$$)
|
|||||||
my $hash = $defs{$d};
|
my $hash = $defs{$d};
|
||||||
my $ret = "";
|
my $ret = "";
|
||||||
|
|
||||||
if(!$pageHash || !$pageHash->{jsLoaded}) {
|
my $isFirst = (!$pageHash || !$pageHash->{index} || $pageHash->{index} == 1);
|
||||||
$ret .= "<script type='text/javascript' src='$FW_ME/pgm2/svg.js'></script>";
|
$ret .= "<script type='text/javascript' src='$FW_ME/pgm2/svg.js'></script>"
|
||||||
$pageHash->{jsLoaded} = 1 if($pageHash);
|
if($isFirst);
|
||||||
}
|
|
||||||
|
|
||||||
# plots navigation buttons
|
# plots navigation buttons
|
||||||
my $pm = AttrVal($d,"plotmode",$FW_plotmode);
|
my $pm = AttrVal($d,"plotmode",$FW_plotmode);
|
||||||
if((!$pageHash || !$pageHash->{buttons}) &&
|
if($isFirst) {
|
||||||
AttrVal($d, "fixedrange", "x") !~ m/^[ 0-9:-]*$/) {
|
|
||||||
|
|
||||||
$ret .= '<div class="SVGlabel" data-name="svgZoomControl">';
|
$ret .= '<div class="SVGlabel" data-name="svgZoomControl">';
|
||||||
$ret .= SVG_zoomLink("zoom=-1", "Zoom-in", "zoom in");
|
$ret .= SVG_zoomLink("zoom=-1", "Zoom-in", "zoom in");
|
||||||
$ret .= SVG_zoomLink("zoom=1", "Zoom-out","zoom out");
|
$ret .= SVG_zoomLink("zoom=1", "Zoom-out","zoom out");
|
||||||
@ -243,34 +239,6 @@ SVG_FwFn($$$$)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if($pm eq "jsSVG") {
|
|
||||||
my @d=split(":",$defs{$d}{DEF});
|
|
||||||
my ($err, @svgplotfile) = FileRead("$FW_gplotdir/$d[1].gplot");
|
|
||||||
($err, @svgplotfile) = FileRead("$FW_gplotdir/template.gplot") if($err);
|
|
||||||
my $gplot = join("", @svgplotfile);
|
|
||||||
$gplot =~ s/'/'/g;
|
|
||||||
my %webattrflt = ( endPlotNow=>1, endPlotToday=>1, plotmode=>1,
|
|
||||||
plotsize=>1, nrAxis=>1, stylesheetPrefix=>1 );
|
|
||||||
if(!$pageHash || !$pageHash->{jssvgLoaded}) {
|
|
||||||
$ret .=
|
|
||||||
"<script type='text/javascript' src='$FW_ME/pgm2/jsSVG.js'></script>";
|
|
||||||
$pageHash->{jssvgLoaded} = 1 if($pageHash);
|
|
||||||
}
|
|
||||||
|
|
||||||
SVG_calcOffsets($d[0], $d);
|
|
||||||
$ret .= "<div id='jsSVG_$d' class='jsSVG' ".
|
|
||||||
"data-webAttr='".jsSVG_getAttrs($FW_wname, \%webattrflt)."' ".
|
|
||||||
"data-svgAttr='".jsSVG_getAttrs($d)."' ".
|
|
||||||
"data-svgName='".$d."' ".
|
|
||||||
"data-from='".$SVG_devs{$d[0]}{from}."' ".
|
|
||||||
"data-to='" .$SVG_devs{$d[0]}{to} ."' ".
|
|
||||||
"data-gplotFile='$gplot' source='$d[0]'>".
|
|
||||||
"</div>";
|
|
||||||
$ret .= (SVG_PEdit($FW_wname,$d,$room,$pageHash) . "<br>")
|
|
||||||
if(!$pageHash);
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $arg="$FW_ME/SVG_showLog?dev=$d".
|
my $arg="$FW_ME/SVG_showLog?dev=$d".
|
||||||
"&logdev=$hash->{LOGDEVICE}".
|
"&logdev=$hash->{LOGDEVICE}".
|
||||||
"&gplotfile=$hash->{GPLOTFILE}".
|
"&gplotfile=$hash->{GPLOTFILE}".
|
||||||
|
@ -122,7 +122,7 @@ BlockingStart(;$)
|
|||||||
BC_searchTelnet($curr && $curr->{fn} ? $curr->{fn}: "BlockingStart");
|
BC_searchTelnet($curr && $curr->{fn} ? $curr->{fn}: "BlockingStart");
|
||||||
|
|
||||||
my $chld_alive = 0;
|
my $chld_alive = 0;
|
||||||
my $max = AttrVal('global', 'blockingCallMax', 0);
|
my $max = AttrVal('global', 'blockingCallMax', 32);
|
||||||
|
|
||||||
for my $bpid (sort { $a <=> $b} keys %BC_hash) {
|
for my $bpid (sort { $a <=> $b} keys %BC_hash) {
|
||||||
my $h = $BC_hash{$bpid};
|
my $h = $BC_hash{$bpid};
|
||||||
@ -131,7 +131,7 @@ BlockingStart(;$)
|
|||||||
if($^O =~ m/Win/) {
|
if($^O =~ m/Win/) {
|
||||||
# MaxNr of concurrent forked processes @Win is 64, and must use wait as
|
# MaxNr of concurrent forked processes @Win is 64, and must use wait as
|
||||||
# $SIG{CHLD} = 'IGNORE' does not work.
|
# $SIG{CHLD} = 'IGNORE' does not work.
|
||||||
wait if(!$h->{telnet} || !$defs{$h->{telnet}});
|
wait if($h->{terminated});
|
||||||
} else {
|
} else {
|
||||||
use POSIX ":sys_wait_h";
|
use POSIX ":sys_wait_h";
|
||||||
waitpid(-1, WNOHANG); # Forum #58867
|
waitpid(-1, WNOHANG); # Forum #58867
|
||||||
|
@ -30,7 +30,7 @@ TcpServer_Open($$$)
|
|||||||
Domain => ($hash->{IPV6} ? AF_INET6() : AF_UNSPEC), # Linux bug
|
Domain => ($hash->{IPV6} ? AF_INET6() : AF_UNSPEC), # Linux bug
|
||||||
LocalHost => $lh,
|
LocalHost => $lh,
|
||||||
LocalPort => $port,
|
LocalPort => $port,
|
||||||
Listen => 10,
|
Listen => 32, # For Windows
|
||||||
Blocking => ($^O =~ /Win/ ? 1 : 0), # Needed for .WRITEBUFFER@darwin
|
Blocking => ($^O =~ /Win/ ? 1 : 0), # Needed for .WRITEBUFFER@darwin
|
||||||
ReuseAddr => 1
|
ReuseAddr => 1
|
||||||
);
|
);
|
||||||
|
@ -1,30 +1,30 @@
|
|||||||
#Sun Jan 4 16:24:11 2015
|
#Sun Jul 15 15:31:10 2018
|
||||||
{
|
{
|
||||||
'lcCinema' => {
|
'lcCinema' => {
|
||||||
|
'AllOff' => {
|
||||||
|
'Screen' => 'up',
|
||||||
|
'ReadingLight' => 'off',
|
||||||
|
'Projector' => 'off',
|
||||||
|
'CeilingLight' => 'off',
|
||||||
|
'TV' => 'off'
|
||||||
|
},
|
||||||
'Break' => {
|
'Break' => {
|
||||||
'CeilingLight' => 'dim37%',
|
'ReadingLight' => 'dim37%',
|
||||||
'ReadingLight' => 'dim37%'
|
'CeilingLight' => 'dim37%'
|
||||||
},
|
},
|
||||||
'Cinema' => {
|
'Cinema' => {
|
||||||
'CeilingLight' => 'off',
|
'CeilingLight' => 'off',
|
||||||
'Projector' => 'on',
|
'TV' => 'off',
|
||||||
'Screen' => 'down',
|
'Screen' => 'down',
|
||||||
'ReadingLight' => 'off',
|
'ReadingLight' => 'off',
|
||||||
'TV' => 'off'
|
'Projector' => 'on'
|
||||||
},
|
},
|
||||||
'WatchTV' => {
|
'WatchTV' => {
|
||||||
'CeilingLight' => 'off',
|
|
||||||
'Projector' => 'off',
|
|
||||||
'Screen' => 'up',
|
'Screen' => 'up',
|
||||||
'ReadingLight' => 'dim12%',
|
'ReadingLight' => 'dim12%',
|
||||||
|
'Projector' => 'off',
|
||||||
|
'CeilingLight' => 'off',
|
||||||
'TV' => 'on'
|
'TV' => 'on'
|
||||||
},
|
}
|
||||||
'AllOff' => {
|
|
||||||
'CeilingLight' => 'off',
|
|
||||||
'Projector' => 'off',
|
|
||||||
'Screen' => 'up',
|
|
||||||
'ReadingLight' => 'off',
|
|
||||||
'TV' => 'off'
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#Sun Jan 4 16:24:11 2015
|
#Sun Jul 15 15:31:10 2018
|
||||||
setstate Alarm on
|
setstate Alarm on
|
||||||
setstate Alarm 2015-01-04 16:22:21 state on
|
setstate Alarm 2015-01-04 16:22:21 state on
|
||||||
setstate AllLights on
|
setstate AllLights on
|
||||||
@ -6,10 +6,11 @@ setstate AllLights 2015-01-04 16:22:04 LastDevice Alarm
|
|||||||
setstate AllLights 2015-01-04 16:22:04 LastDevice_Abs Alarm
|
setstate AllLights 2015-01-04 16:22:04 LastDevice_Abs Alarm
|
||||||
setstate AllLights 2015-01-04 16:22:04 state undefined
|
setstate AllLights 2015-01-04 16:22:04 state undefined
|
||||||
setstate AllResidentsAway active
|
setstate AllResidentsAway active
|
||||||
|
setstate AllResidentsAway 2018-07-15 15:27:23 state active
|
||||||
setstate CT off
|
setstate CT off
|
||||||
setstate CT 2015-01-03 01:10:50 ct 3703
|
setstate CT 2015-01-03 01:10:50 ct 3703
|
||||||
setstate CT 2015-01-04 13:30:52 lastCmd off
|
setstate CT 2015-01-04 13:30:52 lastCmd off
|
||||||
setstate CT 2015-01-04 16:22:04 state off
|
setstate CT 2018-07-15 15:27:23 state off
|
||||||
setstate CeilingLight dim0%
|
setstate CeilingLight dim0%
|
||||||
setstate CeilingLight 2015-01-04 16:22:40 state off
|
setstate CeilingLight 2015-01-04 16:22:40 state off
|
||||||
setstate Cellar T: 21.1 H: 54.6
|
setstate Cellar T: 21.1 H: 54.6
|
||||||
@ -30,7 +31,7 @@ setstate Garden 2013-08-13 15:03:17 israining no
|
|||||||
setstate Garden 2013-08-13 15:03:17 rain 81.9
|
setstate Garden 2013-08-13 15:03:17 rain 81.9
|
||||||
setstate Garden 2013-08-13 15:03:17 rain_raw 321
|
setstate Garden 2013-08-13 15:03:17 rain_raw 321
|
||||||
setstate Garden 2013-08-13 15:03:17 rain_raw_adj 321
|
setstate Garden 2013-08-13 15:03:17 rain_raw_adj 321
|
||||||
setstate Garden 2015-01-04 16:19:04 state defined
|
setstate Garden 2018-07-15 15:27:23 state defined
|
||||||
setstate Garden 2013-08-13 15:03:17 temperature 18.3
|
setstate Garden 2013-08-13 15:03:17 temperature 18.3
|
||||||
setstate Garden 2013-08-13 15:03:17 tsecs 1376805797
|
setstate Garden 2013-08-13 15:03:17 tsecs 1376805797
|
||||||
setstate Garden 2013-08-13 15:03:17 unknown1 a
|
setstate Garden 2013-08-13 15:03:17 unknown1 a
|
||||||
@ -42,6 +43,7 @@ setstate Livingroom 2015-01-04 16:22:21 state on
|
|||||||
setstate Log.Cellar active
|
setstate Log.Cellar active
|
||||||
setstate Log.Dewpoint active
|
setstate Log.Dewpoint active
|
||||||
setstate Log.Garden active
|
setstate Log.Garden active
|
||||||
|
setstate Log.Predicted active
|
||||||
setstate Logfile active
|
setstate Logfile active
|
||||||
setstate Office on
|
setstate Office on
|
||||||
setstate Office 2015-01-04 16:22:21 state on
|
setstate Office 2015-01-04 16:22:21 state on
|
||||||
@ -53,32 +55,33 @@ setstate RGB off
|
|||||||
setstate RGB 2015-01-04 12:55:47 hue 220
|
setstate RGB 2015-01-04 12:55:47 hue 220
|
||||||
setstate RGB 2015-01-04 13:30:54 lastCmd off
|
setstate RGB 2015-01-04 13:30:54 lastCmd off
|
||||||
setstate RGB 2015-01-04 12:55:47 rgb 0054FF
|
setstate RGB 2015-01-04 12:55:47 rgb 0054FF
|
||||||
setstate RGB 2015-01-04 16:22:04 state off
|
setstate RGB 2018-07-15 15:27:23 state off
|
||||||
setstate ReadingLight dim0%
|
setstate ReadingLight dim0%
|
||||||
setstate ReadingLight 2015-01-04 16:22:40 state off
|
setstate ReadingLight 2015-01-04 16:22:40 state off
|
||||||
setstate ResidentsComeHome active
|
setstate ResidentsComeHome active
|
||||||
|
setstate ResidentsComeHome 2018-07-15 15:27:23 state active
|
||||||
setstate SVG_01_Garden initialized
|
setstate SVG_01_Garden initialized
|
||||||
setstate SVG_02_Cellar initialized
|
setstate SVG_02_Cellar initialized
|
||||||
setstate SVG_03_Dewpoint initialized
|
setstate SVG_03_Dewpoint initialized
|
||||||
|
setstate SVG_04_Sun initialized
|
||||||
|
setstate SVG_05_Polar initialized
|
||||||
setstate Screen up
|
setstate Screen up
|
||||||
setstate Screen 2015-01-04 16:22:40 state up
|
setstate Screen 2015-01-04 16:22:40 state up
|
||||||
setstate TV off
|
setstate TV off
|
||||||
setstate TV 2015-01-04 16:22:40 state off
|
setstate TV 2015-01-04 16:22:40 state off
|
||||||
setstate anyViews 2015-01-04 16:24:11 lockstate 0
|
setstate Weather.weblink initialized
|
||||||
setstate anyViews 2015-01-04 16:19:04 state Initialized
|
|
||||||
setstate anyViews_weblink initialized
|
|
||||||
setstate autocreate active
|
setstate autocreate active
|
||||||
setstate colorInit 2015-01-04 16:19:04
|
setstate colorInit 2018-07-15 15:27:23
|
||||||
|
setstate colorInit 2018-07-15 15:27:23 state active
|
||||||
setstate dew_all active
|
setstate dew_all active
|
||||||
setstate eventTypes active
|
setstate eventTypes active
|
||||||
setstate global <no definition>
|
setstate global no definition
|
||||||
|
|
||||||
setstate lcCinema AllOff
|
|
||||||
setstate lcCinema 2015-01-04 16:22:40 state AllOff
|
setstate lcCinema 2015-01-04 16:22:40 state AllOff
|
||||||
setstate outdoorNotifier 2015-01-04 16:22:21
|
setstate outdoorNotifier active
|
||||||
|
setstate outdoorNotifier 2018-07-15 15:27:23 state active
|
||||||
setstate rg_Guest1 none
|
setstate rg_Guest1 none
|
||||||
setstate rg_Guest1 2015-01-04 16:19:19 durTimerAbsence 00:00:00
|
setstate rg_Guest1 2018-07-15 15:30:38 durTimerAbsence 38640:21:18
|
||||||
setstate rg_Guest1 2015-01-04 16:19:19 durTimerAbsence_cr 0
|
setstate rg_Guest1 2018-07-15 15:30:38 durTimerAbsence_cr 2318421
|
||||||
setstate rg_Guest1 2015-01-04 16:19:19 durTimerPresence 00:00:00
|
setstate rg_Guest1 2015-01-04 16:19:19 durTimerPresence 00:00:00
|
||||||
setstate rg_Guest1 2015-01-04 16:19:19 durTimerPresence_cr 0
|
setstate rg_Guest1 2015-01-04 16:19:19 durTimerPresence_cr 0
|
||||||
setstate rg_Guest1 2015-01-04 16:19:19 durTimerSleep 00:00:00
|
setstate rg_Guest1 2015-01-04 16:19:19 durTimerSleep 00:00:00
|
||||||
@ -99,8 +102,8 @@ setstate rg_Guest1 2014-02-16 14:09:20 presence absent
|
|||||||
setstate rg_Guest1 2014-02-16 14:09:20 state none
|
setstate rg_Guest1 2014-02-16 14:09:20 state none
|
||||||
setstate rg_Guest1 2014-02-15 16:16:27 wayhome 0
|
setstate rg_Guest1 2014-02-15 16:16:27 wayhome 0
|
||||||
setstate rg_Guest2 none
|
setstate rg_Guest2 none
|
||||||
setstate rg_Guest2 2015-01-04 16:19:19 durTimerAbsence 00:00:00
|
setstate rg_Guest2 2018-07-15 15:30:38 durTimerAbsence 38640:29:53
|
||||||
setstate rg_Guest2 2015-01-04 16:19:19 durTimerAbsence_cr 0
|
setstate rg_Guest2 2018-07-15 15:30:38 durTimerAbsence_cr 2318430
|
||||||
setstate rg_Guest2 2015-01-04 16:19:19 durTimerPresence 00:00:00
|
setstate rg_Guest2 2015-01-04 16:19:19 durTimerPresence 00:00:00
|
||||||
setstate rg_Guest2 2015-01-04 16:19:19 durTimerPresence_cr 0
|
setstate rg_Guest2 2015-01-04 16:19:19 durTimerPresence_cr 0
|
||||||
setstate rg_Guest2 2015-01-04 16:19:19 durTimerSleep 00:00:00
|
setstate rg_Guest2 2015-01-04 16:19:19 durTimerSleep 00:00:00
|
||||||
@ -121,6 +124,12 @@ setstate rg_Guest2 2014-02-16 14:00:46 presence absent
|
|||||||
setstate rg_Guest2 2014-02-16 14:01:22 state none
|
setstate rg_Guest2 2014-02-16 14:01:22 state none
|
||||||
setstate rg_Guest2 2014-02-15 16:16:29 wayhome 0
|
setstate rg_Guest2 2014-02-15 16:16:29 wayhome 0
|
||||||
setstate rgr_Children home
|
setstate rgr_Children home
|
||||||
|
setstate rgr_Children 2018-07-15 15:19:54 durTimerAbsence 00:00:00
|
||||||
|
setstate rgr_Children 2018-07-15 15:19:54 durTimerAbsence_cr 0
|
||||||
|
setstate rgr_Children 2018-07-15 15:30:38 durTimerPresence 38639:59:33
|
||||||
|
setstate rgr_Children 2018-07-15 15:30:38 durTimerPresence_cr 2318400
|
||||||
|
setstate rgr_Children 2018-07-15 15:19:54 durTimerSleep 00:00:00
|
||||||
|
setstate rgr_Children 2018-07-15 15:19:54 durTimerSleep_cr 0
|
||||||
setstate rgr_Children 2015-01-04 16:19:19 lastActivity gone
|
setstate rgr_Children 2015-01-04 16:19:19 lastActivity gone
|
||||||
setstate rgr_Children 2015-01-04 16:19:19 lastActivityBy Son
|
setstate rgr_Children 2015-01-04 16:19:19 lastActivityBy Son
|
||||||
setstate rgr_Children 2014-02-16 14:31:05 lastArrival 2014-02-16 14:31:05
|
setstate rgr_Children 2014-02-16 14:31:05 lastArrival 2014-02-16 14:31:05
|
||||||
@ -145,6 +154,12 @@ setstate rgr_Children 2014-02-16 14:58:01 residentsTotalPresent 1
|
|||||||
setstate rgr_Children 2014-02-15 16:16:25 residentsTotalWayhome 0
|
setstate rgr_Children 2014-02-15 16:16:25 residentsTotalWayhome 0
|
||||||
setstate rgr_Children 2014-02-17 20:45:12 state home
|
setstate rgr_Children 2014-02-17 20:45:12 state home
|
||||||
setstate rgr_Guests none
|
setstate rgr_Guests none
|
||||||
|
setstate rgr_Guests 2018-07-15 15:30:38 durTimerAbsence 38640:21:18
|
||||||
|
setstate rgr_Guests 2018-07-15 15:30:38 durTimerAbsence_cr 2318421
|
||||||
|
setstate rgr_Guests 2018-07-15 15:19:54 durTimerPresence 00:00:00
|
||||||
|
setstate rgr_Guests 2018-07-15 15:19:54 durTimerPresence_cr 0
|
||||||
|
setstate rgr_Guests 2018-07-15 15:19:54 durTimerSleep 00:00:00
|
||||||
|
setstate rgr_Guests 2018-07-15 15:19:54 durTimerSleep_cr 0
|
||||||
setstate rgr_Guests 2014-02-16 14:09:20 lastActivity none
|
setstate rgr_Guests 2014-02-16 14:09:20 lastActivity none
|
||||||
setstate rgr_Guests 2014-02-16 14:09:20 lastActivityBy Guests
|
setstate rgr_Guests 2014-02-16 14:09:20 lastActivityBy Guests
|
||||||
setstate rgr_Guests 2014-02-16 14:09:17 lastArrival 2014-02-16 14:09:17
|
setstate rgr_Guests 2014-02-16 14:09:17 lastArrival 2014-02-16 14:09:17
|
||||||
@ -166,6 +181,12 @@ setstate rgr_Guests 2014-02-16 14:09:20 residentsTotalPresent 0
|
|||||||
setstate rgr_Guests 2014-02-15 16:16:27 residentsTotalWayhome 0
|
setstate rgr_Guests 2014-02-15 16:16:27 residentsTotalWayhome 0
|
||||||
setstate rgr_Guests 2014-02-16 14:09:20 state none
|
setstate rgr_Guests 2014-02-16 14:09:20 state none
|
||||||
setstate rgr_Parents home
|
setstate rgr_Parents home
|
||||||
|
setstate rgr_Parents 2018-07-15 15:19:54 durTimerAbsence 00:00:00
|
||||||
|
setstate rgr_Parents 2018-07-15 15:19:54 durTimerAbsence_cr 0
|
||||||
|
setstate rgr_Parents 2018-07-15 15:30:38 durTimerPresence 38640:14:21
|
||||||
|
setstate rgr_Parents 2018-07-15 15:30:38 durTimerPresence_cr 2318414
|
||||||
|
setstate rgr_Parents 2018-07-15 15:19:54 durTimerSleep 00:00:00
|
||||||
|
setstate rgr_Parents 2018-07-15 15:19:54 durTimerSleep_cr 0
|
||||||
setstate rgr_Parents 2015-01-04 16:19:19 lastActivity gone
|
setstate rgr_Parents 2015-01-04 16:19:19 lastActivity gone
|
||||||
setstate rgr_Parents 2015-01-04 16:19:19 lastActivityBy Father
|
setstate rgr_Parents 2015-01-04 16:19:19 lastActivityBy Father
|
||||||
setstate rgr_Parents 2014-02-16 14:16:17 lastArrival 2014-02-16 14:16:17
|
setstate rgr_Parents 2014-02-16 14:16:17 lastArrival 2014-02-16 14:16:17
|
||||||
@ -190,6 +211,12 @@ setstate rgr_Parents 2014-02-16 14:26:52 residentsTotalPresent 1
|
|||||||
setstate rgr_Parents 2014-02-15 16:13:39 residentsTotalWayhome 0
|
setstate rgr_Parents 2014-02-15 16:13:39 residentsTotalWayhome 0
|
||||||
setstate rgr_Parents 2014-02-16 14:16:17 state home
|
setstate rgr_Parents 2014-02-16 14:16:17 state home
|
||||||
setstate rgr_Residents home
|
setstate rgr_Residents home
|
||||||
|
setstate rgr_Residents 2018-07-15 15:19:54 durTimerAbsence 00:00:00
|
||||||
|
setstate rgr_Residents 2018-07-15 15:19:54 durTimerAbsence_cr 0
|
||||||
|
setstate rgr_Residents 2018-07-15 15:30:38 durTimerPresence 38640:14:21
|
||||||
|
setstate rgr_Residents 2018-07-15 15:30:38 durTimerPresence_cr 2318414
|
||||||
|
setstate rgr_Residents 2018-07-15 15:19:54 durTimerSleep 00:00:00
|
||||||
|
setstate rgr_Residents 2018-07-15 15:19:54 durTimerSleep_cr 0
|
||||||
setstate rgr_Residents 2015-01-04 16:19:19 lastActivity gone
|
setstate rgr_Residents 2015-01-04 16:19:19 lastActivity gone
|
||||||
setstate rgr_Residents 2015-01-04 16:19:19 lastActivityBy Son
|
setstate rgr_Residents 2015-01-04 16:19:19 lastActivityBy Son
|
||||||
setstate rgr_Residents 2014-02-16 14:16:17 lastArrival 2014-02-16 14:16:17
|
setstate rgr_Residents 2014-02-16 14:16:17 lastArrival 2014-02-16 14:16:17
|
||||||
@ -216,8 +243,8 @@ setstate rgr_Residents 2014-02-16 14:16:17 state home
|
|||||||
setstate rr_Baby home
|
setstate rr_Baby home
|
||||||
setstate rr_Baby 2015-01-04 16:19:19 durTimerAbsence 00:00:00
|
setstate rr_Baby 2015-01-04 16:19:19 durTimerAbsence 00:00:00
|
||||||
setstate rr_Baby 2015-01-04 16:19:19 durTimerAbsence_cr 0
|
setstate rr_Baby 2015-01-04 16:19:19 durTimerAbsence_cr 0
|
||||||
setstate rr_Baby 2015-01-04 16:23:19 durTimerPresence 7729:52:58
|
setstate rr_Baby 2018-07-15 15:30:38 durTimerPresence 38640:00:17
|
||||||
setstate rr_Baby 2015-01-04 16:23:19 durTimerPresence_cr 463793
|
setstate rr_Baby 2018-07-15 15:30:38 durTimerPresence_cr 2318400
|
||||||
setstate rr_Baby 2015-01-04 16:19:19 durTimerSleep 00:00:00
|
setstate rr_Baby 2015-01-04 16:19:19 durTimerSleep 00:00:00
|
||||||
setstate rr_Baby 2015-01-04 16:19:19 durTimerSleep_cr 0
|
setstate rr_Baby 2015-01-04 16:19:19 durTimerSleep_cr 0
|
||||||
setstate rr_Baby 2014-02-16 14:30:21 lastArrival 2014-02-16 14:30:21
|
setstate rr_Baby 2014-02-16 14:30:21 lastArrival 2014-02-16 14:30:21
|
||||||
@ -234,8 +261,8 @@ setstate rr_Baby 2014-02-16 14:30:21 presence present
|
|||||||
setstate rr_Baby 2014-02-17 20:45:12 state home
|
setstate rr_Baby 2014-02-17 20:45:12 state home
|
||||||
setstate rr_Baby 2014-02-16 14:30:21 wayhome 0
|
setstate rr_Baby 2014-02-16 14:30:21 wayhome 0
|
||||||
setstate rr_Daughter gone
|
setstate rr_Daughter gone
|
||||||
setstate rr_Daughter 2015-01-04 16:23:19 durTimerAbsence 7729:25:20
|
setstate rr_Daughter 2018-07-15 15:30:38 durTimerAbsence 38639:32:39
|
||||||
setstate rr_Daughter 2015-01-04 16:23:19 durTimerAbsence_cr 463765
|
setstate rr_Daughter 2018-07-15 15:30:38 durTimerAbsence_cr 2318373
|
||||||
setstate rr_Daughter 2015-01-04 16:19:19 durTimerPresence 00:00:00
|
setstate rr_Daughter 2015-01-04 16:19:19 durTimerPresence 00:00:00
|
||||||
setstate rr_Daughter 2015-01-04 16:19:19 durTimerPresence_cr 0
|
setstate rr_Daughter 2015-01-04 16:19:19 durTimerPresence_cr 0
|
||||||
setstate rr_Daughter 2015-01-04 16:19:19 durTimerSleep 00:00:00
|
setstate rr_Daughter 2015-01-04 16:19:19 durTimerSleep 00:00:00
|
||||||
@ -256,8 +283,8 @@ setstate rr_Daughter 2014-02-16 14:57:59 presence absent
|
|||||||
setstate rr_Daughter 2015-01-04 16:19:19 state gone
|
setstate rr_Daughter 2015-01-04 16:19:19 state gone
|
||||||
setstate rr_Daughter 2014-02-16 13:46:26 wayhome 0
|
setstate rr_Daughter 2014-02-16 13:46:26 wayhome 0
|
||||||
setstate rr_Father gone
|
setstate rr_Father gone
|
||||||
setstate rr_Father 2015-01-04 16:23:19 durTimerAbsence 7729:56:27
|
setstate rr_Father 2018-07-15 15:30:38 durTimerAbsence 38640:03:46
|
||||||
setstate rr_Father 2015-01-04 16:23:19 durTimerAbsence_cr 463796
|
setstate rr_Father 2018-07-15 15:30:38 durTimerAbsence_cr 2318404
|
||||||
setstate rr_Father 2015-01-04 16:19:19 durTimerPresence 00:00:00
|
setstate rr_Father 2015-01-04 16:19:19 durTimerPresence 00:00:00
|
||||||
setstate rr_Father 2015-01-04 16:19:19 durTimerPresence_cr 0
|
setstate rr_Father 2015-01-04 16:19:19 durTimerPresence_cr 0
|
||||||
setstate rr_Father 2015-01-04 16:19:19 durTimerSleep 00:00:00
|
setstate rr_Father 2015-01-04 16:19:19 durTimerSleep 00:00:00
|
||||||
@ -277,8 +304,8 @@ setstate rr_Father 2014-02-16 13:46:02 wayhome 0
|
|||||||
setstate rr_Mother home
|
setstate rr_Mother home
|
||||||
setstate rr_Mother 2015-01-04 16:19:19 durTimerAbsence 00:00:00
|
setstate rr_Mother 2015-01-04 16:19:19 durTimerAbsence 00:00:00
|
||||||
setstate rr_Mother 2015-01-04 16:19:19 durTimerAbsence_cr 0
|
setstate rr_Mother 2015-01-04 16:19:19 durTimerAbsence_cr 0
|
||||||
setstate rr_Mother 2015-01-04 16:23:19 durTimerPresence 7730:07:02
|
setstate rr_Mother 2018-07-15 15:30:38 durTimerPresence 38640:14:21
|
||||||
setstate rr_Mother 2015-01-04 16:23:19 durTimerPresence_cr 463807
|
setstate rr_Mother 2018-07-15 15:30:38 durTimerPresence_cr 2318414
|
||||||
setstate rr_Mother 2015-01-04 16:19:19 durTimerSleep 00:00:00
|
setstate rr_Mother 2015-01-04 16:19:19 durTimerSleep 00:00:00
|
||||||
setstate rr_Mother 2015-01-04 16:19:19 durTimerSleep_cr 0
|
setstate rr_Mother 2015-01-04 16:19:19 durTimerSleep_cr 0
|
||||||
setstate rr_Mother 2014-02-16 14:16:17 lastArrival 2014-02-16 14:16:17
|
setstate rr_Mother 2014-02-16 14:16:17 lastArrival 2014-02-16 14:16:17
|
||||||
@ -294,8 +321,8 @@ setstate rr_Mother 2014-02-16 14:16:17 presence present
|
|||||||
setstate rr_Mother 2014-02-16 14:16:17 state home
|
setstate rr_Mother 2014-02-16 14:16:17 state home
|
||||||
setstate rr_Mother 2014-02-16 13:46:09 wayhome 0
|
setstate rr_Mother 2014-02-16 13:46:09 wayhome 0
|
||||||
setstate rr_Son gone
|
setstate rr_Son gone
|
||||||
setstate rr_Son 2015-01-04 16:23:19 durTimerAbsence 7729:25:18
|
setstate rr_Son 2018-07-15 15:30:38 durTimerAbsence 38639:32:37
|
||||||
setstate rr_Son 2015-01-04 16:23:19 durTimerAbsence_cr 463765
|
setstate rr_Son 2018-07-15 15:30:38 durTimerAbsence_cr 2318373
|
||||||
setstate rr_Son 2015-01-04 16:19:19 durTimerPresence 00:00:00
|
setstate rr_Son 2015-01-04 16:19:19 durTimerPresence 00:00:00
|
||||||
setstate rr_Son 2015-01-04 16:19:19 durTimerPresence_cr 0
|
setstate rr_Son 2015-01-04 16:19:19 durTimerPresence_cr 0
|
||||||
setstate rr_Son 2015-01-04 16:19:19 durTimerSleep 00:00:00
|
setstate rr_Son 2015-01-04 16:19:19 durTimerSleep 00:00:00
|
||||||
@ -315,6 +342,8 @@ setstate rr_Son 2014-02-16 14:58:01 mood -
|
|||||||
setstate rr_Son 2014-02-16 14:58:01 presence absent
|
setstate rr_Son 2014-02-16 14:58:01 presence absent
|
||||||
setstate rr_Son 2015-01-04 16:19:19 state gone
|
setstate rr_Son 2015-01-04 16:19:19 state gone
|
||||||
setstate rr_Son 2014-02-16 13:46:38 wayhome 0
|
setstate rr_Son 2014-02-16 13:46:38 wayhome 0
|
||||||
setstate sunRise Next: 07:45:49
|
setstate sunRise Next: 04:50:28
|
||||||
setstate sunSet Next: 17:14:06
|
setstate sunRise 2018-07-15 15:27:23 state Next: 04:50:28
|
||||||
|
setstate sunSet Next: 22:12:30
|
||||||
|
setstate sunSet 2018-07-15 15:27:23 state Next: 22:12:30
|
||||||
setstate wlCinema initialized
|
setstate wlCinema initialized
|
||||||
|
@ -1,15 +1,16 @@
|
|||||||
attr global userattr devStateIcon devStateStyle icon lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0 sortby structexclude webCmd widgetOverride
|
attr global userattr cmdIcon devStateIcon devStateStyle icon lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0 sortby structexclude webCmd webCmdLabel:textField-long widgetOverride
|
||||||
attr global autoload_undefined_devices 1
|
attr global autoload_undefined_devices 1
|
||||||
|
attr global autosave 0
|
||||||
attr global backup_before_update 0
|
attr global backup_before_update 0
|
||||||
attr global logfile -
|
attr global logfile -
|
||||||
attr global modpath .
|
attr global modpath .
|
||||||
attr global motd FHEM demo version
|
attr global motd
|
||||||
|
attr global mseclog 1
|
||||||
attr global room System
|
attr global room System
|
||||||
attr global sendStatistics never
|
attr global sendStatistics never
|
||||||
attr global statefile ./demolog/fhem.save
|
attr global statefile ./demolog/fhem.save
|
||||||
attr global updateInBackground 1
|
attr global updateInBackground 1
|
||||||
attr global verbose 3
|
attr global verbose 3
|
||||||
attr global mseclog
|
|
||||||
|
|
||||||
define telnetPort telnet 7072 global
|
define telnetPort telnet 7072 global
|
||||||
attr telnetPort room System
|
attr telnetPort room System
|
||||||
@ -17,26 +18,197 @@ attr telnetPort room System
|
|||||||
define WEB FHEMWEB 8083 global
|
define WEB FHEMWEB 8083 global
|
||||||
attr WEB JavaScripts codemirror/fhem_codemirror.js
|
attr WEB JavaScripts codemirror/fhem_codemirror.js
|
||||||
attr WEB defaultRoom Light
|
attr WEB defaultRoom Light
|
||||||
attr WEB hiddenroom DashboardRoom
|
|
||||||
attr WEB iconPath openautomation:fhemSVG:default
|
attr WEB iconPath openautomation:fhemSVG:default
|
||||||
attr WEB room System
|
attr WEB room System
|
||||||
attr WEB sortRooms Light Cinema Residents Sensors System
|
attr WEB sortRooms Light Cinema Residents Sensors System
|
||||||
|
attr WEB styleData {\
|
||||||
define WEBphone FHEMWEB 8084 global
|
"f18": {\
|
||||||
attr WEBphone hiddenroom DashboardRoom
|
"Pinned.menu": true,\
|
||||||
attr WEBphone iconPath openautomation:fhemSVG:default
|
"cols.bg": "FFFFE7",\
|
||||||
attr WEBphone room System
|
"cols.fg": "000000",\
|
||||||
attr WEBphone sortRooms Light Cinema Residents Sensors System
|
"cols.link": "278727",\
|
||||||
attr WEBphone smallscreenCommands 1
|
"cols.evenrow": "F8F8E0",\
|
||||||
attr WEBphone stylesheetPrefix smallscreen
|
"cols.oddrow": "F0F0D8",\
|
||||||
|
"cols.header": "E0E0C8",\
|
||||||
|
"cols.menu": "D7FFFF",\
|
||||||
define WEBtablet FHEMWEB 8085 global
|
"cols.sel": "A0FFFF",\
|
||||||
attr WEBtablet hiddenroom DashboardRoom
|
"cols.inpBack": "FFFFFF",\
|
||||||
attr WEBtablet iconPath openautomation:fhemSVG:default
|
"savePinChanges": true,\
|
||||||
attr WEBtablet room System
|
"fixedInput": true,\
|
||||||
attr WEBtablet sortRooms Light Cinema Residents Sensors System
|
"hidePin": true,\
|
||||||
attr WEBtablet stylesheetPrefix ios7touchpad
|
"showDragger": false,\
|
||||||
|
"Pos.style_list_Styles": {\
|
||||||
|
"left": 20,\
|
||||||
|
"top": 0,\
|
||||||
|
"width": 240,\
|
||||||
|
"height": 260,\
|
||||||
|
"oTop": 20,\
|
||||||
|
"oLeft": 0\
|
||||||
|
},\
|
||||||
|
"Pos.style_list_f18_special": {\
|
||||||
|
"left": 20,\
|
||||||
|
"top": 280,\
|
||||||
|
"width": 240,\
|
||||||
|
"height": 140,\
|
||||||
|
"oTop": 40,\
|
||||||
|
"oLeft": 0\
|
||||||
|
},\
|
||||||
|
"Pos.style_list_f18__Room_specific": {\
|
||||||
|
"left": 280,\
|
||||||
|
"top": -20,\
|
||||||
|
"width": 240,\
|
||||||
|
"height": 400,\
|
||||||
|
"oTop": 40,\
|
||||||
|
"oLeft": 0\
|
||||||
|
},\
|
||||||
|
"Pos.Room_Light_grp_Color_Lights": {\
|
||||||
|
"left": 0,\
|
||||||
|
"top": 0,\
|
||||||
|
"width": 860,\
|
||||||
|
"height": 80,\
|
||||||
|
"oTop": 21,\
|
||||||
|
"oLeft": 1\
|
||||||
|
},\
|
||||||
|
"Pos.Room_Light_grp_Notify": {\
|
||||||
|
"left": 420,\
|
||||||
|
"top": 300,\
|
||||||
|
"width": 440,\
|
||||||
|
"height": 38,\
|
||||||
|
"oTop": 41,\
|
||||||
|
"oLeft": 1\
|
||||||
|
},\
|
||||||
|
"Pos.Room_Light_grp_Single_Lights": {\
|
||||||
|
"left": 0,\
|
||||||
|
"top": 100,\
|
||||||
|
"width": 400,\
|
||||||
|
"height": 240,\
|
||||||
|
"oTop": 41,\
|
||||||
|
"oLeft": 1\
|
||||||
|
},\
|
||||||
|
"Pos.Room_Light_grp_Structure": {\
|
||||||
|
"left": 420,\
|
||||||
|
"top": 220,\
|
||||||
|
"width": 440,\
|
||||||
|
"height": 38,\
|
||||||
|
"oTop": 41,\
|
||||||
|
"oLeft": 1\
|
||||||
|
},\
|
||||||
|
"Pos.Room_Light_grp_Timer": {\
|
||||||
|
"left": 420,\
|
||||||
|
"top": 100,\
|
||||||
|
"width": 440,\
|
||||||
|
"height": 78,\
|
||||||
|
"oTop": 41,\
|
||||||
|
"oLeft": 1\
|
||||||
|
},\
|
||||||
|
"snapToGrid": true,\
|
||||||
|
"Pos.Room_Cinema_grp_AV": {\
|
||||||
|
"left": 0,\
|
||||||
|
"top": 0,\
|
||||||
|
"width": 560,\
|
||||||
|
"height": 120,\
|
||||||
|
"oTop": 21,\
|
||||||
|
"oLeft": 1\
|
||||||
|
},\
|
||||||
|
"Pos.Room_Cinema_grp_Control": {\
|
||||||
|
"left": 0,\
|
||||||
|
"top": 140,\
|
||||||
|
"width": 560,\
|
||||||
|
"height": 40,\
|
||||||
|
"oTop": 41,\
|
||||||
|
"oLeft": 1\
|
||||||
|
},\
|
||||||
|
"Pos.Room_Cinema_grp_Light": {\
|
||||||
|
"left": 0,\
|
||||||
|
"top": 220,\
|
||||||
|
"width": 560,\
|
||||||
|
"height": 78,\
|
||||||
|
"oTop": 41,\
|
||||||
|
"oLeft": 1\
|
||||||
|
},\
|
||||||
|
"Pos.Room_Cinema_grp_Scenes": {\
|
||||||
|
"left": 0,\
|
||||||
|
"top": 360,\
|
||||||
|
"width": 560,\
|
||||||
|
"height": 180,\
|
||||||
|
"oTop": 24,\
|
||||||
|
"oLeft": 0\
|
||||||
|
},\
|
||||||
|
"Pos.Room_Sensors_grp_FileLog": {\
|
||||||
|
"left": 0,\
|
||||||
|
"top": 0,\
|
||||||
|
"width": 260,\
|
||||||
|
"height": 120,\
|
||||||
|
"oTop": 21,\
|
||||||
|
"oLeft": 1\
|
||||||
|
},\
|
||||||
|
"Pos.Room_Sensors_grp_Helper": {\
|
||||||
|
"left": 0,\
|
||||||
|
"top": 140,\
|
||||||
|
"width": 260,\
|
||||||
|
"height": 20,\
|
||||||
|
"oTop": 41,\
|
||||||
|
"oLeft": 1\
|
||||||
|
},\
|
||||||
|
"Pos.Room_Sensors_grp_Sensors": {\
|
||||||
|
"left": 0,\
|
||||||
|
"top": 200,\
|
||||||
|
"width": 260,\
|
||||||
|
"height": 40,\
|
||||||
|
"oTop": 41,\
|
||||||
|
"oLeft": 1\
|
||||||
|
},\
|
||||||
|
"Pos.svgZoomControl": {\
|
||||||
|
"left": 0,\
|
||||||
|
"top": 300,\
|
||||||
|
"width": 1040,\
|
||||||
|
"height": 0,\
|
||||||
|
"oTop": 0,\
|
||||||
|
"oLeft": 0\
|
||||||
|
},\
|
||||||
|
"Pos.SVG_01_Garden": {\
|
||||||
|
"left": 0,\
|
||||||
|
"top": 500,\
|
||||||
|
"width": 1040,\
|
||||||
|
"height": 180,\
|
||||||
|
"oTop": -164,\
|
||||||
|
"oLeft": 0\
|
||||||
|
},\
|
||||||
|
"Pos.SVG_02_Cellar": {\
|
||||||
|
"left": 0,\
|
||||||
|
"top": 680,\
|
||||||
|
"width": 1040,\
|
||||||
|
"height": 180,\
|
||||||
|
"oTop": -164,\
|
||||||
|
"oLeft": 0\
|
||||||
|
},\
|
||||||
|
"Pos.SVG_03_Dewpoint": {\
|
||||||
|
"left": 0,\
|
||||||
|
"top": 860,\
|
||||||
|
"width": 1040,\
|
||||||
|
"height": 180,\
|
||||||
|
"oTop": -164,\
|
||||||
|
"oLeft": 0\
|
||||||
|
},\
|
||||||
|
"Pos.SVG_04_Sun": {\
|
||||||
|
"left": 0,\
|
||||||
|
"top": 1040,\
|
||||||
|
"width": 1040,\
|
||||||
|
"height": 180,\
|
||||||
|
"oTop": -164,\
|
||||||
|
"oLeft": 0\
|
||||||
|
},\
|
||||||
|
"Pos.SVG_05_Polar": {\
|
||||||
|
"left": 280,\
|
||||||
|
"top": 300,\
|
||||||
|
"width": 1040,\
|
||||||
|
"height": 320,\
|
||||||
|
"oTop": -304,\
|
||||||
|
"oLeft": 0\
|
||||||
|
}\
|
||||||
|
}\
|
||||||
|
}
|
||||||
|
attr WEB stylesheetPrefix f18
|
||||||
|
|
||||||
# Fake FileLog entry, to access the fhem log from FHEMWEB
|
# Fake FileLog entry, to access the fhem log from FHEMWEB
|
||||||
define Logfile FileLog ./log/fhem-%Y-%m.log fakelog
|
define Logfile FileLog ./log/fhem-%Y-%m.log fakelog
|
||||||
@ -121,12 +293,12 @@ attr SVG_03_Dewpoint startDate 2013-08-13
|
|||||||
define logProxy logProxy
|
define logProxy logProxy
|
||||||
attr logProxy room System
|
attr logProxy room System
|
||||||
define SVG_04_Sun SVG logProxy:SVG_04_Sun:CURRENT
|
define SVG_04_Sun SVG logProxy:SVG_04_Sun:CURRENT
|
||||||
attr SVG_04_Sun room Sensors
|
|
||||||
attr SVG_04_Sun fixedrange year
|
attr SVG_04_Sun fixedrange year
|
||||||
|
attr SVG_04_Sun room Sensors
|
||||||
attr SVG_04_Sun title {"".logProxy_dec2hms($data{min1})." - ".logProxy_dec2hms($data{max1})." - ".logProxy_dec2hms($data{min2})." - ".logProxy_dec2hms($data{max2})}
|
attr SVG_04_Sun title {"".logProxy_dec2hms($data{min1})." - ".logProxy_dec2hms($data{max1})." - ".logProxy_dec2hms($data{min2})." - ".logProxy_dec2hms($data{max2})}
|
||||||
define SVG_05_Polar SVG logProxy:SVG_05_Polar:CURRENT
|
define SVG_05_Polar SVG logProxy:SVG_05_Polar:CURRENT
|
||||||
attr SVG_05_Polar room Sensors
|
|
||||||
attr SVG_05_Polar plotsize 340,300
|
attr SVG_05_Polar plotsize 340,300
|
||||||
|
attr SVG_05_Polar room Sensors
|
||||||
|
|
||||||
define sunRise at *{sunrise()} set Office on
|
define sunRise at *{sunrise()} set Office on
|
||||||
attr sunRise group Timer
|
attr sunRise group Timer
|
||||||
@ -189,20 +361,6 @@ attr lcCinema icon scene_scene
|
|||||||
attr lcCinema room Cinema
|
attr lcCinema room Cinema
|
||||||
attr lcCinema webCmd scene
|
attr lcCinema webCmd scene
|
||||||
|
|
||||||
define anyViews Dashboard
|
|
||||||
attr anyViews userattr dashboard_tab2backgroundimage dashboard_tab2colcount dashboard_tab2devices dashboard_tab2groups dashboard_tab2icon dashboard_tab2name dashboard_tab2rowcentercolwidth dashboard_tab2sorting
|
|
||||||
attr anyViews dashboard_colcount 2
|
|
||||||
attr anyViews dashboard_row center
|
|
||||||
attr anyViews dashboard_rowcentercolwidth 50%
|
|
||||||
attr anyViews dashboard_tab1groups Home State,Light,AV,Single Lights,Color Lights
|
|
||||||
attr anyViews dashboard_tab1name Dashboard Demo
|
|
||||||
attr anyViews dashboard_tab1sorting t0c0,Single Lights,true,400,209,0,0:t0c0,AV,true,400,170,0,209:t0c1,Light,true,444,129,h84,0:t0c1,Home State,true,444,204,384,129:
|
|
||||||
attr anyViews room hidden
|
|
||||||
attr anyViews alias Dashboard Demo
|
|
||||||
|
|
||||||
define anyViews_weblink weblink htmlCode {DashboardAsHtml("anyViews")}
|
|
||||||
attr anyViews_weblink room DashboardRoom
|
|
||||||
|
|
||||||
define rgr_Residents RESIDENTS
|
define rgr_Residents RESIDENTS
|
||||||
attr rgr_Residents alias Residents
|
attr rgr_Residents alias Residents
|
||||||
attr rgr_Residents devStateIcon .*home:status_available:absent .*absent:status_away_1:home .*gone:status_standby:home .*none:control_building_empty .*gotosleep:status_night:asleep .*asleep:status_night:awoken .*awoken:status_available:home
|
attr rgr_Residents devStateIcon .*home:status_available:absent .*absent:status_away_1:home .*gone:status_standby:home .*none:control_building_empty .*gotosleep:status_night:asleep .*asleep:status_night:awoken .*awoken:status_available:home
|
||||||
@ -329,21 +487,7 @@ attr CT setFn {if( $CMD =~ m/on|off/ ) { $ARGS=$CMD;;$CMD = "state" } else {fhem
|
|||||||
attr CT setList on:noArg off:noArg ct:colorpicker,CT,2000,1,6500
|
attr CT setList on:noArg off:noArg ct:colorpicker,CT,2000,1,6500
|
||||||
attr CT webCmd ct::ct 2040:ct 2630:ct 3703:ct 6250:on:off
|
attr CT webCmd ct::ct 2040:ct 2630:ct 3703:ct 6250:on:off
|
||||||
|
|
||||||
define -ignoreErr Weather Weather 673513 1800 de
|
|
||||||
attr Weather group Weather
|
|
||||||
attr Weather room Weather
|
|
||||||
|
|
||||||
define Weather.weblink weblink htmlCode { WeatherAsHtmlH("Weather") }
|
define Weather.weblink weblink htmlCode { WeatherAsHtmlH("Weather") }
|
||||||
attr Weather.weblink alias Weather Forecast
|
attr Weather.weblink alias Weather Forecast
|
||||||
attr Weather.weblink room Weather
|
attr Weather.weblink room Weather
|
||||||
|
|
||||||
define -ignoreErr Display RSS jpg localhost ./demolog/layout
|
|
||||||
attr Display room System
|
|
||||||
attr Display size 800x600
|
|
||||||
attr Display bg ./demolog/pictures
|
|
||||||
attr Display tmin 15
|
|
||||||
attr Display refresh 5
|
|
||||||
|
|
||||||
define rg readingsGroup TYPE=FHEMWEB
|
|
||||||
attr rg comment Workaround for the dashboard bug.
|
|
||||||
attr rg room hidden
|
|
||||||
|
@ -397,12 +397,12 @@ f18_resize()
|
|||||||
hi = f18_getAttr("hideInput"),
|
hi = f18_getAttr("hideInput"),
|
||||||
pm = f18_getAttr("Pinned.menu");
|
pm = f18_getAttr("Pinned.menu");
|
||||||
|
|
||||||
var diff = 0;
|
var left = 0;
|
||||||
diff += hl ? 0 : 40;
|
left += hl ? 0 : 40;
|
||||||
diff += pm ? 0 : 44;
|
left += pm ? 0 : 44;
|
||||||
$("input.maininput")
|
$("input.maininput").css({ width:(w-left-(FW_isiOS ? 30 : 20))+'px',
|
||||||
.css("width", (w-(FW_isiOS ? 40 : 30)-diff)+'px')
|
display: hi ? "none":"block"});
|
||||||
.css("display", hi ? "none":"block");
|
$("#hdr").css({ left:left+'px' });
|
||||||
$("#menu,#content").css("top", (hi && pm && hl) ? "10px" : "50px");
|
$("#menu,#content").css("top", (hi && pm && hl) ? "10px" : "50px");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,13 +5,14 @@ textarea, .ui-dialog.ui-widget textarea { font-family:Courier; }
|
|||||||
input,textarea { border-style:ridge; }
|
input,textarea { border-style:ridge; }
|
||||||
|
|
||||||
#logo {
|
#logo {
|
||||||
position:fixed; top:10px; left:52px; width:32px; height:32px; z-index:10;
|
position:absolute; top:10px; left:52px; width:32px; height:32px; z-index:10;
|
||||||
background-image:url(../images/default/fhemicon.png);
|
background-image:url(../images/default/fhemicon.png);
|
||||||
background-size: contain; background-repeat: no-repeat;
|
background-size: contain; background-repeat: no-repeat;
|
||||||
}
|
}
|
||||||
#menuBtn { top:10px; left:10px; width:32px; height:32px; }
|
#menuBtn { top:10px; left:10px; width:32px; height:32px; }
|
||||||
#hdr { top:10px; right:10px; }
|
#hdr { position:absolute; top:10px; left:48px; }
|
||||||
#content { top:50px; left:10px; bottom:10px; right:10px; }
|
#content { position:absolute; top:50px; left:10px; bottom:10px; right:10px; }
|
||||||
|
body.small #content { left:10px; }
|
||||||
#menu {
|
#menu {
|
||||||
top:50px; bottom:10px; left:-120%;
|
top:50px; bottom:10px; left:-120%;
|
||||||
z-index:20;
|
z-index:20;
|
||||||
|
Loading…
Reference in New Issue
Block a user