mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 16:56:54 +00:00
98_QRCode: new module for generating QRCodes
git-svn-id: https://svn.fhem.de/fhem/trunk@13209 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
489091a0f3
commit
cd330ffe0e
@ -1,5 +1,7 @@
|
||||
# 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.
|
||||
- new: 98_QRCode.pm: Creating QRCodes for various purposes.
|
||||
QRCodes ar generated by a web service.
|
||||
- bugfix: 98_DOIFtools.pm: fixed Error: >name< has no TYPE, but following
|
||||
keys: >< which occurs during a statistics report generation if
|
||||
devices are deleted during event recording before
|
||||
|
860
fhem/FHEM/98_QRCode.pm
Normal file
860
fhem/FHEM/98_QRCode.pm
Normal file
@ -0,0 +1,860 @@
|
||||
##############################################
|
||||
# $Id$
|
||||
##############################################
|
||||
|
||||
package main;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use POSIX;
|
||||
|
||||
#use Encode qw(encode);
|
||||
|
||||
my $version='0.95';
|
||||
|
||||
my $apiurl='http://qrcode.tec-it.com/API/QRCode';
|
||||
my $service='TEC-IT';
|
||||
|
||||
my $modulename='QRCode'; #Module-Name = TYPE
|
||||
my $defsyntax="define <name> $modulename";
|
||||
|
||||
my $defImgPath='/tmp';
|
||||
|
||||
my $defWidth=200;
|
||||
my $defHeight=200;
|
||||
|
||||
|
||||
sub
|
||||
#======================================================================
|
||||
QRCode_Log3($$$)
|
||||
#======================================================================
|
||||
#Using my own Log3 method, expecting the same
|
||||
#parameters as the official method
|
||||
#QRCode_Log3 <devicename>,<loglevel>,<logmessage>
|
||||
#making sure, the device-name is always contained in the log message
|
||||
{
|
||||
my ($name,$lvl,$text)=@_;
|
||||
Log3 $name,$lvl,"$name: $text";
|
||||
return undef;
|
||||
}
|
||||
|
||||
|
||||
sub
|
||||
#======================================================================
|
||||
QRCode_Initialize($)
|
||||
#======================================================================
|
||||
#Module instance initialization (constructor)
|
||||
{
|
||||
my ($hash) = @_;
|
||||
|
||||
#Telling FHEM what routines to use for module handling
|
||||
$hash->{SetFn} = $modulename."_Set"; #setter
|
||||
$hash->{DefFn} = $modulename."_Define"; #define
|
||||
$hash->{FW_detailFn} = $modulename."_FWDetail";
|
||||
$hash->{AttrFn} = $modulename."_Attr";
|
||||
$hash->{NotifyFn} = $modulename."_Notify";
|
||||
|
||||
#Telling FHEM what attributes are available
|
||||
$hash->{AttrList} =
|
||||
"qrData:textField " #Text für den QRCode im generic Modus
|
||||
. "qrSize:small,medium,large "
|
||||
. "qrColor "
|
||||
. "qrBackColor "
|
||||
. "qrTransparent:True,False "
|
||||
. "qrQuietZone "
|
||||
. "qrQuietUnit:mm,in,mil,mod,px "
|
||||
. "qrCodepage:UTF8,Cyrillic,Ansi "
|
||||
. "qrResolutionDPI "
|
||||
. "qrErrorCorrection:L,M,Q,H "
|
||||
. "qrDisplayWidth "
|
||||
. "qrDisplayHeight "
|
||||
. "qrDisplayData:0,1 "
|
||||
. "qrNoAutoUpdate:1 "
|
||||
. "qrDisplayNoImage:1 "
|
||||
. "qrDisplayNoText:1 "
|
||||
. "qrDisplayText:textField-long "
|
||||
#. "qrDeliveryMethod:Base64,Image,Download " # We only use 'Image'
|
||||
. $readingFnAttributes; #default FHEM FnAttributes -> see commandref.
|
||||
}
|
||||
|
||||
|
||||
sub
|
||||
#======================================================================
|
||||
QRCode_Set($@)
|
||||
#======================================================================
|
||||
#Setter - Handling set commands for device
|
||||
{
|
||||
my ($hash, @a) = @_;
|
||||
my $name = shift @a;
|
||||
my $cmd=shift @a;
|
||||
#Currently only the update command is available to refressh
|
||||
#feed date
|
||||
if ($cmd eq 'update') {
|
||||
QRCode_update(@_);
|
||||
}
|
||||
else {
|
||||
return "Unknown argument $cmd, choose one of update:noArg";
|
||||
}
|
||||
|
||||
return undef;
|
||||
}
|
||||
|
||||
sub
|
||||
#======================================================================
|
||||
QRCode_Define($$)
|
||||
#======================================================================
|
||||
#defining the device using following syntax
|
||||
#define <name> QRCode
|
||||
{
|
||||
my ($hash, $def) = @_;
|
||||
my @a = split("[ \t][ \t]*", $def);
|
||||
|
||||
#Check if at least 2 arguments are specified (name and url)
|
||||
return "Wrong syntax: use $defsyntax" if(int(@a) != 2);
|
||||
|
||||
my $name = shift @a;
|
||||
my $type = shift @a;
|
||||
|
||||
$hash->{SERVICE}=$service;
|
||||
$hash->{APIURL}=$apiurl;
|
||||
$hash->{NOTIFYDEV}='global';
|
||||
$hash->{VERSION}=$version;
|
||||
|
||||
#setting initial state reading for device
|
||||
readingsSingleUpdate($hash,'state','defined',1);
|
||||
|
||||
return undef;
|
||||
|
||||
}
|
||||
|
||||
#======================================================================
|
||||
sub QRCode_Attr ($$$$)
|
||||
#======================================================================
|
||||
#Checking Attributes for validity
|
||||
{
|
||||
my ( $cmd, $name, $attrName, $attrValue ) = @_;
|
||||
|
||||
my $error=undef;
|
||||
|
||||
if($cmd eq 'set') {
|
||||
QRCode_Log3 $name,4,"checking new attribute value $attrName=$attrValue";
|
||||
|
||||
if($attrName eq 'qrResolutionDPI') {
|
||||
$error='dpi value is out of range (96...600)'
|
||||
if($attrValue < 96 || $attrValue > 600);
|
||||
}
|
||||
elsif ($attrName eq 'qrTransparent') {
|
||||
$error='transparent flag must be set to True or False'
|
||||
if($attrValue !~ /(True|False)/);
|
||||
}
|
||||
elsif ($attrName eq 'qrSize') {
|
||||
$error='size must be one of small, medium or large'
|
||||
if ($attrValue !~ /(small|medium|large)/);
|
||||
}
|
||||
elsif ($attrName =~ /(qrBackColor|qrColor)/) {
|
||||
$error='color must be a hex color RGB value (e.g. FF0000 for red)'
|
||||
if ($attrValue !~ /^(?:[0-9a-fA-F]{3}){1,2}$/);
|
||||
}
|
||||
elsif ($attrName eq 'qrQuietUnit') {
|
||||
$error='unit must be one of mm,in,mil,mod,px'
|
||||
if ($attrValue !~/(mm|in|mil|mod|px)/);
|
||||
}
|
||||
elsif ($attrName eq 'qrErrorCorrection') {
|
||||
$error='error correction must be one of L,M,Q,H'
|
||||
if ($attrValue !~ /^[LMQH]$/);
|
||||
}
|
||||
elsif ($attrName eq 'qrCodepage') {
|
||||
$error='codepage must be one of UTF8,Cyrillic,Ansi'
|
||||
if ($attrValue !~ /(UTF8|Cyrillic|Ansi)/);
|
||||
}
|
||||
elsif ($attrName =~/(qrQuietZone|qrDisplayHeight|qrDisplayWidth)/) {
|
||||
$error='value must be a positive number'
|
||||
if ($attrValue <= 0);
|
||||
}
|
||||
elsif ($attrName =~ /(qrNoAutoUpdate|qrDisplayNoImage|qrDisplayNoText)/) {
|
||||
$error='value can be only set to 1 (otherwise delete the attribute)'
|
||||
if ($attrValue != 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $error;
|
||||
}
|
||||
|
||||
|
||||
#======================================================================
|
||||
sub QRCode_Notify($$)
|
||||
#======================================================================
|
||||
#Getting notifications to enable auto update feature when attributes
|
||||
#are changed that are relevant for url and QRCode generation
|
||||
{
|
||||
return undef unless ($init_done);
|
||||
|
||||
my ($hash,$dev)=@_;
|
||||
|
||||
my $name=$hash->{NAME};
|
||||
my $src=$dev->{NAME};
|
||||
|
||||
my $needsUpdate=undef;
|
||||
|
||||
if($src eq 'global') {
|
||||
foreach my $event (@{$dev->{CHANGED}})
|
||||
{
|
||||
QRCode_Log3 $name,4,"global event for $name: $event";
|
||||
|
||||
my @evtArray = split /\s+/, $event;
|
||||
|
||||
my $cmd=$evtArray[0];
|
||||
|
||||
QRCode_Log3 $name,4,"event is $cmd";
|
||||
|
||||
|
||||
if($cmd =~ /.*ATTR/) {
|
||||
my $devName=$evtArray[1];
|
||||
my $attrName=$evtArray[2];
|
||||
QRCode_Log3 $name,4,"attribute $attrName of $devName";
|
||||
|
||||
if($devName eq $name) {
|
||||
if($attrName =~ /^(qrData|qrSize|qrColor|qrBackColor|qrTransparent|qrQuietZone|qrQuietUnit|qrCodepage|qrResolutionDPI|qrErrorCorrection)$/) {
|
||||
QRCode_Log3 $name,4,"$name auto update relevant attribute changed";
|
||||
$needsUpdate=1;
|
||||
}
|
||||
} else {
|
||||
QRCode_Log3 $name,4,"only checking own attributes this one was for $devName -> ignoring!";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QRCode_Log3 $name,5,"$name was notified by $src erhalten";
|
||||
|
||||
foreach my $event (@{$dev->{CHANGED}})
|
||||
{
|
||||
QRCode_Log3 $name,5,"$src EVENT: $event";
|
||||
}
|
||||
|
||||
if($needsUpdate && !AttrVal($name,'qrNoAutoUpdate',undef)) {
|
||||
QRCode_Log3 $name,4,"auto updating ...";
|
||||
QRCode_update($hash);
|
||||
}
|
||||
|
||||
return undef;
|
||||
}
|
||||
|
||||
sub
|
||||
#======================================================================
|
||||
QRCode_update(@)
|
||||
#======================================================================
|
||||
#This subroutine is actually doing the update of QRCode-url
|
||||
{
|
||||
|
||||
my ($dhash,@a)=@_;
|
||||
|
||||
my $name=$dhash->{NAME};
|
||||
my $errText='';
|
||||
|
||||
QRCode_Log3 $name,4,'updating url ...';
|
||||
|
||||
#Check if something wrong with the device's hash.
|
||||
if (!$name) {
|
||||
$errText='Unable to extract device name';
|
||||
QRCode_Log3($modulename.'_update',3,$errText);
|
||||
readingsSingleUpdate($dhash,'data',$errText,1);
|
||||
#readingsSingleUpdate($dhash,'error',1,1);
|
||||
$defs{$name}{ERROR}=1;
|
||||
return;
|
||||
}
|
||||
|
||||
#Getting Api-URL from internals
|
||||
my $url=InternalVal($name,'APIURL','');
|
||||
if (!$url) {
|
||||
#If there's no URL in internals, something is very wrong (see define)
|
||||
$errText='APIURL is not defined';
|
||||
QRCode_Log3($modulename.'_update',3,$errText);
|
||||
readingsSingleUpdate($dhash,'data',$errText,1);
|
||||
#readingsSingleUpdate($dhash,'error',1,1);
|
||||
$defs{$name}{ERROR}=1;
|
||||
return;
|
||||
}
|
||||
|
||||
delete($defs{$name}{ERROR}) if defined ReadingsVal($name,'error',undef);
|
||||
|
||||
my $data=AttrVal($name,'qrData',undef);
|
||||
if(!$data) {
|
||||
$errText='No data to encode! Attribute qrData not defined!';
|
||||
QRCode_Log3($modulename.'_update',3,$errText);
|
||||
readingsSingleUpdate($dhash,'data',$errText,1);
|
||||
#readingsSingleUpdate($dhash,'error',1,1);
|
||||
$defs{$name}{ERROR}=1;
|
||||
return;
|
||||
}
|
||||
|
||||
delete($defs{$name}{ERROR}) if defined InternalVal($name,'ERROR',undef);
|
||||
|
||||
my $encdata=urlEncode($data);
|
||||
|
||||
$url.="?data=$encdata";
|
||||
|
||||
my $fcolor=AttrVal($name,'qrColor',undef);
|
||||
$url.="&color=$fcolor" if($fcolor && $fcolor ne '000000');
|
||||
|
||||
my $transp=AttrVal($name,'qrTransparent',undef);
|
||||
$url.="&istransparent=$transp" if($transp && $transp ne 'False');
|
||||
|
||||
my $bcolor=AttrVal($name,'qrBackColor',undef);
|
||||
$url.="&backcolor=$bcolor" if($bcolor && $bcolor !~ /^(?:[fF]{3}){1,2}$/ && !$transp);
|
||||
|
||||
my $qzone=AttrVal($name,'qrQuietZone',undef);
|
||||
$url.="&quietzone=$qzone" if($qzone && $qzone > 0);
|
||||
|
||||
my $qunit=AttrVal($name,'qrQuietUnit',undef);
|
||||
$url.="&quietunit=$qunit" if($qunit && $qunit ne 'mm' );
|
||||
|
||||
my $cerr=AttrVal($name,'qrErrorCorrection',undef);
|
||||
$url.="&errorcorrection=$cerr" if($cerr && $cerr ne 'L');
|
||||
|
||||
my $cpage=AttrVal($name,'qrCodepage',undef);
|
||||
$url.="&codepage=$cpage" if($cpage && $cpage ne 'UTF8');
|
||||
|
||||
my $dpi=AttrVal($name,'qrResolutionDPI',undef);
|
||||
$url.="&dpi=$dpi" if($dpi && $dpi != 300);
|
||||
|
||||
my $size=AttrVal($name,'qrSize',undef);
|
||||
$url.="&size=$size" if($size && $ size ne 'medium');
|
||||
|
||||
my $response = GetFileFromURLQuiet($url,5,undef,1);
|
||||
QRCode_Log3 $name,5,"--- BOF ---";
|
||||
QRCode_Log3 $name,5,$response;
|
||||
QRCode_Log3 $name,5,"--- EOF ---";
|
||||
|
||||
# Maybe I'll do a caching of the created QRCode later
|
||||
# my $fpath=AttrVal($name,'qrFilePath',$defImgPath);
|
||||
# my $fname="$fpath/$name.png";
|
||||
# my @fcontent=($response);
|
||||
# my $err=FileWrite({ FileName=>$fname,ForceType=>"file",NoNL=>1 },@fcontent);
|
||||
|
||||
#Now starting update of the readings
|
||||
readingsBeginUpdate($dhash);
|
||||
|
||||
# readingsBulkUpdateIfChanged($dhash,'file_name',$fname);
|
||||
readingsBulkUpdateIfChanged($dhash,'data',$data);
|
||||
readingsBulkUpdateIfChanged($dhash,'qrcode_url',$url);
|
||||
readingsBulkUpdate($dhash,'state',TimeNow());
|
||||
|
||||
#mass updating/generation of readings is complete so
|
||||
#tell FHEM to update them now!
|
||||
readingsEndUpdate($dhash,1);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
#======================================================================
|
||||
sub QRCode_getHtml($;$$)
|
||||
#======================================================================
|
||||
#Generate the details HTML code for display in device details
|
||||
#or use with an weblink or something else.
|
||||
{
|
||||
my ($name,$noImage,$noText)=@_;
|
||||
|
||||
#Checking if device exists ...
|
||||
return "<div style=\"color:red\">$name is not defined</div>" if(!$defs{$name});
|
||||
#...and is of correct TYPE
|
||||
return "<div style=\"color:red\">$name is not of TYPE $modulename</div>" if(!($defs{$name}{'TYPE'} eq $modulename));
|
||||
|
||||
#Check for errors set by QRCode_update
|
||||
return '<div style="color:red">'.ReadingsVal($name,'data','unknown error!').'</div>'
|
||||
if(InternalVal($name,'ERROR',undef));
|
||||
|
||||
my $imageurl=ReadingsVal($name,'qrcode_url',undef);
|
||||
return '<div style="color:red">No image url available! Use set update to create it.</div>'
|
||||
if(!$imageurl);
|
||||
|
||||
|
||||
my $width='width="'.AttrVal($name,'qrDisplayWidth',$defWidth).'"';
|
||||
my $height='height="'.AttrVal($name,'qrDisplayHeight',$defHeight).'"';
|
||||
|
||||
my $ret = "<table>";
|
||||
|
||||
$ret .= "<tr><td rowspan=3>";
|
||||
$ret .= "<td>";
|
||||
$ret .= "<img $width $height src=\"".ReadingsVal($name,'qrcode_url',undef)."\"/>"
|
||||
if($imageurl && !$noImage);
|
||||
$ret .= "No image url available!<br>Use set update to create it"
|
||||
if(!$imageurl);
|
||||
$ret .= "</td></tr>";
|
||||
$ret .= "<tr><td>";
|
||||
my $stylecolor='';
|
||||
$stylecolor=' style="color:red"' if !AttrVal($name,'qrData',undef);
|
||||
$ret .= '<div'.$stylecolor.'>'.AttrVal($name,'qrData',ReadingsVal($name,'data','attr qrData n/a')).'</div>'
|
||||
if($imageurl && AttrVal($name,'qrDisplayData',undef) || !AttrVal($name,'qrData',undef));
|
||||
$ret .= "</td>";
|
||||
$ret .= "</tr>";
|
||||
|
||||
my $dtext=AttrVal($name,'qrDisplayText',undef);
|
||||
if ($dtext && !$noText && AttrVal($name,'qrData',undef)) {
|
||||
$dtext =~ s/\n/\<br\>/g;
|
||||
$ret .= "<tr><td>";
|
||||
$ret .= $dtext;
|
||||
$ret .= "</td></tr>";
|
||||
}
|
||||
$ret .= "</table>";
|
||||
|
||||
return $ret;
|
||||
|
||||
}
|
||||
|
||||
#======================================================================
|
||||
sub QRCode_FWDetail($@) {
|
||||
#======================================================================
|
||||
#Display the QRCode in device details in FHEMWEB
|
||||
my ($FW_wname, $name, $room, $pageHash) = @_;
|
||||
|
||||
QRCode_Log3 $name,4,"FWDetail.name=$name";
|
||||
|
||||
return QRCode_getHtml($name,AttrVal($name,'qrDisplayNoImage',undef),AttrVal($name,'qrDisplayNoText',undef));
|
||||
}
|
||||
|
||||
1;
|
||||
#======================================================================
|
||||
#======================================================================
|
||||
#
|
||||
# HTML Documentation for help and commandref
|
||||
#
|
||||
#======================================================================
|
||||
#======================================================================
|
||||
=pod
|
||||
=item device
|
||||
=item summary create and display QRCode in FHEMWEB
|
||||
=item summary_DE QRCode erzeugen und in FHEMWEB darstellen
|
||||
=begin html
|
||||
|
||||
<a name="QRCode"></a>
|
||||
<h3>QRCode</h3>
|
||||
<ul>
|
||||
Devices of this module are used to generate an URL that will be used to generate
|
||||
and receive a QRCode from the service of TEC-IT<br/>
|
||||
The device will also display the generated QRCode in the device details. It can
|
||||
also provide the HTML-code used for display for other purposes (e.g. weblink devices)
|
||||
<br/><br/>
|
||||
<b>ATTENTION:</b>The sevice provider does not allow more than 30 QRCode generations / minute
|
||||
without special permission<br/><br/>
|
||||
See terms of sevice on TEC-IT homepage: http://qrcode.tec-it.com/de#TOS
|
||||
<br/><br/>
|
||||
|
||||
<a name="QRCodedefine"></a>
|
||||
<b>Define</b><br/>
|
||||
<ul>
|
||||
<code>define <name> QRCode</code>
|
||||
<br/><br/>
|
||||
</ul>
|
||||
<br/>
|
||||
|
||||
<a name="QRCodeset"></a>
|
||||
<b>Set</b><br/>
|
||||
<ul>
|
||||
<code>set <name> update</code><br/>
|
||||
Refreshes the QRCode-URL for Image generation.
|
||||
</ul>
|
||||
<br/>
|
||||
|
||||
<a name="QRCodeattr"></a>
|
||||
<b>Attributes</b><br/><br/>
|
||||
<ul>
|
||||
<b>QRCode-URL relevant attributes</b>
|
||||
<br/><br/>
|
||||
The following attributes take influence on the QRCode generation.
|
||||
<br/><br/>
|
||||
If one of those attributes is changed, per default an auto update of the QRCode-URL is performed.
|
||||
<br/><br/>
|
||||
<li><a name="qrData">qrData</a><br/>
|
||||
This attribute is used to set the data that will be encoded in the QRCode.<br/>
|
||||
If this attribute is not set an error message is generatet.
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrSize">qrSize</a><br/>
|
||||
Defines the size of the generated QRCode image<br/>
|
||||
Possible values are small, medium (default), large.
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrResolutionDPI">qrResolutionDPI</a><br/>
|
||||
Defines the resolution for QRCode generaation<br/>
|
||||
Valid values are between 96 and 600 (Default is 300dpi)
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrColor">qrColor</a><br/>
|
||||
Defines the foreground color of the genereted QRCode image<br/>
|
||||
This is a RGB color value in hex format (eg. FF0000 = red)
|
||||
Default is 000000 (black)
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrBackColor">qrBackColor</a><br/>
|
||||
Defines the background color of the genereted QRCode image<br/>
|
||||
This is a RGB color value in hex format (eg. 0000FF = blue)
|
||||
Default is FFFFFF (white).
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrTransparent">qrTransparent</a><br/>
|
||||
Defines that the background of the generated QRCode will be transparent<br/>
|
||||
Possible values are False (non-tranparent background) or True (transparent background)<br/>
|
||||
default is non-transparent.
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrQuietZone">qrQuietZone</a><br/>
|
||||
defines the size of a quiet zone around the QRCode in the image.<br/>
|
||||
This is a blank zone making it easier to scan the QRCode for some scanners.<br/>
|
||||
Default ist 0, if attribute is not set.
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrQuietUnit">qrQuietUnit</a><br/>
|
||||
specifies the unit for qrQuietZone attribute<br/>
|
||||
Possible values are mm (default), in (=inch), mil (=mils), mod (=Module) or px (=Pixel).
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrCodepage">qrCodepage</a><br/>
|
||||
Used Codepage for QRCode generation.<br/>
|
||||
Possible values are UTF8 (default), Cyrillic or Ansi
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrErrorCorrection">qrErrorCorrection</a><br/>
|
||||
Error correction used in generated QRCode image.<br/>
|
||||
Possible values are L (default), M,Q or H
|
||||
<br/><br/>
|
||||
</li>
|
||||
|
||||
<b>Display relevant attributes</b>
|
||||
<br/><br/>
|
||||
The followin Attribute change the behaviour and display parameters for the detail view<br/>
|
||||
of QRCode devices in FHEMWEB. Therfore it changes the result of QRCode_getHtml function<br/>
|
||||
(see below.)<br/><br/>
|
||||
In cas of an error, neither QRCode, nor qrDisplayText will be displayed. Instead<br/>
|
||||
an error message is displayed.
|
||||
<br/><br/>
|
||||
<li><a name="qrDisplayWidth">qrDisplayWidth</a><br/>
|
||||
display width of the QRCode image<br/>
|
||||
Default is 200
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrDisplayHeigth">qrDisplayHeight</a><br/>
|
||||
Display height of the QRCode image<br/>
|
||||
Default is 200
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrDisplayData">qrDisplayData</a><br/>
|
||||
If set the contents or the reading data is displayed below the QRCode image<br/>
|
||||
Usually this is the contents of attribute qrData.
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrDisplayNoImage">qrDisplaNoImage</a><br/>
|
||||
If set, the QRCode image will not be displayed
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrDisplayText">qrDisplaText</a><br/>
|
||||
user defined text to be displayed below QRCode image
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrDisplayNoText">qrDisplaNoText</a><br/>
|
||||
If this attribute is set, the text specified in qrDisplayText will not be displayed<br/>
|
||||
below QRCode image. So qrDisplayText doesn't have to be deleted.
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrNoAutoUpdate">qrNoAutoUpdate</a><br/>
|
||||
If set not auto update will be processed for QRCode relevant attributes.
|
||||
<br/><br/>
|
||||
</li>
|
||||
|
||||
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
|
||||
</ul>
|
||||
<br/><br/>
|
||||
|
||||
<a name="QRCodereadings"></a>
|
||||
<b>Generated Readings</b>
|
||||
<br/><br/>
|
||||
<ul>
|
||||
<br/>
|
||||
<li>data<br/>
|
||||
This reading contains the data to be encoded by the QRCode<br/>
|
||||
Usually this is the contents of attribute qrData.<br/>
|
||||
In case of an error it contains the error message.
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li>qrcode_url<br/>
|
||||
By <code>set update</code> generated URL, used to get the QRCode image<br/>
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li>state<br/>
|
||||
The state of the device<br/>
|
||||
Initially this is <code>defined</code> or the timestamp of last <code>set update</code>, or auto-update
|
||||
<br/><br/>
|
||||
</li>
|
||||
</ul>
|
||||
<br/><br/>
|
||||
|
||||
<a name="QRCodefunctions"></a>
|
||||
<b>Usefull Funktionen</b>
|
||||
<br/><br/>
|
||||
The module comes with a useful function to provide the HTML code used for display in detail view of the<br/>
|
||||
QRCode device in FHEMWEB for other purposes, e.g. weblink.
|
||||
<br/><br/>
|
||||
<ul>
|
||||
<br/>
|
||||
<li><code>QRCode_getHtml($;$$)</code><br/><br/>
|
||||
Returns the HTML code for the specified QRCode device
|
||||
<br/><br/>
|
||||
Arguments:
|
||||
<br/><br/>
|
||||
<ul>
|
||||
<li>QRCodeDevice<br/>
|
||||
Name of the QRCode device as a string.
|
||||
</li>
|
||||
<li>noImage (Optional)<br/>
|
||||
The same as attribute qrDisplayNoImage<br/>
|
||||
</li>
|
||||
<li>noText (Optional)<br/>
|
||||
The same as attribute qrDisplayNoText<br/>
|
||||
</li>
|
||||
</ul>
|
||||
<br/><br/>
|
||||
Example:
|
||||
<br/><br/>
|
||||
<code>QRCode_getHtml('MyQRCode',1,0)</code>
|
||||
<br/><br/>
|
||||
Generate HTML code of (QRCode-) device named MyQRCode with QRCode image but not with the<br/>
|
||||
user defined Text (qrDisplayText).
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
=end html
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
=begin html_DE
|
||||
|
||||
<a name="QRCode"></a>
|
||||
<h3>QRCode</h3>
|
||||
<ul>
|
||||
Mit hilfe dieses Moduls, kann auf einfache Weise eine URL generiert werden, mit
|
||||
der vom Dienstleister TEC-IT ein QRCode abgerufen werden kann.<br/>
|
||||
Ein Device dieses Moduls kann außerdem den QRCode auch selbst direkt in FHEMWEB
|
||||
darstellen und auch anderen Devices (bspw. weblink) als HTML zur Verfügung stellen.
|
||||
<br/><br/>
|
||||
<b>HINWEIS:</b> Es ist ohne schriftliche Genehmigung des Dienstaanbieters nur erlaubt,
|
||||
maximal 30 QRCode-Abrufe / Minute durchzuführen.<br/><br/>
|
||||
Siehe dazu auch die Nutzungsbedingungen von TEC-IT: http://qrcode.tec-it.com/de#TOS
|
||||
<br/><br/>
|
||||
|
||||
<a name="QRCodedefine"></a>
|
||||
<b>Define</b><br/>
|
||||
<ul>
|
||||
<code>define <name> QRCode</code>
|
||||
<br/><br/>
|
||||
</ul>
|
||||
<br/>
|
||||
|
||||
<a name="QRCodeset"></a>
|
||||
<b>Set</b><br/>
|
||||
<ul>
|
||||
<code>set <name> update</code><br/>
|
||||
Führt eine aktualisierung der QRCode-Url durch.
|
||||
</ul>
|
||||
<br/>
|
||||
|
||||
<a name="QRCodeattr"></a>
|
||||
<b>Attributes</b><br/><br/>
|
||||
<ul>
|
||||
<b>QRCode-URL-relevante Attribute</b>
|
||||
<br/><br/>
|
||||
Die folgenden Attribute sind für die Erzeugung der Abruf-URL relevant und haben somit<br/>
|
||||
direkten Einfluß auf die Erzeugung des QRCode-Images.<br/><br/>
|
||||
Für diese Attribute wird bei Änderung, standardmäßig ein automatisches Udate der QRCode-URL<br/>
|
||||
durchgeführt. Dies kann durch setzen des Attirbutes qrNoAutoUpdate (s.w.u.) deaktiviert werden.
|
||||
<br/><br/>
|
||||
<li><a name="qrData">qrData</a><br/>
|
||||
Dieses Attribut legt die Daten fest, die im QRCode kodiert werden sollen.<br/>
|
||||
Ist dieses Attribut nicht gesetzt, wird beim update eine entsprechende
|
||||
Fehlermeldung erzeugt.
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrSize">qrSize</a><br/>
|
||||
Dieses Attribut legt die Größe fest, in der das QRCode-Image erstellt werden
|
||||
soll.<br/> Mögliche Ausprägungen sind small, medium (default), large.
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrResolutionDPI">qrResolutionDPI</a><br/>
|
||||
Dieses Attribut legt die Auflösung fest, in der das QRCode-Image erstellt werden
|
||||
soll.<br/> Mögliche Werte liegen zwischen 96 und 600 (Default ist 300dpi)
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrColor">qrColor</a><br/>
|
||||
Dieses Attribut legt die Vordergrundfarbe fest, in der das QRCode-Image erstellt werden
|
||||
soll.<br/> Der Wert ist ein RGB-Farbwert in Hexadezimaler schreibweise (Bspw. FF0000 für rot)
|
||||
Default ist 000000 (schwarz)
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrBackColor">qrBackColor</a><br/>
|
||||
Dieses Attribut legt die Hintergrundfarbe fest, in der das QRCode-Image erstellt werden
|
||||
soll.<br/> Der Wert ist ein RGB-Farbwert in Hexadezimaler schreibweise (Bspw. 0000FF für blau)
|
||||
Default ist FFFFFF (weiß).
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrTransparent">qrTransparent</a><br/>
|
||||
Dieses Attribut legt fest, ob der Hintergrund transparent sein soll.<br/>
|
||||
Mögliche Werte sind True für transparenten Hintergrund und False für nicht-transparenten
|
||||
Hintergrund (default)
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrQuietZone">qrQuietZone</a><br/>
|
||||
Über diesen Wert kann eine Ruhe-Zone, also ein Rand um den eigentlichen QRCode festgelegt
|
||||
werden.<br/> Dies ermöglicht ggf. ein erleichtertes Erfassen des QRCodes beim Scannen.<br/>
|
||||
Mögliche Werte sind positive numerische Werte. Default ist 0, wenn das Attribut nicht gesetzt ist.
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrQuietUnit">qrQuietUnit</a><br/>
|
||||
Über diesen Wert kann die Maßeinheit für das Festlegen einer Ruhe-Zone eingestellt werden.<br/>
|
||||
Mögliche Ausptägungen sind mm (default), in (=inch), mil (=mils), mod (=Module) oder px (=Pixel).
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrCodepage">qrCodepage</a><br/>
|
||||
Über diesen Wert kann die Zeichentabelle für die QRCode-Erzeugung festgelegt werden.<br/>
|
||||
Mögliche Werte sind UTF8 (default), Cyrillic oder Ansi
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrErrorCorrection">qrErrorCorrection</a><br/>
|
||||
Über diesen Wert kann Fehlerkorrektur für die QRCode-Erzeugung festgelegt werden.<br/>
|
||||
Mögliche Werte sind L (default), M,Q oder H
|
||||
<br/><br/>
|
||||
</li>
|
||||
|
||||
<b>darstellungsrelevante Attribute</b>
|
||||
<br/><br/>
|
||||
Die folgenden Attribute haben nur Einfluß auf das Verhalten und die Darstellung in FHEMWEB<br/>
|
||||
in der Deatailansicht des QRCode-Devices, bzw. beim Abruf der HTML-Daten mittels
|
||||
QRCode_getHtml (s.u.)<br/><br/>
|
||||
Im Fehlerfall wird weder der QRCode, noch qrDisplayText dargestellt, sondern eine entsprechend<br/>
|
||||
Fehlermeldung stattdessen eingeblendet.
|
||||
<br/><br/>
|
||||
<li><a name="qrDisplayWidth">qrDisplayWidth</a><br/>
|
||||
Breite des Images bei der Darstellung in FHEMWEB in der Detailübersicht<br/>
|
||||
Default ist 200
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrDisplayHeigth">qrDisplayHeight</a><br/>
|
||||
Höhe des Images bei der Darstellung in FHEMWEB in der Detailübersicht<br/>
|
||||
Default ist 200
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrDisplayData">qrDisplayData</a><br/>
|
||||
Wenn dieses Attribut gesetzt ist, wird unterhalb des QRCodes der Datenteil als einfacher<br/>
|
||||
Text dargestellt.
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrDisplayNoImage">qrDisplaNoImage</a><br/>
|
||||
Wenn dieses Attribut gesetzt ist, der QRCode nicht in der Detailansicht dargestellt.
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrDisplayText">qrDisplaText</a><br/>
|
||||
Hier kann ein beliebiger Text eingetragen werden, der unterhalb des QRCodes eingeblendet werden soll.
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrDisplayNoText">qrDisplaNoText</a><br/>
|
||||
Ist dieses Attribut gesetzt, so wird der, im Attribut qrDisplayText eingetragene Text nicht
|
||||
eingeblendet, auch ohne das Attribut qrDisplayText zu löschen.
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li><a name="qrNoAutoUpdate">qrNoAutoUpdate</a><br/>
|
||||
Ist dieses Attribut gesetzt, so wird bei Änderung eines für die QRCode-Erzeugung relevanten<br/>
|
||||
Attributs kein automatisches Update der QRCode-URL durchgeführt.
|
||||
<br/><br/>
|
||||
</li>
|
||||
|
||||
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
|
||||
</ul>
|
||||
<br/><br/>
|
||||
|
||||
<a name="QRCodereadings"></a>
|
||||
<b>Erzeugte Readings</b>
|
||||
<br/><br/>
|
||||
<ul>
|
||||
<br/>
|
||||
<li>data<br/>
|
||||
Dieses Reading enthält die vom QRCode zu kodierenden Daten.<br/>
|
||||
Das ist im Normalfall der Inhalt aus dem Attribut qrData.<br/>
|
||||
Im Fehlerfall steht hier stattdessen der entsprechende Fehlertext.
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li>qrcode_url<br/>
|
||||
Dies ist die durch <code>set update</code> erzeugte URL, die für den Abruf des QRCode-Image<br/>
|
||||
verwendet wird.
|
||||
<br/><br/>
|
||||
</li>
|
||||
<li>state<br/>
|
||||
Status des QRCode-Device.<br/>
|
||||
Das ist entweder <code>defined</code>, oder der Zeitpunkt des letzten <code>set update</code>, bzw. auto-update
|
||||
<br/><br/>
|
||||
</li>
|
||||
</ul>
|
||||
<br/><br/>
|
||||
|
||||
<a name="QRCodefunctions"></a>
|
||||
<b>Enthaltene Funktionen</b>
|
||||
<br/><br/>
|
||||
Es gibt im Modul eine Funktion, die auch für andere Anwendungsfälle einsetzbar ist, wie bspw. in einem weblink
|
||||
<br/><br/>
|
||||
<ul>
|
||||
<br/>
|
||||
<li><code>QRCode_getHtml($;$$)</code><br/><br/>
|
||||
Die Funktion gibt den HTML-Code zurück, wie er auch für die Darstellung im QRCode-Device in der<br/>
|
||||
Detail-Ansicht verwendet wird.
|
||||
<br/><br/>
|
||||
Parameter:
|
||||
<br/><br/>
|
||||
<ul>
|
||||
<li>QRCodeDevice<br/>
|
||||
Hier ist der Name des QRCode-Devices anzugeben, dessen HTML-Code abgerufen werden soll.
|
||||
</li>
|
||||
<li>noImage (Optional)<br/>
|
||||
Entspricht dem Attribut qrDisplayNoImage<br/>
|
||||
Wenn dieser Parameter angezeigt wird, wird also keine Referenz auf QRCode-Image im HTML-Code<br/>
|
||||
erzeugt.
|
||||
</li>
|
||||
<li>noText (Optional)<br/>
|
||||
Entspricht dem Attribut qrDisplayNoText<br/>
|
||||
Wenn dieser Parameter angezeigt wird, wird also Benutzerdefinierter Text unterhalb des QRCode<br/>
|
||||
im HTML-Code erzeugt.
|
||||
</li>
|
||||
</ul>
|
||||
<br/><br/>
|
||||
Beispiel:
|
||||
<br/><br/>
|
||||
<code>QRCode_getHtml('MyQRCode',1,0)</code>
|
||||
<br/><br/>
|
||||
Damit wird der HTML-Code für das (QRCode-)Device MyQRCode abgerufen, das nur das Image enthält,<br>
|
||||
aber nicht den Benutzerdefinierten text.
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
=end html_DE
|
||||
|
||||
|
||||
=cut
|
@ -408,6 +408,7 @@ FHEM/98_notice.pm mfr69bs http://forum.fhem.de Sonstiges
|
||||
FHEM/98_pilight.pm andreas-fey http://forum.fhem.de Unterstuetzende Dienste
|
||||
FHEM/98_ping mattwire http://forum.fhem.de Sonstiges
|
||||
FHEM/98_powerMap loredo http://forum.fhem.de Unterstuetzende Dienste
|
||||
FHEM/98_QRCode.pm Benni http://forum.fhem.de Unterstuetzende Dienste
|
||||
FHEM/98_rain.pm baumrasen http://forum.fhem.de Sonstiges
|
||||
FHEM/98_restore.pm rudolfkoenig http://forum.fhem.de Sonstiges
|
||||
FHEM/98_rssFeed.pm Benni http://forum.fhem.de Unterstuetzende Dienste
|
||||
|
Loading…
x
Reference in New Issue
Block a user