diff --git a/FHEM/98_GOOGLECAST.pm b/FHEM/98_GOOGLECAST.pm index 70bf44473..7c87729e8 100755 --- a/FHEM/98_GOOGLECAST.pm +++ b/FHEM/98_GOOGLECAST.pm @@ -7,10 +7,14 @@ # FHEM module to communicate with Google Cast devices # e.g. Chromecast Video, Chromecast Audio, Google Home # -# Version: 2.1.1 +# Version: 2.1.2 # ############################################################# # +# v2.1.2 - 20180310 +# - BUGFIX: fix speak, play, displayWebsite +# - FEATURE: added German commandref (thx@Sailor) +# # v2.1.1 - 20180303 # - BUGFIX: fix crash on connection failures # - BUGFIX: update FHEM socket on pychromecast reconnect @@ -146,7 +150,7 @@ sub GOOGLECAST_Initialize($) { $hash->{AttrList} = "favoriteURL_1 favoriteURL_2 favoriteURL_3 favoriteURL_4 ". "favoriteURL_5 ".$readingFnAttributes; - Log3 $hash, 3, "GOOGLECAST: GoogleCast v2.1.1"; + Log3 $hash, 3, "GOOGLECAST: GoogleCast v2.1.2"; return undef; } @@ -176,7 +180,7 @@ sub GOOGLECAST_findChromecasts { my ($name) = split("\\|", $string); my $result = "$name"; - my @ccResult = GOOGLECAST_findChromecastsPython(); + my @ccResult = GOOGLECAST_PyFindChromecasts(); foreach my $ref_cc (@ccResult) { my @cc = @$ref_cc; $result .= "|CCDEVICE|".$cc[0]."|".$cc[1]."|".$cc[2]."|".$cc[3]."|".Encode::encode('UTF-8', $cc[4]); @@ -206,7 +210,7 @@ sub GOOGLECAST_findChromecastsResult { if($ccResult[$i] eq "CCDEVICE" and $ccResult[$i+5] eq $devName) { Log3 $hash, 4, "GOOGLECAST ($hash->{NAME}): init cast device $devName"; eval { - $hash->{helper}{ccdevice} = GOOGLECAST_createChromecastPython($ccResult[$i+1],$ccResult[$i+2],$ccResult[$i+3],$ccResult[$i+4],$ccResult[$i+5]); + $hash->{helper}{ccdevice} = GOOGLECAST_PyCreateChromecast($ccResult[$i+1],$ccResult[$i+2],$ccResult[$i+3],$ccResult[$i+4],$ccResult[$i+5]); }; if($@) { $hash->{helper}{ccdevice} = ""; @@ -301,7 +305,7 @@ sub GOOGLECAST_setWebsite { my ($hash, $url) = @_; eval { - GOOGLECAST_loadDashCast($hash->{helper}{ccdevice}, $url); + GOOGLECAST_PyLoadDashCast($hash->{helper}{ccdevice}, $url); }; } @@ -317,7 +321,7 @@ sub GOOGLECAST_setSpeak { Log3 $hash, 4, "GOOGLECAST($hash->{NAME}): setSpeak $ttsUrl"; eval { - $hash->{helper}{ccdevice}->{media_controller}->play_media($ttsUrl, "audio/mpeg"); + GOOGLECAST_PyPlayMedia($hash->{helper}{ccdevice}, $ttsUrl, "audio/mpeg"); }; return undef; } @@ -333,7 +337,7 @@ sub GOOGLECAST_setPlayType { } else { eval { Log3 $hash, 4, "GOOGLECAST($hash->{NAME}): start play_media"; - $hash->{helper}{ccdevice}->{media_controller}->play_media($url, $mime); + GOOGLECAST_PyPlayMedia($hash->{helper}{ccdevice}, $url, $mime); }; } @@ -410,7 +414,7 @@ sub GOOGLECAST_setPlayYtDlBlocking { my $videoUrl = ""; eval { - $videoUrl = GOOGLECAST_getYTVideoURLPython($ytUrl); + $videoUrl = GOOGLECAST_PyGetYTVideoURL($ytUrl); }; @@ -452,7 +456,7 @@ sub GOOGLECAST_setPlay { #https://github.com/rg3/youtube-dl/blob/master/docs/supportedsites.md GOOGLECAST_setPlayMedia($hash, $url); } else { - GOOGLECAST_playYouTube($hash->{helper}{ccdevice}, $url); + GOOGLECAST_PyPlayYouTube($hash->{helper}{ccdevice}, $url); } return undef; @@ -684,16 +688,22 @@ import youtube_dl import pychromecast.controllers.dashcast as dashcast import pychromecast.controllers.youtube as youtube -def GOOGLECAST_findChromecastsPython(): +def GOOGLECAST_PyFindChromecasts(): logging.basicConfig(level=logging.CRITICAL) return pychromecast.discovery.discover_chromecasts() -def GOOGLECAST_createChromecastPython(ip, port, uuid, model_name, friendly_name): +def GOOGLECAST_PyCreateChromecast(ip, port, uuid, model_name, friendly_name): logging.basicConfig(level=logging.CRITICAL) - cast = pychromecast._get_chromecast_from_host((ip, int(port), uuid, model_name, friendly_name), blocking=False, timeout=0.1, tries=1, retry_wait=0.1) + cast = pychromecast._get_chromecast_from_host((ip.decode("utf-8"), int(port), uuid.decode("utf-8"), model_name.decode("utf-8"), friendly_name.decode("utf-8")), blocking=False, timeout=0.1, tries=1, retry_wait=0.1) return cast -def GOOGLECAST_getYTVideoURLPython(yt_url): +def GOOGLECAST_PyPlayMedia(cast, url, mime): + logging.basicConfig(level=logging.CRITICAL) + cast.play_media(url.decode("utf-8"), mime.decode("utf-8")) + return undef + +def GOOGLECAST_PyGetYTVideoURL(yt_url): + yt_url = yt_url.decode("utf-8") ydl = youtube_dl.YoutubeDL({'forceurl': True, 'simulate': True, 'quiet': '1', 'no_warnings': '1', 'skip_download': True, 'format': 'best', 'youtube_include_dash_manifest': False}) result = ydl.extract_info(yt_url, download=False) @@ -708,12 +718,14 @@ def GOOGLECAST_getYTVideoURLPython(yt_url): video_url = video['url'] return video_url -def GOOGLECAST_loadDashCast(cast, url): +def GOOGLECAST_PyLoadDashCast(cast, url): + url = url.decode("utf-8") d = dashcast.DashCastController() cast.register_handler(d) d.load_url(url,reload_seconds=60) -def GOOGLECAST_playYouTube(cast, videoId): +def GOOGLECAST_PyPlayYouTube(cast, videoId): + videoId = videoId.decode("utf-8") yt = youtube.YouTubeController() cast.register_handler(yt) yt.play_video(videoId) @@ -801,5 +813,77 @@ PYTHON_CODE_END =end html +=begin html_DE + + +
define <name> GOOGLECAST <name>
define livingroom.chromecast GOOGLECAST livingroom
set livingroom.chromecast play https://www.youtube.com/watch?v=YE7VzlLtp-4
set <name> <command> [<parameter>]
play URL
- Abspielen einer URLplay
- Abspielen im Sinne von Wiederaufnahme eines zuvor pausierten AbspielvorgangsplayFavorite
- spielt die URL aus den Favoriten favoriteURL_[1-5] abstop
- unterbricht den augenblicklichen Abspielvorgangpause
- pausequitApp
- schließt die gegenwärtige Applikation wie beispielsweise YouTubeskip
- unterbricht das gegenwärtige Kapitel bzw. Lied und springt zum Nächstenrewind
- springt zum Anfang des gegenwärtigen Kapitels bzw. LiedesdisplayWebsite
- anzeigen einer Webseite auf Chromecast VideofavoriteURL_[1-5]
- Abspeichern von URL - Favoriten um mittels playFavorite [1-5] - Befehl abgespielt zu werden.n/a
+