Chromecast status
Moderators: leecollings, remb0
-
- Posts: 130
- Joined: Tuesday 07 February 2017 15:00
- Target OS: Linux
- Domoticz version:
- Contact:
Re: Chromecast status
I like the idea of this!
I have a chromecast, but no knowledge of python and just a litle bit of domoticz.
Can someone summarize the steps needed?
1) Download pychromecast from github https://github.com/balloob/pychromecast -> where should I download it to/how should I download it?
2) Place the python script in which folder?
3) What should I change - files/lines?
I have a chromecast, but no knowledge of python and just a litle bit of domoticz.
Can someone summarize the steps needed?
1) Download pychromecast from github https://github.com/balloob/pychromecast -> where should I download it to/how should I download it?
2) Place the python script in which folder?
3) What should I change - files/lines?
- sisaenkov
- Posts: 50
- Joined: Friday 27 May 2016 7:21
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 3.8
- Location: Moscow, Russia
- Contact:
Re: Chromecast status
I use curl for this:
connected - is the most useful Chromecast parameter for me
Code: Select all
/usr/bin/curl -m 2 -ks http://172.16.1.42:8008/setup/eureka_info | /usr/bin/jq .connected
-
- Posts: 139
- Joined: Thursday 19 February 2015 21:48
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Chromecast status
nice! I have to look into this how to integrate this!
- Varazir
- Posts: 360
- Joined: Friday 20 February 2015 22:23
- Target OS: Raspberry Pi / ODroid
- Domoticz version: Beta
- Contact:
Re: RE: Re: Chromecast status
How make that into a continuous check off the CC?sisaenkov wrote:I use curl for this:connected - is the most useful Chromecast parameter for meCode: Select all
/usr/bin/curl -m 2 -ks http://172.16.1.42:8008/setup/eureka_info | /usr/bin/jq .connected
Sent from my Nexus 5 using Tapatalk
Raspberry PI 2 with RaZberry Controller 2016 ZWave+ and CC2531(zigbee)
Several IKEA devices/z-wave devices
Several IKEA devices/z-wave devices
- Varazir
- Posts: 360
- Joined: Friday 20 February 2015 22:23
- Target OS: Raspberry Pi / ODroid
- Domoticz version: Beta
- Contact:
Re: Chromecast status
And I need to know if it's playing or not. Mine is always connected.
Sent from my Nexus 5 using Tapatalk
Sent from my Nexus 5 using Tapatalk
Raspberry PI 2 with RaZberry Controller 2016 ZWave+ and CC2531(zigbee)
Several IKEA devices/z-wave devices
Several IKEA devices/z-wave devices
- sisaenkov
- Posts: 50
- Joined: Friday 27 May 2016 7:21
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 3.8
- Location: Moscow, Russia
- Contact:
Re: Chromecast status
By default there is no such parameter in json output.
-
- Posts: 130
- Joined: Tuesday 07 February 2017 15:00
- Target OS: Linux
- Domoticz version:
- Contact:
Re: Chromecast status
Got it working using these steps:
• place the unzupped pychromecats folder in the python folder of domoticz
• cd domoticz\scripts\python\pychromecast-master
• sudo apt-get install python-dev
• pip install -r requirements.txt
• sudo python setup.py install
It is retrieving the status correctly, but nthing happens in DOmotics.
Did it even like this:
print("Turning on")
#data = urlopen(self.domurl+"/json.htm?type=command¶m=switchlight&idx="+self.device+"&switchcmd=On")
data = urlopen("http://192.168.0.116:8080/json.htm?type ... itchcmd=On")
"Turning on" gets printed, but url looks like never executed...
• place the unzupped pychromecats folder in the python folder of domoticz
• cd domoticz\scripts\python\pychromecast-master
• sudo apt-get install python-dev
• pip install -r requirements.txt
• sudo python setup.py install
It is retrieving the status correctly, but nthing happens in DOmotics.
Did it even like this:
print("Turning on")
#data = urlopen(self.domurl+"/json.htm?type=command¶m=switchlight&idx="+self.device+"&switchcmd=On")
data = urlopen("http://192.168.0.116:8080/json.htm?type ... itchcmd=On")
"Turning on" gets printed, but url looks like never executed...
- Varazir
- Posts: 360
- Joined: Friday 20 February 2015 22:23
- Target OS: Raspberry Pi / ODroid
- Domoticz version: Beta
- Contact:
Re: Chromecast status
Ewaldharmsen wrote:Got it working using these steps:
• place the unzupped pychromecats folder in the python folder of domoticz
• cd domoticz\scripts\python\pychromecast-master
• sudo apt-get install python-dev
• pip install -r requirements.txt
• sudo python setup.py install
It is retrieving the status correctly, but nthing happens in DOmotics.
Did it even like this:
print("Turning on")
#data = urlopen(self.domurl+"/json.htm?type=command¶m=switchlight&idx="+self.device+"&switchcmd=On")
data = urlopen("http://192.168.0.116:8080/json.htm?type ... itchcmd=On")
"Turning on" gets printed, but url looks like never executed...
I keep getting errors running it on my raspberry pi
Code: Select all
File "cast.py", line 1
from __future__ import print_function
^
IndentationError: unexpected indent
Traceback (most recent call last):
File "cast.py", line 7, in <module>
from urllib.request import urlopen
ImportError: No module named request
Traceback (most recent call last):
File "cast.py", line 8, in <module>
from urllib.parse import urlencode
ImportError: No module named parse
Traceback (most recent call last):
File "cast.py", line 11, in <module>
import pychromecast.controllers.youtube as youtube
ImportError: No module named controllers.youtube
Traceback (most recent call last):
File "cast.py", line 19, in <module>
cast = pychromecast.get_chromecast()
AttributeError: 'module' object has no attribute 'get_chromecast'
Raspberry PI 2 with RaZberry Controller 2016 ZWave+ and CC2531(zigbee)
Several IKEA devices/z-wave devices
Several IKEA devices/z-wave devices
-
- Posts: 130
- Joined: Tuesday 07 February 2017 15:00
- Target OS: Linux
- Domoticz version:
- Contact:
Re: Chromecast status
unexpected indent means you have a space or watever wrong in your code.
In Python the outline makes or brakes the code
In Python the outline makes or brakes the code
-
- Posts: 130
- Joined: Tuesday 07 February 2017 15:00
- Target OS: Linux
- Domoticz version:
- Contact:
Re: Chromecast status
my complete code looks like this now:
I have to hardcode the idx number 18 as self.device does not work somehow
Code: Select all
from __future__ import print_function
import time
import sys
import logging
import json
import codecs
import urllib
import pychromecast
domoticz = "http://192.168.0.116:8080"
cast = pychromecast.Chromecast("192.168.0.133")
class mediaListener:
domurl="http://192.168.0.116:8080"
deviceno=18
def __init__(self, domoticzurl, deviceno):
self.domurl = domoticzurl
self.device=deviceno
self.oldPlayerStatus = 'NONE'
def new_media_status(self, status):
if (self.oldPlayerStatus != status.player_state):
self.oldPlayerStatus = status.player_state
if status.player_state == "PLAYING" or status.player_state == "BUFFERING":
print("Turning on")
data = urllib.urlopen(self.domurl+"/json.htm?type=command¶m=switchlight&idx=18&switchcmd=On")
else :
print("Turning off")
data = urllib.urlopen(self.domurl+"/json.htm?type=command¶m=switchlight&idx=18&switchcmd=Off")
self.storeVariable('ChromeState', new_state)
def storeVariable(self,name, value):
value = urlencode({'vvalue':value, 'vname':name, 'vtype':2})
d = urlopen(self.domurl+'/json.htm?type=command¶m=updateuservariable&'+value)
reader = codecs.getreader("utf-8")
obj = json.load(reader(d))
if (obj['status'] == 'ERR'):
d = urlopen(self.domurl+'/json.htm?type=command¶m=saveuservariable&'+value)
listener = mediaListener(domoticz, 18)
cast.media_controller.register_status_listener(listener)
while (1):
time.sleep(1) # Delay for 1 second
-
- Posts: 130
- Joined: Tuesday 07 February 2017 15:00
- Target OS: Linux
- Domoticz version:
- Contact:
Re: Chromecast status
its working great for youtube but not for netflix.
Then it stops working after 4 changes.
ALso the uservariable does not get updated
Then it stops working after 4 changes.
ALso the uservariable does not get updated
- Varazir
- Posts: 360
- Joined: Friday 20 February 2015 22:23
- Target OS: Raspberry Pi / ODroid
- Domoticz version: Beta
- Contact:
Re: Chromecast status
Moved over to my Ubuntu machine and now I get https://gist.github.com/varazir/851c401 ... 42284f080b
Sent from my Nexus 5 using Tapatalk
Sent from my Nexus 5 using Tapatalk
Raspberry PI 2 with RaZberry Controller 2016 ZWave+ and CC2531(zigbee)
Several IKEA devices/z-wave devices
Several IKEA devices/z-wave devices
-
- Posts: 130
- Joined: Tuesday 07 February 2017 15:00
- Target OS: Linux
- Domoticz version:
- Contact:
Re: Chromecast status
Changed a lot, this script works better, also with Netflix:
Code: Select all
import pychromecast
import pychromecast.controllers
import json
import time
import re
import subprocess
import urllib
print "Script started"
#
# Variables to set.
#
# IP address of the chromecast to control
chromecast_ip = "192.168.0.133"
#Address of domoticz
domoticz = "http://192.168.0.116:8080"
# Prefix for all URLs to be handled. E.g. if the application runs on http://localhost/chromecast,
# the prefix should be "/chromecast"
url_prefix = "/chromecast"
# Timeout to wait for the status (ms)
status_timeout = 5000
#Domoticz DeviceID
IDX="18"
#Variable for old state
OldStatus="idle"
"""
Handles status updates
"""
class StatusHandler(object):
def __init__(self, cast):
"""
Initialize the handler
cast: the chromecast object to work with
"""
self.cast = cast
self.cast_status = False
self.media_status = False
def new_cast_status(self, status):
self.cast_status = True
def new_media_status(self,status):
self.media_status = True
"""
Returns a chromecast object filled with the status
"""
def get_cast_with_status(chromecast_ip):
cast = pychromecast.Chromecast(host=chromecast_ip)
# We can only use the controller when a status has been retrieved
# For that reason, we wait for that event
status_handler = StatusHandler(cast)
cast.socket_client.receiver_controller.register_status_listener(status_handler)
cast.media_controller.register_status_listener(status_handler)
# Wait for the status, although not forever
starttime = time.time() * 1000
wait_until = starttime + status_timeout
while ( time.time() * 1000 ) < wait_until and not (status_handler.cast_status and status_handler.media_status):
pass
return cast
#print dir(cast.media_controller.status.player_state)
def get_current_status():
global OldStatus
cast = get_cast_with_status(chromecast_ip)#have to do this each time otherwise netflix will not work
#print dir(cast)
if (cast.app_display_name == "Netflix"):
CurrentStatus=cast.media_controller.status.player_state
print "Currenstatus",CurrentStatus
if (OldStatus != CurrentStatus):
if CurrentStatus == "PLAYING" or CurrentStatus == "BUFFERING":
print("Turning on")
data = urllib.urlopen(domoticz+"/json.htm?type=command¶m=switchlight&idx="+IDX+"&switchcmd=On")
else :
print("Turning off")
data = urllib.urlopen(domoticz+"/json.htm?type=command¶m=switchlight&idx="+IDX+"&switchcmd=Off")
print "Old status is ",OldStatus
OldStatus = CurrentStatus
while (1):
get_current_status()
time.sleep(1) # Delay for 1 second
print "Script stopped"
- Varazir
- Posts: 360
- Joined: Friday 20 February 2015 22:23
- Target OS: Raspberry Pi / ODroid
- Domoticz version: Beta
- Contact:
Re: RE: Re: Chromecast status
Could you post the code in gist.github.com or Ubuntu's pastebin?Ewaldharmsen wrote:Changed a lot, this script works better, also with Netflix:
Sent from my Nexus 5 using Tapatalk
Raspberry PI 2 with RaZberry Controller 2016 ZWave+ and CC2531(zigbee)
Several IKEA devices/z-wave devices
Several IKEA devices/z-wave devices
- Varazir
- Posts: 360
- Joined: Friday 20 February 2015 22:23
- Target OS: Raspberry Pi / ODroid
- Domoticz version: Beta
- Contact:
Re: Chromecast status
I got a error for each print you in the script so I can't see it have been workingEwaldharmsen wrote:Changed a lot, this script works better, also with Netflix:
line 9 80 88 and 95
Code: Select all
File "cast2.py", line 9
print "Script started"
^
SyntaxError: Missing parentheses in call to 'print'
Code: Select all
python3 cast2.py
Traceback (most recent call last):
File "cast2.py", line 2, in <module>
import pychromecast.controllers
ImportError: No module named 'pychromecast.controllers'
Then I get this
Code: Select all
Traceback (most recent call last):
File "cast2.py", line 1, in <module>
import pychromecast
File "/home/pi/domoticz/scripts/python/pychromecast/pychromecast/__init__.py", line 12, in <module>
from .config import * # noqa
File "/home/pi/domoticz/scripts/python/pychromecast/pychromecast/config.py", line 6, in <module>
import requests
ImportError: No module named 'requests'
Code: Select all
python cast2.py
Script started
ERROR:pychromecast.socket_client:Failed to connect, retrying in 5.000000s
Traceback (most recent call last):
File "/tmp/download/pychromecast/pychromecast/socket_client.py", line 246, in initialize_connection
self.socket.connect((self.host, self.port))
File "/usr/lib/python2.7/ssl.py", line 866, in connect
self._real_connect(addr, False)
File "/usr/lib/python2.7/ssl.py", line 857, in _real_connect
self.do_handshake()
File "/usr/lib/python2.7/ssl.py", line 830, in do_handshake
self._sslobj.do_handshake()
error: [Errno 104] Connection reset by peer
Raspberry PI 2 with RaZberry Controller 2016 ZWave+ and CC2531(zigbee)
Several IKEA devices/z-wave devices
Several IKEA devices/z-wave devices
-
- Posts: 130
- Joined: Tuesday 07 February 2017 15:00
- Target OS: Linux
- Domoticz version:
- Contact:
Re: Chromecast status
you have to replace all occurrences of “except socket.error:” with “except (socket.error,OSError):” in the file pychromecast\socket_client.py
- Varazir
- Posts: 360
- Joined: Friday 20 February 2015 22:23
- Target OS: Raspberry Pi / ODroid
- Domoticz version: Beta
- Contact:
Re: Chromecast status
Ewaldharmsen wrote:you have to replace all occurrences of “except socket.error:” with “except (socket.error,OSError):” in the file pychromecast\socket_client.py
okay, sound like something isn't right here is the script/modul made for some other system...
I'll give it a try
Code: Select all
Script started
ERROR:pychromecast.socket_client:Failed to connect, retrying in 5.000000s
Traceback (most recent call last):
File "/tmp/download/pychromecast/pychromecast/socket_client.py", line 246, in initialize_connection
self.socket.connect((self.host, self.port))
File "/usr/lib/python2.7/ssl.py", line 866, in connect
self._real_connect(addr, False)
File "/usr/lib/python2.7/ssl.py", line 857, in _real_connect
self.do_handshake()
File "/usr/lib/python2.7/ssl.py", line 830, in do_handshake
self._sslobj.do_handshake()
error: [Errno 104] Connection reset by peer
Edit: Python is a mess with versions...
Raspberry PI 2 with RaZberry Controller 2016 ZWave+ and CC2531(zigbee)
Several IKEA devices/z-wave devices
Several IKEA devices/z-wave devices
-
- Posts: 4
- Joined: Wednesday 30 March 2016 23:41
- Target OS: Windows
- Domoticz version:
- Contact:
Re: Chromecast status
I also edited the code as mentioned above, but the script evertime stops at exactly 32 "checks" (this also happens when I comment the line with the 1 sec delay).Ewaldharmsen wrote:you have to replace all occurrences of “except socket.error:” with “except (socket.error,OSError):” in the file pychromecast\socket_client.py
When the script IS running (first 32 checks), it's running flawlessly. But when the error kicks in, the script is dead.
-
- Posts: 28
- Joined: Monday 25 January 2016 6:33
- Target OS: Windows
- Domoticz version:
- Contact:
Re: Chromecast status
Yes, I use my chromecast/google mini's to announce notifications throughout my home. I have two groups set up in Google Home - one for whole house - use this for playing music all around the house - and then another group set-up for notifications (does not include any of the TV's) - as its very annoying when a TV switches over to Chromecast in the middle of a show/game to announce "sunset".Heisenberg wrote: ↑Monday 11 January 2016 18:17 Does someone know if it's possible to start a stream through Chromecast (audio) via Domoticz?
I did this in python using the Chrome and Google TTS python modules. For notifications it passes the notification message off to my script.
Very easy to do - you can check out my script - DomoMatic or DomoWeatherAlert on Github
Any media with a URL/link you can cast/stream
https://github.com/moengiant
Cheers
Last edited by moengiant on Wednesday 17 October 2018 17:17, edited 2 times in total.
I'd rather have a bottle in front of me than a frontal lobotomy
-
- Posts: 28
- Joined: Monday 25 January 2016 6:33
- Target OS: Windows
- Domoticz version:
- Contact:
Re: Chromecast status
Very nice work. I will have to add this to my running python scripts. It may be easier to trigger a scene rather than hitting devices individually - you could have scenes set for the rooms where you have a Chromecast - playing, pause and stop/off.tbowmo wrote: ↑Saturday 20 February 2016 18:44 downloaded pychromecast from github https://github.com/balloob/pychromecast
and then using the following python script
It's a draft and seems to work.. Setting a virtual switch on / off, according to the playing state. And also populates a uservariable with the current state.Code: Select all
from __future__ import print_function import time import sys import logging import json import codecs from urllib.request import urlopen from urllib.parse import urlencode import pychromecast import pychromecast.controllers.youtube as youtube domoticz = "http://localhost:8080" if '--show-debug' in sys.argv: logging.basicConfig(level=logging.DEBUG) cast = pychromecast.get_chromecast() class mediaListener: domurl="http://localhost:8080" device=20 def __init__(self, domoticzurl, deviceno): self.domurl = domoticzurl self.device=deviceno self.oldPlayerStatus = 'NONE' def new_media_status(self, status): print("mediaListener") print(status) if (self.oldPlayerStatus != status.player_state): self.oldPlayerStatus = status.player_state if status.player_state == "PLAYING" or status.player_state == "BUFFERING": data = urlopen(self.domurl+"/json.htm?type=command¶m=switchlight&idx="+self.device+"&switchcmd=on") else : data = urlopen(self.domurl+"/json.htm?type=command¶m=switchlight&idx="+self.device+"&switchcmd=off") self.storeVariable('ChromeState', new_state) def storeVariable(self,name, value): value = urlencode({'vvalue':value, 'vname':name, 'vtype':2}) d = urlopen(self.domurl+'/json.htm?type=command¶m=updateuservariable&'+value) reader = codecs.getreader("utf-8") obj = json.load(reader(d)) if (obj['status'] == 'ERR'): d = urlopen(self.domurl+'/json.htm?type=command¶m=saveuservariable&'+value) listener = mediaListener(domoticz, 106) cast.media_controller.register_status_listener(listener) while (1): pass
I don't have any lights connected, so haven't checked how well this works.. (The lights are in development..)
I'd rather have a bottle in front of me than a frontal lobotomy
Who is online
Users browsing this forum: No registered users and 1 guest