Skip to content

Instantly share code, notes, and snippets.

@kakopappa
Last active September 23, 2023 05:05
Show Gist options
  • Save kakopappa/3ce3f22b9c64a086415320078bd7dc95 to your computer and use it in GitHub Desktop.
Save kakopappa/3ce3f22b9c64a086415320078bd7dc95 to your computer and use it in GitHub Desktop.
Sinric Pro WebRTC Alexa Google Home Pi Camera. Tutorial: https://help.sinric.pro/pages/tutorials/camera/raspberrypi-alexa-googlehome-camera.html
from sinric import SinricPro, SinricProConstants
import requests
import asyncio
import base64
APP_KEY = ""
APP_SECRET = ""
CAMERA_ID = ''
def get_webrtc_answer(device_id, offer):
sdp_offer = base64.b64decode(offer)
print('device_id: {} offer: {}'.format(device_id, offer))
# PORT 8889 for WebRTC. eg: for PiCam, use http://<mediamtx-hostname>:8889/cam/whep
mediamtx_url = "http://<mediamtx-hostname>:8889/cam/whep" #TODO: Change <mediamtx-hostname>
headers = {"Content-Type": "application/sdp"}
response = requests.post(mediamtx_url, headers=headers, data=sdp_offer)
if response.status_code == 201:
answer = base64.b64encode(response.content).decode("utf-8")
return True, answer
else:
return False
def power_state(device_id, state):
print('device_id: {} power state: {}'.format(device_id, state))
return True, state
callbacks = {
SinricProConstants.GET_WEBRTC_ANSWER: get_webrtc_answer,
SinricProConstants.SET_POWER_STATE: power_state
}
if __name__ == '__main__':
loop = asyncio.get_event_loop()
client = SinricPro(APP_KEY, [CAMERA_ID], callbacks,
enable_log=False, restore_states=False, secret_key=APP_SECRET)
loop.run_until_complete(client.connect())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment