From 7666c81cf6fcca58a4010f74b661097fe63aca5a Mon Sep 17 00:00:00 2001 From: ntruchsess <> Date: Wed, 26 Feb 2014 22:22:42 +0000 Subject: [PATCH] FRM_LCD: add writeXY as implemented by Wzut git-svn-id: https://svn.fhem.de/fhem/trunk@5061 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/20_FRM_LCD.pm | 68 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 6 deletions(-) diff --git a/fhem/FHEM/20_FRM_LCD.pm b/fhem/FHEM/20_FRM_LCD.pm index ade1c6a6c..f8688db13 100755 --- a/fhem/FHEM/20_FRM_LCD.pm +++ b/fhem/FHEM/20_FRM_LCD.pm @@ -19,12 +19,15 @@ use Device::Firmata::Constants qw/ :all /; my %sets = ( "text" => "", - "home" => "", - "clear" => "", + "home" => "noArg", + "clear" => "noArg", "display" => "on,off", "cursor" => "", "scroll" => "left,right", -); + "backlight" => "on,off", + "reset" => "noArg", + "writeXY" => "" + ); my %gets = ( ); @@ -151,12 +154,20 @@ sub FRM_LCD_Set(@) { return "Need at least one parameters" if(@a < 2); my $command = $a[1]; my $value = $a[2]; - return "Unknown argument $a[1], choose one of " . join(" ", sort keys %sets) - if(!defined($sets{$command})); + if(!defined($sets{$command})) { + my @commands = (); + foreach my $key (sort keys %sets) { + push @commands, $sets{$key} ? $key.":".join(",",$sets{$key}) : $key; + } + return "Unknown argument $a[1], choose one of " . join(" ", @commands); + } my $lcd = $hash->{lcd}; return unless defined $lcd; COMMAND_HANDLER: { $command eq "text" and do { + shift @a; + shift @a; + $value = join(" ", @a); if (AttrVal($hash->{NAME},"autoClear","on") eq "on") { $lcd->clear(); } @@ -184,6 +195,11 @@ sub FRM_LCD_Set(@) { $lcd->home(); last; }; + $command eq "reset" and do { + $lcd->init(); +# $hash->{lcd} = $lcd; + last; + }; $command eq "clear" and do { $lcd->clear(); main::readingsSingleUpdate($hash,"text","",1); @@ -210,6 +226,37 @@ sub FRM_LCD_Set(@) { } last; }; + $command eq "backlight" and do { + if ($value eq "on") { + $lcd->backlight(); + } else { + $lcd->noBacklight(); + } + last; + }; + $command eq "writeXY" and do { + my ($x,$y,$l,$al) = split(",",$value); + $lcd->setCursor($x,$y); + shift @a; shift @a; shift @a; + my $t = join(" ", @a); + my %umlaute = ("ä" => "ae", "Ä" => "Ae", "ü" => "ue", "Ü" => "Ue", "ö" => "oe", "Ö" => "Oe", "ß" => "ss" ," - " => " " ,"©"=>"@"); + my $umlautkeys = join ("|", keys(%umlaute)); + $t =~ s/($umlautkeys)/$umlaute{$1}/g; + my $sl = length $t; + if ($sl > $l) { + $t = substr($t,0,$l); + } + if ($sl < $l) { + my $dif = ""; + for (my $i=$sl; $i<$l; $i++) { + $dif .= " "; + } + $t = ($al eq "l") ? $t.$dif : $dif.$t; + } + $lcd->print($t); + readingsSingleUpdate($hash,"state",$t,1); + last; #"X=$x|Y=$y|L=$l|Text=$t"; + }; } } @@ -259,8 +306,17 @@ STATEHANDLER: { Set
+ Get