mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-04 22:19:38 +00:00
95_Babble.pm: Verbessertes Handling von Umlauten
git-svn-id: https://svn.fhem.de/fhem/trunk@16665 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
269f3efe9a
commit
6b2f119ab6
@ -36,6 +36,8 @@ use vars qw(%intAt); # FHEM at definitions
|
|||||||
use vars qw($FW_ME);
|
use vars qw($FW_ME);
|
||||||
|
|
||||||
use JSON; # imports encode_json, decode_json, to_json and from_json.
|
use JSON; # imports encode_json, decode_json, to_json and from_json.
|
||||||
|
use Encode;
|
||||||
|
|
||||||
my $rive = 0;
|
my $rive = 0;
|
||||||
my $riveinterpreter;
|
my $riveinterpreter;
|
||||||
#-- RiveScript missing in System
|
#-- RiveScript missing in System
|
||||||
@ -53,7 +55,8 @@ if (eval {require RiveScript;1;} ne 1) {
|
|||||||
my $babblelinkname = "babbles"; # link text
|
my $babblelinkname = "babbles"; # link text
|
||||||
my $babblehiddenroom = "babbleRoom"; # hidden room
|
my $babblehiddenroom = "babbleRoom"; # hidden room
|
||||||
my $babblepublicroom = "babble"; # public room
|
my $babblepublicroom = "babble"; # public room
|
||||||
my $babbleversion = "1.33";
|
my $babbleversion = "1.35";
|
||||||
|
my @babblerows;
|
||||||
|
|
||||||
my %babble_transtable_EN = (
|
my %babble_transtable_EN = (
|
||||||
"ok" => "OK",
|
"ok" => "OK",
|
||||||
@ -444,10 +447,9 @@ sub Babble_save($) {
|
|||||||
$hash->{DATA}{"savedate"} = $date;
|
$hash->{DATA}{"savedate"} = $date;
|
||||||
readingsSingleUpdate( $hash, "savedate", $date, 1 );
|
readingsSingleUpdate( $hash, "savedate", $date, 1 );
|
||||||
my $jhash0 = toJSON($hash->{DATA});
|
my $jhash0 = toJSON($hash->{DATA});
|
||||||
|
#$jhash0 = decode_utf8( $jhash0 );
|
||||||
if( ReadingsVal($name,"lockstate","locked") ne "locked" ){
|
if( ReadingsVal($name,"lockstate","locked") ne "locked" ){
|
||||||
my $error = FileWrite("babbleFILE",$jhash0);
|
my $error = FileWrite("babbleFILE",$jhash0);
|
||||||
#Log3 $name, 1, " ".Dumper($jhash0);
|
|
||||||
|
|
||||||
Log3 $name,1,"[Babble_save]";
|
Log3 $name,1,"[Babble_save]";
|
||||||
}else{
|
}else{
|
||||||
Log3 $name, 1, "[Babble] attempt to save data failed due to lockstate";
|
Log3 $name, 1, "[Babble] attempt to save data failed due to lockstate";
|
||||||
@ -479,7 +481,9 @@ sub Babble_restore($$) {
|
|||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
my $json = JSON->new->utf8;
|
my $json = JSON->new->utf8;
|
||||||
my $jhash1 = eval{ $json->decode( join('',@lines) ) };
|
my $jhash0 = join('',@lines);
|
||||||
|
$jhash0 = encode_utf8( $jhash0 );
|
||||||
|
my $jhash1 = eval{ $json->decode( $jhash0 ) };
|
||||||
my $date = $jhash1->{"savedate"};
|
my $date = $jhash1->{"savedate"};
|
||||||
#-- just for the first time, reading an old savefile
|
#-- just for the first time, reading an old savefile
|
||||||
$date = localtime(time)
|
$date = localtime(time)
|
||||||
@ -1143,9 +1147,10 @@ sub Babble_DoIt{
|
|||||||
if(index($stardev,'*')!=-1){
|
if(index($stardev,'*')!=-1){
|
||||||
my $starrexp = $stardev;
|
my $starrexp = $stardev;
|
||||||
$starrexp =~ s/\*/\(\.\*\)/;
|
$starrexp =~ s/\*/\(\.\*\)/;
|
||||||
if( $realdev =~ /$starrexp/ ){
|
if( $realdev =~ m/$starrexp/ ){
|
||||||
$star = $1;
|
$star = $1;
|
||||||
$cmd = $hash->{DATA}{"command"}{$stardev}{$place}{$verb}{$reading};
|
$cmd = $hash->{DATA}{"command"}{$stardev}{$place}{$verb}{$reading};
|
||||||
|
$cmd =~ s/\$STAR/$star/g;
|
||||||
if( defined($cmd) && $cmd ne "" ){
|
if( defined($cmd) && $cmd ne "" ){
|
||||||
$device = $stardev;
|
$device = $stardev;
|
||||||
last;
|
last;
|
||||||
@ -1446,9 +1451,9 @@ sub Babble_ModCmd($$$$$$){
|
|||||||
#
|
#
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
|
|
||||||
sub Babble_RemCmd($$$$$){
|
sub Babble_RemCmd($$$$$$){
|
||||||
|
|
||||||
my ($name,$bdev,$place,$verb,$target) = @_;
|
my ($name,$bdev,$place,$verb,$target,$fallback) = @_;
|
||||||
my $hash = $defs{$name};
|
my $hash = $defs{$name};
|
||||||
|
|
||||||
#-- lower case characters
|
#-- lower case characters
|
||||||
@ -1463,9 +1468,19 @@ sub Babble_RemCmd($$$$$){
|
|||||||
if( $verb eq "");
|
if( $verb eq "");
|
||||||
$target="none"
|
$target="none"
|
||||||
if( $target eq "");
|
if( $target eq "");
|
||||||
|
#-- trying to delete from data obtained via web
|
||||||
Log3 $name, 1,"[Babble_RemCmd] Deleting from hash: $bdev.$place.$verb.$target => ".$hash->{DATA}{"command"}{$bdev}{$place}{$verb}{$target};
|
if( defined($hash->{DATA}{"command"}{$bdev}{$place}{$verb}{$target}) ){
|
||||||
delete($hash->{DATA}{"command"}{$bdev}{$place}{$verb}{$target});
|
Log3 $name, 1,"[Babble_RemCmd] Deleting from hash: $bdev.$place.$verb.$target => ".$hash->{DATA}{"command"}{$bdev}{$place}{$verb}{$target};
|
||||||
|
delete($hash->{DATA}{"command"}{$bdev}{$place}{$verb}{$target});
|
||||||
|
return
|
||||||
|
#-- try to figure out data from index (fallback strategy)
|
||||||
|
}else{
|
||||||
|
my $cmdstr = $babblerows[$fallback-1];
|
||||||
|
($bdev,$place,$verb,$target)=split('\+\|\+',$cmdstr);
|
||||||
|
Log3 $name, 1,"[Babble_RemCmd] Deleting in fallback strategy from hash: $bdev.$place.$verb.$target => ".$hash->{DATA}{"command"}{$bdev}{$place}{$verb}{$target};
|
||||||
|
delete($hash->{DATA}{"command"}{$bdev}{$place}{$verb}{$target});
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
@ -1710,10 +1725,16 @@ sub Babble_getplaces($$$) {
|
|||||||
if( !defined($sel) ){
|
if( !defined($sel) ){
|
||||||
return "<option></option><option>".join("</option><option>",@places)."</option>";
|
return "<option></option><option>".join("</option><option>",@places)."</option>";
|
||||||
}else{
|
}else{
|
||||||
|
$sel = lc($sel);
|
||||||
|
#-- todo: geht das einfacher ?
|
||||||
|
$sel =~ s/\xe3\xbc/ü/g;
|
||||||
|
$sel =~ s/\xe3\xb6/ö/g;
|
||||||
|
$sel =~ s/\xe3\xa4/ä/g;
|
||||||
|
$sel =~ s/\xe3\x9f/ß/g;
|
||||||
my $ret = ($sel eq "none") ? '<option selected="selected">' : '<option>';
|
my $ret = ($sel eq "none") ? '<option selected="selected">' : '<option>';
|
||||||
$ret .= '</option>';
|
$ret .= '</option>';
|
||||||
for( my $i=0;$i<int(@places);$i++){
|
for( my $i=0;$i<int(@places);$i++){
|
||||||
$ret .= (lc($sel) eq lc($places[$i]) ) ? '<option selected="selected">' : '<option>';
|
$ret .= ( $sel eq lc($places[$i]) ) ? '<option selected="selected">' : '<option>';
|
||||||
$ret .= $places[$i].'</option>';
|
$ret .= $places[$i].'</option>';
|
||||||
}
|
}
|
||||||
return $ret;
|
return $ret;
|
||||||
@ -1760,7 +1781,13 @@ sub Babble_getverbs($$$) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
$hash->{DATA}{"re_verbsi"} = "(?P<verbsi>(".lc( join(")|(",@{$hash->{DATA}{"verbsi"}}))."))";
|
$hash->{DATA}{"re_verbsi"} = "(?P<verbsi>(".lc( join(")|(",@{$hash->{DATA}{"verbsi"}}))."))";
|
||||||
$hash->{DATA}{"re_verbsc"} = lc("((".join(")|(",(keys %{$hash->{DATA}{"verbs"}}))."))");
|
#$hash->{DATA}{"re_verbsc"} = lc("((".join(")|(",(keys %{$hash->{DATA}{"verbs"}}))."))");
|
||||||
|
my $verbsc="((";
|
||||||
|
while (my ($key, $value) = each %{$hash->{DATA}{"verbs"}}){
|
||||||
|
$verbsc.=lc($key).")|(";
|
||||||
|
}
|
||||||
|
$verbsc =~ s/\)\|\($/))/;
|
||||||
|
$hash->{DATA}{"re_verbsc"}=$verbsc;
|
||||||
return;
|
return;
|
||||||
#-- just do something with the current list
|
#-- just do something with the current list
|
||||||
}elsif( $type eq "html" ){
|
}elsif( $type eq "html" ){
|
||||||
@ -1770,10 +1797,18 @@ sub Babble_getverbs($$$) {
|
|||||||
if( !defined($sel) ){
|
if( !defined($sel) ){
|
||||||
return "<option></option><option>".join("</option><option>",@verbsi)."</option>";
|
return "<option></option><option>".join("</option><option>",@verbsi)."</option>";
|
||||||
}else{
|
}else{
|
||||||
|
$sel = lc($sel);
|
||||||
|
#-- todo: geht das einfacher ?
|
||||||
|
$sel =~ s/\xe3\xbc/ü/g;
|
||||||
|
$sel =~ s/\xe3\xb6/ö/g;
|
||||||
|
$sel =~ s/\xe3\xa4/ä/g;
|
||||||
|
$sel =~ s/\xe3\x9f/ß/g;
|
||||||
|
#my $sel1 = encode_utf8($sel);
|
||||||
|
#my $sel2 = decode_utf8($sel);
|
||||||
my $ret = ($sel eq "none") ? '<option selected="selected">' : '<option>';
|
my $ret = ($sel eq "none") ? '<option selected="selected">' : '<option>';
|
||||||
$ret .= '</option>';
|
$ret .= '</option>';
|
||||||
for( my $i=0;$i<int(@verbsi);$i++){
|
for( my $i=0;$i<int(@verbsi);$i++){
|
||||||
if( lc($sel) eq lc($verbsi[$i]) ) {
|
if( $sel eq lc($verbsi[$i]) ) {
|
||||||
$ret .= '<option selected="selected">';
|
$ret .= '<option selected="selected">';
|
||||||
$fnd = 1;
|
$fnd = 1;
|
||||||
}else{
|
}else{
|
||||||
@ -1856,6 +1891,12 @@ sub Babble_getwords($$$$) {
|
|||||||
if( !defined($sel) ){
|
if( !defined($sel) ){
|
||||||
return "<option></option><option>".join("</option><option>",@targets)."</option>";
|
return "<option></option><option>".join("</option><option>",@targets)."</option>";
|
||||||
}else{
|
}else{
|
||||||
|
$sel = lc($sel);
|
||||||
|
#-- todo: geht das einfacher ?
|
||||||
|
$sel =~ s/\xe3\xbc/ü/g;
|
||||||
|
$sel =~ s/\xe3\xb6/ö/g;
|
||||||
|
$sel =~ s/\xe3\xa4/ä/g;
|
||||||
|
$sel =~ s/\xe3\x9f/ß/g;
|
||||||
my $ret = ($sel eq "none") ? '<option selected="selected">' : '<option>';
|
my $ret = ($sel eq "none") ? '<option selected="selected">' : '<option>';
|
||||||
$ret .= '</option>';
|
$ret .= '</option>';
|
||||||
for( my $i=0;$i<int(@targets);$i++){
|
for( my $i=0;$i<int(@targets);$i++){
|
||||||
@ -1985,6 +2026,8 @@ sub Babble_Html($)
|
|||||||
my $ig = 0;
|
my $ig = 0;
|
||||||
my $devcount = 0;
|
my $devcount = 0;
|
||||||
my @devrows = ();
|
my @devrows = ();
|
||||||
|
my $indrow = 0;
|
||||||
|
@babblerows = ();
|
||||||
|
|
||||||
my($devrow,$ip,$ipp);
|
my($devrow,$ip,$ipp);
|
||||||
$rot .= "<tr><td colspan=\"3\"><div class=\"devType\">".$babble_tt->{"babbledev"}."</div></td></tr>";
|
$rot .= "<tr><td colspan=\"3\"><div class=\"devType\">".$babble_tt->{"babbledev"}."</div></td></tr>";
|
||||||
@ -1993,6 +2036,7 @@ sub Babble_Html($)
|
|||||||
"<td class=\"col3\">".$babble_tt->{"place"}."</td><td class=\"col3\">".$babble_tt->{"verb"}."</td><td class=\"col3\">".$babble_tt->{"target"}."</td>\n".
|
"<td class=\"col3\">".$babble_tt->{"place"}."</td><td class=\"col3\">".$babble_tt->{"verb"}."</td><td class=\"col3\">".$babble_tt->{"target"}."</td>\n".
|
||||||
"<td class=\"col3\">".$babble_tt->{"action"}."</td><td class=\"col3\">".$babble_tt->{"confirm"}."</td><td class=\"col3\"><input type=\"button\" id=\"d_save\" onclick=\"babble_savedevs('".$name."')\" value=\"".$babble_tt->{"save"}.
|
"<td class=\"col3\">".$babble_tt->{"action"}."</td><td class=\"col3\">".$babble_tt->{"confirm"}."</td><td class=\"col3\"><input type=\"button\" id=\"d_save\" onclick=\"babble_savedevs('".$name."')\" value=\"".$babble_tt->{"save"}.
|
||||||
"\" style=\"width:100px;\"/></td></tr>\n";
|
"\" style=\"width:100px;\"/></td></tr>\n";
|
||||||
|
|
||||||
#-- loop over all unique devices to get some sorting
|
#-- loop over all unique devices to get some sorting
|
||||||
if( defined($hash->{DATA}{"devsalias"}) ){
|
if( defined($hash->{DATA}{"devsalias"}) ){
|
||||||
for my $alidev (sort keys %{$hash->{DATA}{"devsalias"}}) {
|
for my $alidev (sort keys %{$hash->{DATA}{"devsalias"}}) {
|
||||||
@ -2062,6 +2106,8 @@ sub Babble_Html($)
|
|||||||
}else{
|
}else{
|
||||||
$checked="";
|
$checked="";
|
||||||
}
|
}
|
||||||
|
push(@babblerows,$lbdev."+|+".$place."+|+".$verb."+|+".$target);
|
||||||
|
$indrow++;
|
||||||
$tblrow++;
|
$tblrow++;
|
||||||
$devrow++;
|
$devrow++;
|
||||||
|
|
||||||
@ -2076,7 +2122,7 @@ sub Babble_Html($)
|
|||||||
"<td class=\"col3\"><select name=\"d_verbpart\">".$vpmlist."</select></td>\n";
|
"<td class=\"col3\"><select name=\"d_verbpart\">".$vpmlist."</select></td>\n";
|
||||||
$rot .= "<td class=\"col3\" style=\"text-align:left;padding:2px\"><input type=\"text\" name=\"d_command\" size=\"30\" maxlength=\"512\" value=\"".$cmd."\"/></td>";
|
$rot .= "<td class=\"col3\" style=\"text-align:left;padding:2px\"><input type=\"text\" name=\"d_command\" size=\"30\" maxlength=\"512\" value=\"".$cmd."\"/></td>";
|
||||||
$rot .= "<td class=\"col3\"><input type=\"checkbox\" name=\"d_confirm\"$checked</td>";
|
$rot .= "<td class=\"col3\"><input type=\"checkbox\" name=\"d_confirm\"$checked</td>";
|
||||||
$rot .= "<td><input type=\"button\" id=\"d_remrow\" onclick=\"babble_remrow('".$name."',$devcount,$tblrow)\" value=\"".$babble_tt->{"remove"}."\" style=\"width:100px;\"/></td></tr>\n";#$tblrow-$devcount.$devrow
|
$rot .= "<td><input type=\"button\" id=\"d_remrow\" onclick=\"babble_remrow('".$name."',$devcount,$tblrow,$indrow)\" value=\"".$babble_tt->{"remove"}."\" style=\"width:100px;\"/></td></tr>\n";#$tblrow-$devcount.$devrow
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2244,7 +2290,6 @@ sub Babble_Html($)
|
|||||||
<br /><i>locked</i> means that babble setups may not be changed, <i>unlocked</i>
|
<br /><i>locked</i> means that babble setups may not be changed, <i>unlocked</i>
|
||||||
means that babble setups may be changed></li>
|
means that babble setups may be changed></li>
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
|
||||||
=end html
|
=end html
|
||||||
=begin html_DE
|
=begin html_DE
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user