Simple app to control my Marantz 5007 receiver (should work with related Marantz models as well) via Alexa.
The code is based on @anjishnu's useful Python version of Alexa Skills Kit.
It's running with Python 3.7 and the AWS command line tool.
I made this before Amazon's API allowed uploading JSON directly for
intent schema, utterances, slot types, etc., although
skill/skill.json
is up-to-date so you should use that instead of
setting up slot types manually.
If you want to add utterances, you can add/modify utterances in skill/utterances.txt.glob
and then
make skill/utterances.txt
to generate the changes. It's a little
hack to allow simple globbing to simplify recognizing variants of
different utterances.
Change the value of SKILL_NAME
in the Makefile
to whatever
you called your skill, if you want to use the convenient make targets
for updating the code and updating the port/IP of your port-forwarding
firewall (see below).
Create a lambda function using the AWS GUI (you only need to do this
once). Then make upload_lambda
to upload the Python code as the
lambda body. If you look at the Makefile
you'll see you need to
have your AWS CLI credentials set up, etc. to use this feature.
If you're like most people, your receiver and your Alexa device are behind your firewall/NAT. You will probably have to configure your NAT box to assign a static IP address to your Marantz receiver, and set up port forwarding to get packets through your NAT firewall.
The Python code looks for environment variables IP
and PORT
to do
this. It expects to be able to send traffic to port PORT
of your NAT
box at IP
, and that that traffic will be forwarded to your Marantz
receiver.
To set the environment variables, say:
IP=
your_external_ip PORT=
port_forwarding_number make update_port_and_ip
If you don't set IP
, the Makefile includes a command to try to
figure it out using the OpenDNS resolvers and myip.opendns.com
.
If you don't set PORT
, the default value will be the one in the
current Lambda configuration (i.e. unchanged).
You can now say things like:
Alexa, tell <skill> to play Roku
Alexa, tell <skill> to play my iPhone in zone 2
(in my house, Zone
2 is our piano room, so in the skills code, the piano room
is an alias
for zone two
; modify to fit your house)
Alexa, tell <skill> to turn off