twocolors / node-red-contrib-apple-tv-x

Nodes for controlling Apple TVs in Node-RED (wrapper pyatv)
GNU General Public License v3.0
11 stars 1 forks source link

node-red-contrib-apple-tv-x

From version 1.0.0 remove support native control Apple TVs (more)

platform Min Node Version GitHub version GitHub stars Package Quality

issues GitHub last commit NPM Total Downloads NPM Downloads per month Repo size

About

Nodes for controlling Apple TVs in Node-RED (wrapper pyatv).

Thanks Pierre Ståhl for project pyatv

Tested models are:

Backend

pyatv (cli)

How to install pyatv Official Documentation

How to install pyatv on Raspberry Pi (Raspbian)

$ sudo apt-get install build-essential libssl-dev libffi-dev python3-dev python3-pip python3-cryptography python3-wheel
$ sudo pip3 install --upgrade pyatv

How to install pyatv (Official Node-RED Docker) based on Alpine Linux 3.12.9

Exec to Docker use user !!! ROOT !!!

$ docker exec -it --user root mynodered bash

in docker

docker$ apk add openssl-dev libffi-dev python3-dev py3-pip
docker$ pip3 install --upgrade wheel
docker$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rust.sh && sh rust.sh -y && rm rust.sh && source $HOME/.cargo/env
docker$ pip3 install --upgrade pyatv

How to use pyatv in venv

Creation of virtual environments then in node OUT set Path where atvremote/atvscript

How to get Credentials AirPlay and Companion

$ atvremote --id 00:11:22:33:44:54 --protocol companion pair
$ atvremote --id 00:11:22:33:44:54 --protocol airplay pair

Output

A very simple node that takes the following commands as a string on msg.payload

Experimental

play_url

Usage play_url=https://www.example.com/mymovie.mp4

stream_file

Usage stream_file=/tmp/myfile.mp4

launch_app

Usage launch_app=com.netflix.Netflix

set_volume

Usage set_volume=100

Input

Events from Apple TV on msg.payload

{
  dateTime: null,
  hash: null,
  mediaType: null,
  deviceState: null,
  title: null,
  artist: null,
  album: null,
  genre: null,
  totalTime: null,
  position: null,
  shuffle: null,
  repeat: null,
  app: null,
  appId: null,
  powerState: null
}