| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861 |
- ##############################################
- # $Id: 98_QRCode.pm 13209 2017-01-23 15:35:11Z Benni $
- ##############################################
- 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
|