diff --git a/fhem/FHEM/00_SONOS.pm b/fhem/FHEM/00_SONOS.pm index d7813fc28..53418f57c 100755 --- a/fhem/FHEM/00_SONOS.pm +++ b/fhem/FHEM/00_SONOS.pm @@ -32,6 +32,9 @@ # Changelog # # SVN-History: +# 28.12.2014 +# Umlaute: Die Erkennung von Umlauten war wegen der Quelltextumstellung auf UTF8 fehlerhaft. Das betraf nur die Zonennamenumwandlung, wo z.B. aus 'Küche' ein 'Kueche' gemacht wird. +# Sonos-Coverlieferung: Es waren noch ein paar Return-Anweisungen zuviel drin. # 26.12.2014: # DeleteFn für Sonos wurde implementiert. Das Sonos-Device löscht erst alle SonosPlayer-Devices und beendet den selbst gestarteten SubProzess. Danach wird das Sonos-Device selber von Fhem abgeräumt. # DeleteFn für SonosPlayer wurde implementiert. Es werden erst alle automatisch erzeugten Devices (RemoteControl und ReadingsGroups) entfernt, sofern sie noch unter dem Originalnamen existieren. @@ -552,9 +555,10 @@ sub SONOS_getCoverTitleRG($;$$) { # ######################################################################################## sub SONOS_getCoverRG($;$) { - my ($device) = @_; + my ($device, $height) = @_; + $height = '175px' if (!defined($height)); - return ''; + return ''; } ######################################################################################## @@ -750,17 +754,17 @@ sub SONOS_FhemWebCallback($) { } if ($URL =~ m/^\/playlist.jpg/i) { - return FW_serveSpecial('sonos_playlist', 'jpg', $attr{global}{modpath}.'/FHEM/lib/UPnP', 1); + FW_serveSpecial('sonos_playlist', 'jpg', $attr{global}{modpath}.'/FHEM/lib/UPnP', 1); return (undef, undef); } if ($URL =~ m/^\/input_default.jpg/i) { - return FW_serveSpecial('sonos_input_default', 'jpg', $attr{global}{modpath}.'/FHEM/lib/UPnP', 1); + FW_serveSpecial('sonos_input_default', 'jpg', $attr{global}{modpath}.'/FHEM/lib/UPnP', 1); return (undef, undef); } if ($URL =~ m/^\/input_tv.jpg/i) { - return FW_serveSpecial('sonos_input_tv', 'jpg', $attr{global}{modpath}.'/FHEM/lib/UPnP', 1); + FW_serveSpecial('sonos_input_tv', 'jpg', $attr{global}{modpath}.'/FHEM/lib/UPnP', 1); return (undef, undef); } @@ -3593,24 +3597,27 @@ sub SONOS_Stringify { # ######################################################################################## sub SONOS_UmlautConvert($) { - my ($var) = @_; - - if ($var eq 'ä') { - return 'ae'; - } elsif ($var eq 'ö') { - return 'oe'; - } elsif ($var eq 'ü') { - return 'ue'; - } elsif ($var eq 'Ä') { - return 'Ae'; - } elsif ($var eq 'Ö') { - return 'Oe'; - } elsif ($var eq 'Ü') { - return 'Ue'; - } elsif ($var eq 'ß') { - return 'ss'; - } else { - return '_'; + eval { + use utf8; + my ($var) = @_; + + if ($var eq 'ä') { + return 'ae'; + } elsif ($var eq 'ö') { + return 'oe'; + } elsif ($var eq 'ü') { + return 'ue'; + } elsif ($var eq 'Ä') { + return 'Ae'; + } elsif ($var eq 'Ö') { + return 'Oe'; + } elsif ($var eq 'Ü') { + return 'Ue'; + } elsif ($var eq 'ß') { + return 'ss'; + } else { + return '_'; + } } } @@ -3777,7 +3784,7 @@ sub SONOS_Discover_Callback($$$) { if ($action eq 'deviceAdded') { my $descriptionDocument; eval { - $descriptionDocument = decode(SONOS_Client_Data_Retreive('undef', 'attr', 'characterDecoding', 'CP-1252'), $device->descriptionDocument()); + $descriptionDocument = decode(SONOS_Client_Data_Retreive('undef', 'attr', 'characterDecoding', 'CP1252'), $device->descriptionDocument()); }; if ($@) { # Das Descriptiondocument konnte nicht abgefragt werden @@ -3808,7 +3815,10 @@ sub SONOS_Discover_Callback($$$) { # RoomName ermitteln $roomName = decode_entities($1) if ($descriptionDocument =~ m/(.*?)<\/roomName>/im); $saveRoomName = decode('UTF-8', $roomName); - $saveRoomName =~ s/([äöüÄÖÜß])/SONOS_UmlautConvert($1)/eg; # Hier erstmal Umlaute 'schön' machen, damit dafür nicht '_' verwendet werden... + eval { + use utf8; + $saveRoomName =~ s/([äöüÄÖÜß])/SONOS_UmlautConvert($1)/eg; # Hier erstmal Umlaute 'schön' machen, damit dafür nicht '_' verwendet werden... + }; $saveRoomName =~ s/[^a-zA-Z0-9]/_/g; my $groupName = $saveRoomName; @@ -5145,11 +5155,14 @@ sub SONOS_DevicePropertiesCallback($$) { # Raumname wurde angepasst? my $roomName = SONOS_Client_Data_Retreive($udn, 'reading', 'roomName', ''); if (defined($properties{ZoneName}) && $properties{ZoneName} ne '') { - $roomName = decode(SONOS_Client_Data_Retreive('undef', 'attr', 'characterDecoding', 'CP-1252'), $properties{ZoneName}); + $roomName = decode(SONOS_Client_Data_Retreive('undef', 'attr', 'characterDecoding', 'CP1252'), $properties{ZoneName}); SONOS_Client_Data_Refresh('ReadingsSingleUpdateIfChanged', $udn, 'roomName', $roomName); my $saveRoomName = decode('UTF-8', $roomName); - $saveRoomName =~ s/([äöüÄÖÜß])/SONOS_UmlautConvert($1)/eg; # Hier erstmal Umlaute 'schön' machen, damit dafür nicht '_' verwendet werden... + eval { + use utf8; + $saveRoomName =~ s/([äöüÄÖÜß])/SONOS_UmlautConvert($1)/eg; # Hier erstmal Umlaute 'schön' machen, damit dafür nicht '_' verwendet werden... + }; $saveRoomName =~ s/[^a-zA-Z0-9]/_/g; SONOS_Client_Data_Refresh('ReadingsSingleUpdateIfChanged', $udn, 'saveRoomName', $saveRoomName); }