mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-01-31 06:39:11 +00:00
Set some HM-CC-TC parameters
git-svn-id: https://svn.fhem.de/fhem/trunk@866 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
dcd4d93d0c
commit
437afb7646
@ -31,6 +31,7 @@ HMLAN_Initialize($)
|
||||
$hash->{ReadFn} = "HMLAN_Read";
|
||||
$hash->{WriteFn} = "HMLAN_Write";
|
||||
$hash->{ReadyFn} = "HMLAN_Ready";
|
||||
$hash->{SetFn} = "HMLAN_Set";
|
||||
$hash->{Clients} = ":CUL_HM:";
|
||||
my %mc = (
|
||||
"1:CUL_HM" => "^A......................",
|
||||
|
@ -14,6 +14,7 @@ sub CUL_HM_PushCmdStack($$);
|
||||
sub CUL_HM_SendCmd($$$$);
|
||||
sub CUL_HM_Set($@);
|
||||
sub CUL_HM_DumpProtocol($$@);
|
||||
sub CUL_HM_convTemp($);
|
||||
|
||||
my %culHmDevProps=(
|
||||
"10" => { st => "switch", cl => "receiver" }, # Parse,Set
|
||||
@ -75,7 +76,7 @@ my %culHmModel=(
|
||||
"0036" => "HM-PB-2-WM",
|
||||
"0037" => "HM-RC-19",
|
||||
"0038" => "HM-RC-19-B",
|
||||
"0039" => "HM-CC-TC", # Parse only
|
||||
"0039" => "HM-CC-TC", # Selected commands
|
||||
"003A" => "HM-CC-VD", # Actuator, battery/etc missing
|
||||
"003B" => "HM-RC-4-B",
|
||||
"003C" => "HM-WDS20-TH-O",
|
||||
@ -402,22 +403,32 @@ CUL_HM_Parse($$)
|
||||
push @event, "state:T: $t H: $h";
|
||||
push @event, "temperature:$t";
|
||||
push @event, "humidity:$h";
|
||||
|
||||
# If we have something to tell:
|
||||
CUL_HM_SendCmd($shash, "++A112$id$src", 1, 1) if($shash->{cmdStack});
|
||||
}
|
||||
|
||||
|
||||
if($cmd eq "A258" && $p =~ m/^(..)(..)/) {
|
||||
my ( $d1, $vp) =
|
||||
(hex($1), hex($2));
|
||||
$vp = int($vp/2.56+0.5); # Ventil position in %
|
||||
$vp = int($vp/2.56+0.5); # valve position in %
|
||||
push @event, "actuator:$vp %";
|
||||
|
||||
if($dhash) { # Wont trigger
|
||||
# Set the valve state too, without an extra trigger
|
||||
if($dhash) {
|
||||
$dhash->{STATE} = "$vp %";
|
||||
$dhash->{READINGS}{STATE}{TIME} = $tn;
|
||||
$dhash->{READINGS}{STATE}{VAL} = "$vp %";
|
||||
}
|
||||
}
|
||||
|
||||
if($cmd eq "A410" && $p =~ m/^0602(..)........$/) {
|
||||
push @event, "desired-temp: " .hex($1)/2;
|
||||
}
|
||||
|
||||
CUL_HM_SendCmd($shash, "++8002$id${src}00",1,0) # Send Ack
|
||||
if($id eq $dst && $cmd ne "8002");
|
||||
|
||||
|
||||
} elsif($st eq "KFM" && $model eq "KFM-Sensor") {
|
||||
|
||||
@ -488,6 +499,19 @@ my %culHmSubTypeSets = (
|
||||
remote =>
|
||||
{ text => "<btn> [on|off] <txt1> <txt2>" },
|
||||
);
|
||||
my %culHmModelSets = (
|
||||
"HM-CC-TC"=>
|
||||
{ "day-temp" => "temp",
|
||||
"night-temp" => "temp",
|
||||
"tempListSat"=> "HH:MM temp ...",
|
||||
"tempListSun"=> "HH:MM temp ...",
|
||||
"tempListMon"=> "HH:MM temp ...",
|
||||
"tempListTue"=> "HH:MM temp ...",
|
||||
"tempListThu"=> "HH:MM temp ...",
|
||||
"tempListWed"=> "HH:MM temp ...",
|
||||
"tempListFri"=> "HH:MM temp ...",
|
||||
},
|
||||
);
|
||||
|
||||
###################################
|
||||
sub
|
||||
@ -501,6 +525,7 @@ CUL_HM_Set($@)
|
||||
|
||||
my $name = $hash->{NAME};
|
||||
my $st = AttrVal($name, "subType", "");
|
||||
my $md = AttrVal($name, "model", "");
|
||||
my $cmd = $a[1];
|
||||
my $dst = $hash->{DEF};
|
||||
my $chn = "01";
|
||||
@ -514,6 +539,7 @@ CUL_HM_Set($@)
|
||||
|
||||
my $h = $culHmGlobalSets{$cmd};
|
||||
$h = $culHmSubTypeSets{$st}{$cmd} if(!defined($h) && $culHmSubTypeSets{$st});
|
||||
$h = $culHmModelSets{$md}{$cmd} if(!defined($h) && $culHmModelSets{$md});
|
||||
my @h;
|
||||
@h = split(" ", $h) if($h);
|
||||
|
||||
@ -525,6 +551,8 @@ CUL_HM_Set($@)
|
||||
join(" ",sort keys %culHmGlobalSets);
|
||||
$usg .= " ". join(" ",sort keys %{$culHmSubTypeSets{$st}})
|
||||
if($culHmSubTypeSets{$st});
|
||||
$usg .= " ". join(" ",sort keys %{$culHmModelSets{$md}})
|
||||
if($culHmModelSets{$md});
|
||||
my $pct = join(" ", (0..100));
|
||||
$usg =~ s/ pct/ $pct/;
|
||||
return $usg;
|
||||
@ -533,7 +561,7 @@ CUL_HM_Set($@)
|
||||
return "$cmd requires no parameters";
|
||||
|
||||
} elsif($h !~ m/\.\.\./ && @h != @a-2) {
|
||||
return "$cmd requires parameters: $h";
|
||||
return "$cmd requires parameter: $h";
|
||||
|
||||
}
|
||||
|
||||
@ -559,21 +587,13 @@ CUL_HM_Set($@)
|
||||
$shash->{hmPairSerial} = $serialNr;
|
||||
|
||||
} elsif($cmd eq "unpair") { ###########################################
|
||||
$sndcmd =
|
||||
sprintf("++A001%s%s00050000000000", $id,$dst);
|
||||
CUL_HM_PushCmdStack($shash,
|
||||
sprintf("++A001%s%s000802000A000B000C00",$id,$dst));
|
||||
CUL_HM_PushCmdStack($shash,
|
||||
sprintf("++A001%s%s0006",$id,$dst));
|
||||
CUL_HM_pushConfig($shash, $id, $dst, 0, 0, "02010A000B000C00");
|
||||
$sndcmd = shift @{$shash->{cmdStack}};
|
||||
|
||||
} elsif($cmd eq "sign") { ############################################
|
||||
$sndcmd =
|
||||
sprintf("++A001%s%s%s0500000000%s", $id,$dst,$chn,$chn);
|
||||
CUL_HM_PushCmdStack($shash,
|
||||
sprintf("++A001%s%s%s0808%s",$id,$dst,$chn,
|
||||
($a[2] eq "on" ? "01" : "02")));
|
||||
CUL_HM_PushCmdStack($shash,
|
||||
sprintf("++A001%s%s%s06",$id,$dst,$chn));
|
||||
CUL_HM_pushConfig($shash, $id, $dst, $chn, $chn,
|
||||
"08" . ($a[2] eq "on" ? "01":"02"));
|
||||
$sndcmd = shift @{$shash->{cmdStack}};
|
||||
|
||||
} elsif($cmd eq "statusRequest") { ####################################
|
||||
$sndcmd = sprintf("++A001%s%s%s0E", $id,$dst, $chn);
|
||||
@ -594,7 +614,7 @@ CUL_HM_Set($@)
|
||||
$sndcmd = sprintf("++A03E%s%s%s40%s%02X", $id, $dst,
|
||||
$dst, $chn, $shash->{toggleIndex});
|
||||
|
||||
} elsif($st eq "pct") { ##############################################
|
||||
} elsif($cmd eq "pct") { ##############################################
|
||||
$a[1] = 100 if ($a[1] > 100);
|
||||
$sndcmd = sprintf("++A011%s%s02%s%02X0000", $id, $dst, $chn, $a[1]*2);
|
||||
if(@a > 2) {
|
||||
@ -602,17 +622,14 @@ CUL_HM_Set($@)
|
||||
$sndcmd .= $tval;
|
||||
}
|
||||
|
||||
|
||||
} elsif($st eq "text") { #############################################
|
||||
} elsif($cmd eq "text") { #############################################
|
||||
$state = "";
|
||||
return "$a[2] is not a button number" if($a[2] !~ m/^\d$/);
|
||||
return "$a[3] is not on or off" if($a[3] !~ m/^(on|off)$/);
|
||||
my $bn = $a[2]*2-($a[3] eq "on" ? 0 : 1);
|
||||
|
||||
CUL_HM_PushCmdStack($shash,
|
||||
sprintf("++A001%s%s%02d050000000001", $id, $dst, $bn));
|
||||
|
||||
my ($l1, $l2, $s, $tl); # Create CONFIG_WRITE_INDEX string
|
||||
my ($l1, $l2, $s); # Create CONFIG_WRITE_INDEX string
|
||||
$l1 = $a[4] . "\x00";
|
||||
$l1 = substr($l1, 0, 13);
|
||||
$s = 54;
|
||||
@ -624,24 +641,47 @@ CUL_HM_Set($@)
|
||||
$l2 =~ s/(.)/sprintf("%02X%02X",$s++,ord($1))/ge;
|
||||
$l1 .= $l2;
|
||||
|
||||
$tl = length($l1);
|
||||
for(my $l = 0; $l < $tl; $l+=28) {
|
||||
my $ml = $tl-$l < 28 ? $tl-$l : 28;
|
||||
CUL_HM_PushCmdStack($shash, sprintf("++A001%s%s%02d08%s",
|
||||
$id, $dst, $bn, substr($l1,$l,$ml)));
|
||||
}
|
||||
|
||||
CUL_HM_PushCmdStack($shash,
|
||||
sprintf("++A001%s%s%02d06", $id, $dst, $bn));
|
||||
CUL_HM_pushConfig($hash, $id, $dst, $bn, 1, $l1);
|
||||
return "Set your remote in learning mode to transmit the data";
|
||||
|
||||
} elsif($cmd =~ m/^(day|night)-temp$/) { ###############################
|
||||
my $temp = CUL_HM_convTemp($a[2]);
|
||||
return $temp if(length($temp) > 2);
|
||||
CUL_HM_pushConfig($hash, $id, $dst, 2, 5,
|
||||
$st eq "day-temp" ? "03$temp" : "04$temp");
|
||||
return;
|
||||
|
||||
} elsif($cmd =~ m/^tempList(...)/) { ##################################
|
||||
my %day2off = ( "Sat"=>"5 0B", "Sun"=>"5 3B", "Mon"=>"5 6B",
|
||||
"Tue"=>"5 9B", "Thu"=>"5 CB", "Wed"=>"6 01",
|
||||
"Fri"=>"6 31");
|
||||
my ($list,$addr) = split(" ", $day2off{$1});
|
||||
|
||||
return "To few arguments" if(@a < 4);
|
||||
return "To many arguments, max is 24 pairs" if(@a > 50);
|
||||
return "Bad format, use HH:MM TEMP ..." if(@a % 2);
|
||||
return "Last time spec must be 24:00" if($a[@a-2] ne "24:00");
|
||||
|
||||
my $data = "";
|
||||
for(my $idx = 2; $idx < @a; $idx += 2) {
|
||||
return "$a[$idx] is not in HH:MM format"
|
||||
if($a[$idx] !~ m/^([0-2]\d):([0-5]\d)/);
|
||||
my ($h, $m) = ($1, $2);
|
||||
my $temp = CUL_HM_convTemp($a[$idx+1]);
|
||||
return $temp if(length($temp) > 2);
|
||||
$data .= sprintf("%02X%02X%02X%s", $addr, $h*6+($m/10), $addr+1, $temp);
|
||||
$addr += 2;
|
||||
}
|
||||
CUL_HM_pushConfig($hash, $id, $dst, 2, $list, $data);
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
if($state) {
|
||||
$hash->{STATE} = $state;
|
||||
$hash->{cmdSent} = $state;
|
||||
}
|
||||
CUL_HM_SendCmd($shash, $sndcmd, 0, 1);
|
||||
CUL_HM_SendCmd($shash, $sndcmd, 0, 1) if($sndcmd);
|
||||
return $ret;
|
||||
}
|
||||
|
||||
@ -710,9 +750,8 @@ CUL_HM_Pair(@)
|
||||
delete($hash->{cmdStack});
|
||||
|
||||
if($stn ne "remote") {
|
||||
CUL_HM_SendCmd ($hash, "++A001$id${src}00050000000000", 1, 1);
|
||||
CUL_HM_PushCmdStack($hash, "++A001$id${src}00080201$idstr");
|
||||
CUL_HM_PushCmdStack($hash, "++A001$id${src}0006");
|
||||
CUL_HM_pushConfig($hash, $id, $src, 0, 0, "0201$idstr");
|
||||
CUL_HM_SendCmd($hash, shift @{$hash->{cmdStack}}, 1, 1);
|
||||
|
||||
} else {
|
||||
# remotes are AES per default, so the method above does not work. the
|
||||
@ -727,6 +766,7 @@ CUL_HM_Pair(@)
|
||||
CUL_HM_PushCmdStack($hash, "++A001$id${src}0106");
|
||||
|
||||
}
|
||||
|
||||
# Create shadow device for multi-channel
|
||||
if($stn eq "switch" &&
|
||||
$attr{$name}{devInfo} =~ m,(..)(..)(..), ) {
|
||||
@ -817,6 +857,7 @@ CUL_HM_Id($)
|
||||
return AttrVal($io->{NAME}, "hmId", "F1$fhtid");
|
||||
}
|
||||
|
||||
#############################
|
||||
my %culHmBits = (
|
||||
"8000" => { txt => "DEVICE_INFO", params => {
|
||||
FIRMWARE => '00,2',
|
||||
@ -908,7 +949,7 @@ CUL_HM_DumpProtocol($$@)
|
||||
|
||||
my $p01 = substr($p,0,2);
|
||||
my $p02 = substr($p,0,4);
|
||||
my $p11 = substr($p,2,2);
|
||||
my $p11 = (length($p) > 2 ? substr($p,2,2) : "");
|
||||
|
||||
$cmd = "0A$1" if($cmd =~ m/0B(..)/);
|
||||
$cmd = "A4$1" if($cmd =~ m/84(..)/);
|
||||
@ -939,6 +980,7 @@ CUL_HM_DumpProtocol($$@)
|
||||
DoTrigger($iname, $msg) if($ev);
|
||||
}
|
||||
|
||||
#############################
|
||||
my @culHmTimes8 = ( 0.1, 1, 5, 10, 60, 300, 600, 3600 );
|
||||
sub
|
||||
CUL_HM_encodeTime8($)
|
||||
@ -957,6 +999,7 @@ CUL_HM_encodeTime8($)
|
||||
return "FF";
|
||||
}
|
||||
|
||||
#############################
|
||||
sub
|
||||
CUL_HM_decodeTime8($)
|
||||
{
|
||||
@ -967,6 +1010,7 @@ CUL_HM_decodeTime8($)
|
||||
return $v2 * $culHmTimes8[$v1];
|
||||
}
|
||||
|
||||
#############################
|
||||
sub
|
||||
CUL_HM_encodeTime16($)
|
||||
{
|
||||
@ -987,6 +1031,16 @@ CUL_HM_encodeTime16($)
|
||||
return ($ret, "");
|
||||
}
|
||||
|
||||
sub
|
||||
CUL_HM_convTemp($)
|
||||
{
|
||||
my ($in) = @_;
|
||||
return "$in is not a number" if($in !~ m/^\d+$/ && $in !~ m/\d+\.\d+$/);
|
||||
return "$in is out of bounds (6 .. 30)" if($in < 6 || $in > 30);
|
||||
return sprintf("%02X", $in*2);
|
||||
}
|
||||
|
||||
#############################
|
||||
sub
|
||||
CUL_HM_decodeTime16($)
|
||||
{
|
||||
@ -1000,4 +1054,22 @@ CUL_HM_decodeTime16($)
|
||||
return $mul*$m;
|
||||
}
|
||||
|
||||
#############################
|
||||
sub
|
||||
CUL_HM_pushConfig($$$$$$)
|
||||
{
|
||||
my ($hash,$src,$dst,$chn,$list,$content) = @_;
|
||||
|
||||
CUL_HM_PushCmdStack($hash,
|
||||
sprintf("++A001%s%s%02X0500000000%02X",$src,$dst,$chn,$list));
|
||||
my $tl = length($content);
|
||||
for(my $l = 0; $l < $tl; $l+=28) {
|
||||
my $ml = $tl-$l < 28 ? $tl-$l : 28;
|
||||
CUL_HM_PushCmdStack($hash,
|
||||
sprintf("++A001%s%s%02X08%s", $src,$dst,$chn, substr($content,$l,$ml)));
|
||||
}
|
||||
CUL_HM_PushCmdStack($hash,
|
||||
sprintf("++A001%s%s%02X06",$src,$dst,$chn));
|
||||
}
|
||||
|
||||
1;
|
||||
|
@ -70,11 +70,12 @@
|
||||
<a href="http://localhost:8083/fhem">http://localhost:8083/fhem</a>
|
||||
or
|
||||
<a href="http://localhost:8084/fhem">http://localhost:8084/fhem</a> if
|
||||
you are using a small-screen browser (e.g a smartphone).<br><br>
|
||||
you are using a a smartphone.<br><br>
|
||||
|
||||
Attach the USB device (CUL, FHZ1000PC/FHZ1300, EM1010PC) to your
|
||||
computer, and look for the corresponding device in the /dev
|
||||
directory.<br> For CUL a file named /dev/ttyACM* will be created under
|
||||
directory. For <a href="commandref.html#CUL">CUL</a> a file named
|
||||
/dev/ttyACM* will be created under
|
||||
Linux and /dev/cu.usbmodem* under OS X. Note the exact name of the device.
|
||||
Define it for fhem (by typing it in the "Fhem cmd" input field in the
|
||||
browser):<pre>
|
||||
@ -94,10 +95,10 @@
|
||||
<br><br>
|
||||
<b>Note:</b> Don't forget to type "save" in the "Fhem cmd" input field of
|
||||
the browser after defining a device or setting its attribute. Otherwise
|
||||
the changes will disappear after the next start.<br><br> </ul>
|
||||
the changes will disappear after the next start.</ul>
|
||||
|
||||
<a name="autocreate"></a>
|
||||
<h3>Automatically creating transmitters</h3>
|
||||
<h3>Configuring transmitter devices</h3>
|
||||
<ul>
|
||||
The sample configuration file installed via "make install-pgm2" has
|
||||
configured an <a href="commandref.html#autocreate">autocreate</a>
|
||||
@ -108,33 +109,34 @@
|
||||
rename</a> to rename the automatically created device, e.g. type in the
|
||||
input field of the web frontend:<pre>
|
||||
rename FHT_1234 fht.kitchen</pre>
|
||||
<b>NOTE</b>: you have to rename the device itself, the attached FileLog
|
||||
|
||||
<b>Note</b>: if you rename the device itself, the attached FileLog
|
||||
and weblink will be renamed automatically. The other way round (renaming
|
||||
the FileLog or weblink) does not work correctly right now.
|
||||
</ul>
|
||||
|
||||
|
||||
<a name="FS20tx"></a>
|
||||
<h3>Misc. RF transmitters (FS20/EM/S300 etc.)</h3>
|
||||
<ul>
|
||||
<a href="commandref.html#autocreate">autocreate</a> will create
|
||||
automatically fhem FS20/EM/S300/HMS devices, the following description is
|
||||
for doing it manually.<br><br>
|
||||
the FileLog or weblink) will not rename the associated devices
|
||||
automatically.<br><br>
|
||||
|
||||
If you want to do the same manually:<br>
|
||||
Wait a while, until the transmitter sent some data. In the logfile
|
||||
(Browser window: "All together" -> Logs:Logfile:text) a line
|
||||
will appear:<pre>
|
||||
FS20 Unknown device <HOUSECODE, Button <BTN> Code <CDE>, please define it</pre>
|
||||
FS20 Unknown device <HOUSECODE>, Button <BTN> Code <CDE>, please define it</pre>
|
||||
|
||||
Now define a device:<pre>
|
||||
Now define the fhem device:<pre>
|
||||
define piri1 FS20 <HOUSECODE> <BTN></pre>
|
||||
|
||||
Set the model attribute of the device:<pre>
|
||||
attr lamp1 model fs20piri</pre>
|
||||
attr piri1 model fs20piri</pre>
|
||||
|
||||
to get only the commands available for this device.
|
||||
<a href="commandref.html#model">Here</a> is a complete list of FS20
|
||||
models.<br> For other device-types similar messages should appear.
|
||||
models.<br> For other device types similar messages should appear.<br><br>
|
||||
|
||||
<b>Note:</b> Creating a fhem FHT device automatically or manually does
|
||||
not imply that the CUL or the FHZ is paired with it. For this purpose you
|
||||
have to set the FHT to accept new devices (Prog:Cent:N/A), and send a command to
|
||||
it (e.g. set fht.kitchen desired-temp 20).
|
||||
If there is no signal for a while, then check <a href="faq.html#faq6">
|
||||
this</a> FAQ entry.
|
||||
</ul>
|
||||
|
||||
<a name="FS20rx"></a>
|
||||
@ -144,7 +146,7 @@
|
||||
fhem first with:<pre>
|
||||
define lamp1 FS20 1234 56</pre>
|
||||
|
||||
Now press the button on the device for a while until its LED starts to
|
||||
Now press the button on the real device for a while until its LED starts to
|
||||
blink. Click on the "on" link in the fhem window to send a command. The
|
||||
LED should terminate blinking, the device is programmed to housecode
|
||||
1234, device code 56. You can also use the 4-base ELV notation.
|
||||
@ -152,48 +154,16 @@
|
||||
attr lamp1 model fs20st</pre>
|
||||
|
||||
to get only the commands available for this device.
|
||||
<a href="commandref.html#model">Here</a> is a complete list of models.
|
||||
</ul>
|
||||
|
||||
|
||||
<a name="FHT"></a>
|
||||
<h3>Configuring FHT devices</h3>
|
||||
<ul>
|
||||
<b>Note:</b> Creating a fhem FHT device automatically or manually does
|
||||
not imply that the CUL or the FHZ is paired with it. For this purpose you
|
||||
have to set the FHT to accept new "Cent" devices, and send a command to
|
||||
it (e.g. set fht.kitchen desired-temp 20)<br><br>
|
||||
|
||||
<a href="commandref.html#autocreate">autocreate</a> will create
|
||||
automatically FHT devices, the following description is for
|
||||
doing it manually.<br><br>
|
||||
|
||||
Wait for a while (2-5 mins) till the FHT is sending some signals. In the
|
||||
logfile ("All together" -> Logs:LogFile:text) a line should
|
||||
appear:<br><pre>
|
||||
FHZ1: Unknown FHT device detected, define one to get detailed information</pre>
|
||||
|
||||
Define your FHT device with an arbitrary code in order to load the FHT
|
||||
module, see <a href="commandref.html#FHT">this</a> link for details:<pre>
|
||||
define MyFHT FHT 1111</pre>
|
||||
|
||||
The next message in the log will contain more details:<pre>
|
||||
FHT Unknown device <HOUSECODE>, please define it</pre>
|
||||
|
||||
Delete and create your device again:<pre>
|
||||
delete MyFHT
|
||||
define MyFHT FHT <HOUSECODE></pre>
|
||||
|
||||
If there is no signal for a while, then check <a href="faq.html#faq6">
|
||||
this</a> FAQ entry.
|
||||
</ul>
|
||||
|
||||
<a name="at"></a>
|
||||
<h3>Timed commands / Notification</h3>
|
||||
<ul>
|
||||
To execute commands at a given time / periodically, you have to define
|
||||
devices of the type at. See the definition <a href="commandref.html#at">
|
||||
here</a> and the examples <a href="example.06_at">here</a> The last link
|
||||
here</a> and the examples <a href="example.06_at">here</a>. The last link
|
||||
only works if you are reading this HOWTO from your fhem Web.<br><br>
|
||||
|
||||
To execute commands if a device sent a message you have to define
|
||||
@ -219,7 +189,7 @@
|
||||
"Unsorted" room. Devices in the room "hidden" will not be shown.
|
||||
<br><br>
|
||||
|
||||
Set the title of the webpage by setting the title attribute of the global
|
||||
Set the title of the webpage by setting the <code>title</code> attribute of the global
|
||||
device ("All together" -> global)<br><br>
|
||||
|
||||
Edit the colors / fonts by changing the style.css ("Edit files" ->
|
||||
@ -231,12 +201,17 @@
|
||||
<a href="commandref.html#plotsize">plotsize</a>.
|
||||
</ul>
|
||||
|
||||
|
||||
<a name="log"></a>
|
||||
<h3>Logging data</h3>
|
||||
<ul>
|
||||
To log messages into files, define devices of the type <a
|
||||
href="commandref.html#FileLog">FileLog</a>. Autocreate will create
|
||||
logfiles for newly detected devices. To log messages into a
|
||||
logfiles for newly detected devices, or you can use <a
|
||||
href="commandref.html#createlog">createlog</a> in order to add a FileLog
|
||||
later.<br>
|
||||
|
||||
To log messages into a
|
||||
database, see the contrib/dblog directory in the fhem
|
||||
distribution.<br><br>
|
||||
|
||||
@ -255,100 +230,108 @@
|
||||
<h3>Plotting logs</h3>
|
||||
<ul>
|
||||
Autocreate will create weblinks (i.e. plots) for newly detected devices.
|
||||
The following section describes how to do it manually.<br>
|
||||
The following section describes how to do it manually.<br><br>
|
||||
|
||||
To convert a log into a plot in FHEMWEB, set the
|
||||
To convert a FileLog into a plot (chart) in FHEMWEB, set the
|
||||
<a href="commandref.html#logtype">logtype</a> attribute of the
|
||||
corresponding FileLog. Take a look at the available gnuplot files in the
|
||||
"Edit files" section, they contain the corresponding FileLog definition
|
||||
example.<br>
|
||||
Note that the .gplot files are also used if you use SVG output and
|
||||
not the gnuplot backend!<br><br>
|
||||
not the gnuplot backend!<br>
|
||||
Examples:<pre>
|
||||
attr em1000log logtype cul_em:Power,text
|
||||
attr fs20_log logtype fs20:Plot,text
|
||||
attr hms100th_log logtype hms:Plot,text
|
||||
</pre>
|
||||
|
||||
When displaying the plot, you can convert it into a "weblink" device,
|
||||
so that we can in turn have a room attribute to group more than one Plot
|
||||
together. If the weblink refers to the current logfile, then it will be
|
||||
stored as a CURRENT weblink, and it will always display the most recent
|
||||
log (you do not have to redefine it if the logfile changes due to
|
||||
year/month/date parameters in its name).
|
||||
|
||||
When displaying the plot, you can convert it into a "weblink", which can
|
||||
in turn have a room attribute to group more than one Plot together. If
|
||||
the weblink refers to the current logfile, then it will be stored as a
|
||||
CURRENT weblink, and it will always display the most recent log (you do
|
||||
not have to redefine it if the logfile changes due to year/month/date
|
||||
parameters in its name).
|
||||
<br><br>
|
||||
|
||||
|
||||
The logs can be converted to a plot either with gnuplot (which must be
|
||||
installed and in your PATH), or via the builtin SVG module, in this case
|
||||
your internet browser must support SVG. Firefox, opera and the
|
||||
iPhone/Android borwser support SVG out of the box, Internet Explorer does
|
||||
it via the Adobe "SVG viewer" plugin. SVG mode is the default, to change
|
||||
it set the <a href="commandref.html#plotmode">plotmode</a> attribute to
|
||||
gnuplot or gnuplot-scroll.<br><br>
|
||||
your browser must support SVG. Firefox, Opera, Chrome, Safari
|
||||
(on the iPhone/iPad too) support SVG out of the box, Internet Explorer does
|
||||
it via the Adobe "SVG viewer" plugin, Android does not support it (as of
|
||||
2011/02).
|
||||
SVG mode is the default, to change it set the <a
|
||||
href="commandref.html#plotmode">plotmode</a> attribute to gnuplot or
|
||||
gnuplot-scroll.<br><br>
|
||||
|
||||
In order to look at historic data, you can either convert at the
|
||||
archive entries to weblink in "plotmode=gnuplot" mode, or use the
|
||||
"plotmode=gnuplot-scroll" or "plotmode=SVG" modes. In the latter case
|
||||
you'll get the possibility to zoom or scroll in the plot.<br><br>
|
||||
|
||||
Use the zoom and scroll icons at the top of the page.<br><br>
|
||||
|
||||
The current time scope (day, week, month..) set at the overview
|
||||
page (containing weblinks) will also be used for graphics you open via
|
||||
links (current log or archive) - there are no zoom and scroll icons
|
||||
there.<br><br>
|
||||
"plotmode=gnuplot-scroll" or "plotmode=SVG" modes. fnuplot-scroll and SVG
|
||||
offer the possibility to zoom or scroll in the plot, see the arrow and
|
||||
magnifier icons at the top of the page.<br><br>
|
||||
|
||||
Note: the gnuplot files must have #FileLog entries in order to be
|
||||
useable with scrolling, as the filtering happens with the FileLog get
|
||||
function, see the supplied gnuplot files for an example.<br><br>
|
||||
function, see the supplied gnuplot files for an example or the
|
||||
column_spec paragraph <a href="commandref.html#FileLogget">here</a> for
|
||||
the syntax.<br><br>
|
||||
|
||||
The order of the #FileLog lines need to match the corresponding
|
||||
'awk'-(double-)lines!<br><br>
|
||||
The order of the #FileLog lines must match the corresponding 'awk'
|
||||
entries.<br><br>
|
||||
|
||||
It make sense to build large logfiles for scrolling in them (year
|
||||
resolution), or smaller ones if you do not want to use the zoom/scroll
|
||||
feature. The size of the logfiles will be determined by its wildcard
|
||||
characters (year/month/week/day), look at the FileLog definition.
|
||||
Don't forget to enable archiving with the archivedir or archivecmd
|
||||
attributes.<br><br>
|
||||
</ul>
|
||||
|
||||
<a name="tips"></a>
|
||||
<h3>FHEMWEB tips</h3>
|
||||
<ul>
|
||||
Click on the State link on the device page to get a documentation of
|
||||
all its settable values, similarly clicking on Attributes will guide you
|
||||
Click on the State link on the detail page to get a documentation of
|
||||
all its settable values, similarly clicking on "Attribute" will guide you
|
||||
to the documentation of its attributes.
|
||||
<br><br>
|
||||
|
||||
Password/HTTPS<br>
|
||||
These features are implemented by apache, and apache must be configured
|
||||
to redirect the page to 01_FHEMWEB.pm. For this purpose add the following
|
||||
lines to your httpd.conf:<pre>
|
||||
<Proxy *>
|
||||
AuthType Basic
|
||||
AuthName "Password Required"
|
||||
AuthUserFile /home/httpd/etc/passwd
|
||||
Require valid-user
|
||||
Allow from 127.0.0.1
|
||||
</Proxy>
|
||||
ProxyPass /fhem http://localhost:8083/fhem
|
||||
ProxyPassReverse /fhem http://localhost:8083/fhem</pre>
|
||||
|
||||
and then restart httpd with apachectl graceful. To create the password
|
||||
file, execute<br>
|
||||
htpasswd -c /home/httpd/etc/passwd <username>
|
||||
<br>
|
||||
See also <a href="http://fhemwiki.de/index.php/Apache_Authentication_Proxy">
|
||||
this</a> fhemwiki entry for a more detailed description.
|
||||
<br><br>
|
||||
|
||||
To enable HTTPS, please check the web. In essence:<br>
|
||||
There are two different ways to enable <b>Password and HTTPS</b><br><br>
|
||||
<ul>
|
||||
<li>Edit httpd.conf, add:<pre>
|
||||
LoadModule ssl_module lib/apache/mod_ssl.so
|
||||
Include /etc/httpd/conf/ssl.conf</pre></li>
|
||||
<li>Create a server certificate</li>
|
||||
<li>Start httpd with the startssl option (SSL or the like must be set in
|
||||
one of your system files, look at /etc/init.d/httpd).</li>
|
||||
<li>Using the builtin features of FHEMWEB for <a
|
||||
href="commandref.html#basicAuth">basic</a> html authentication and <a
|
||||
href="commandref.html#HTTPS">HTTPS</a>. <br><br>
|
||||
|
||||
<li>Using apache to implement this features, and redirect a certain prefix to
|
||||
each FHEMWEB instance.<br>
|
||||
Add the following lines to your httpd.conf:<pre>
|
||||
<Proxy *>
|
||||
AuthType Basic
|
||||
AuthName "Password Required"
|
||||
AuthUserFile /home/httpd/etc/passwd
|
||||
Require valid-user
|
||||
Allow from 127.0.0.1
|
||||
</Proxy>
|
||||
ProxyPass /fhem http://localhost:8083/fhem
|
||||
ProxyPassReverse /fhem http://localhost:8083/fhem</pre>
|
||||
|
||||
and then restart httpd with apachectl graceful. To create the password
|
||||
file, execute<br>
|
||||
htpasswd -c /home/httpd/etc/passwd <username>
|
||||
<br>
|
||||
See also <a href="http://fhemwiki.de/index.php/Apache_Authentication_Proxy">
|
||||
this</a> fhemwiki entry for a more detailed description.
|
||||
<br><br>
|
||||
|
||||
To enable HTTPS, please check the web. In essence:<br>
|
||||
<ul>
|
||||
<li>Edit httpd.conf, add:<pre>
|
||||
LoadModule ssl_module lib/apache/mod_ssl.so
|
||||
Include /etc/httpd/conf/ssl.conf</pre></li>
|
||||
<li>Create a server certificate</li>
|
||||
<li>Start httpd with the startssl option (SSL or the like must be set in
|
||||
one of your system files, look at /etc/init.d/httpd).</li>
|
||||
</ul>
|
||||
<br><br>
|
||||
</ul>
|
||||
<br><br>
|
||||
|
||||
To display "foreign" (non fhem) files as a plot or a just as plain text,
|
||||
configure a fake logfile with the correct filename and an unused regexp,
|
||||
|
@ -2445,6 +2445,24 @@ A line ending with \ will be concatenated with the next one, so long lines
|
||||
set 4Dis text 1 off Kitchen Off<br>
|
||||
</ul>
|
||||
</ul></li>
|
||||
<li>Thermostat (HM-CC-TC)
|
||||
<ul>
|
||||
<li>day-temp <tmp><br>
|
||||
night-temp <tmp><br>
|
||||
Set the day or night temperature. Temp must be between 6 and 30
|
||||
Centigrade, and precision is half a degree.
|
||||
<li>tempListSat HH:MM temp 24:00 temp ...<br>
|
||||
tempListSun HH:MM temp 24:00 temp ...<br>
|
||||
tempListMon HH:MM temp 24:00 temp ...<br>
|
||||
tempListTue HH:MM temp 24:00 temp ...<br>
|
||||
tempListThu HH:MM temp 24:00 temp ...<br>
|
||||
tempListWed HH:MM temp 24:00 temp ...<br>
|
||||
tempListFri HH:MM temp 24:00 temp ...<br>
|
||||
Specify a list of temperature intervals. Up to 24 intervals can be
|
||||
spacified for each week day, the resolution is 10 Minutes. The
|
||||
last time spec must always be 24:00.<br>
|
||||
Example: set th tempListSat 06:00 19 23:00 22.5 24:00 19<br>
|
||||
</ul></li>
|
||||
</ul>
|
||||
<br>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user