Piloter une TV Philips ambilight récente par ligne de commande

Les TV Philips récentes sous Android TV (> 2016) utilisent une API basée sur JointSpace

C’est beau tout de même!

MAIS, pour faire simple, Philips a décidé de masquer cet API via d’une part un changement de port, l’utilisation du https au lieu du http… et en prime, cela nécessite un appairage, intégré aux applications philips… Mais pas accessible ailleurs.

Heureusement, il existe sur github un script permettant de réaliser “facilement” cet appairage. Enfin, facilement…

https://github.com/suborb/philips_android_tv

Je vais décrire le process pour installer ce script.

Prérequis

  • Avoir un pc / serveur (linux de préférence) avec python d’installé.
  • Avoir git d’installé : rappel sur ubuntu
sudo apt-get install git

  • Connaître l’adresse IP de votre télé philips. Si vous ne la connaissez pas, elle est indiquée dans le menu android!

Installation du script et appairage

Sur votre PC/Serveur, dans le dossier de votre choix, on commence par récupérer le script :

git clone https://github.com/suborb/philips_android_tv.git <votre_dossier>
cd <votre dossier>

ensuite, on installe les pré-requis du scripts :

sudo pip install -r requirements.txt

Il faut ensuite démarrer votre téléviseur puis lancer l’appairage de votre TV via le script

python philips.py --host <adresse IP Philips TV> pair

Le script vous demande un code affiché à l’écran, puis il va vous fournir un utilisateur et un mot de passe. Ces deux éléments sont essentiels et à conserver absolument. Rassurer vous, on peut toujours relancer l’appairage si on les oublie…

Utilisation du script

On peut utiliser le script pour récupérer des infos … mais surtout réaliser quelques actions (limitées… très limitées…)

Pour cela on exécute le script ainsi :

python philips.py --host <adresse IP TV> --user <VOTRE USER> --pass <VOTRE PASS> <command>

Avec <command> ayant pour valeur possible : get_volume, get ou standby

Bon, le script est pas super complet… Donc, j’ai réalisé quelques modifications pour avoir quelques commandes supplémentaires.

Sur demande, je peux fournir un patch… en attendant, faute de mieux, remplacer les lignes > 99

if args.command.startswith("get"):
if args.command == "get_ambilight_cached":
config['path'] = "6/ambilight/cached"
elif args.command == "get_ambilight":
config['path'] = "6/ambilight/currentconfiguration"
elif args.command == "get_ambilight_mode":
config['path'] = "6/ambilight/mode"
elif args.command == "get_ambilight_topology":
config['path'] = "6/ambilight/topology"
elif args.command == "get_applications":
config['path'] = "6/applications"
elif args.command == "get_channeldb_tv":
config['path'] = "6/channeldb/tv"
elif args.command == "get_channeldb_channellists":
config['path'] = "6/channeldb/tv/channelLists/all"
elif args.command == "get_menuitems_settings":
config['path'] = "6/menuitems/settings/structure"
elif args.command == "get_powerstate":
config['path'] = "6/powerstate"
elif args.command == "get_recordings":
config['path'] = "6/recordings/list"
elif args.command == "get_system":
config['path'] = "6/system"
elif args.command == "get_system_epgsource":
config['path'] = "6/system/epgsource"
elif args.command == "get_system_storage":
config['path'] = "6/system/storage"
elif args.command == "get_system_timestamp":
config['path'] = "6/system/timestamp"
elif args.command == "get_volume":
config['path'] = "6/audio/volume"
else:
print("Invalid get command (see source for details)")
return
get_command(config)
if args.command.startswith("post"):
if args.command == "post_standby":
config['path'] = "6/input/key"
config['body'] = { "key" : "Standby" }
elif args.command == "post_home":
config['path'] = "6/input/key"
config['body'] = { "key" : "Home" }
elif args.command == "post_mute":
config['path'] = "6/input/key"
config['body'] = { "key" : "Mute" }
else:
print("Invalid post command")
return
post_command(config)
main()

Cela me permet d’avoir des commandes intéressantes du point de vue domotique

  • post_standy => arrêt / mise en route de la télé
  • post_home => mise en route du menu home
  • post_mute => mute …
  • get_powerstate => status de la télé (allumée, eteinte)

Bon, après tout ça, c’est TOUJOURS pas user friendly, mais ça permet d’interroger la télévision, de lui demander de s’allumer, de s’éteindre…

Mais ensuite, il reste à intégrer tout ça dans Jeedom, et cela fera partie d’un deuxième article.

Inspiration du week-end en domotique

Voici quelques liens vers des articles pour donner des inspirations dans la réalisation de scénarios de domotique.

La surveillance des équipements c’est l’un des points faibles de Jeedom qui n’informe pas si un capteur est “hors ligne”. Voilà une méthode utile et pas trop complexe pour faire remonter l’info. Attention, cela nécessite au préalable un plugin de messagerie configuré.

http://sarakha63-domotique.fr/surveillance-equipement-z-wave-xiaomi-blea/

Quand on est dans la cuisine et qu’on a besoin d’aller à la réserve, c’est souvent qu’on a quelque chose dans les mains… Et ouvrir une porte, ça devient compliqué. Heureusement, Sarakha63 à la solution une porte “magique” et totalement intégrée dans la cuisine. 

http://sarakha63-domotique.fr/la-porte-magique-domotisee/

Les Yeelights sont des lampes Wi-Fi très bien pensé, pas cher, fiable et pratique. On peut les utiliser assez facilement dans Jeedom… Mais comment faire appel aux scènes Yeelight sans les recréer “à la main” ? Via le plugin IFTTT. Pas forcément simple… mais pratique.

http://sarakha63-domotique.fr/scenes-yeelight-ifttt/

Avoir un aquarium, c’est bien, ça fait jolie, mais cela nécessite une surveillance accrue pour détecter les problèmes de l’eau (température, trop haute, trop baisse, ph, etc.). Et si la domotique venait nous aider? C’est le principe de Reef-pi, avec un ensemble de tutoriaux.

https://www.raspberrypi.org/blog/reef-pi-raspberry-pi-fish-tank-management-system/

Bon week-end à tous!

Jeedom et Xiaomi MiRobot Vacum

L’ajout dans Jeedom du Xiaomi MiRobot Vacum (v1 ou v2) nécessite un token à récupérer dans l’application Mi Home.

http://domo-attitude.fr/domoticz-guide-dutilisation-robot-aspirateur-xiaomi/

  • Quelques forums sur le sujet :

Seul souci : les dernières versions de Mi Home sur Android ne stockent plus ce token. Les méthodes consistent donc à prendre une ancienne version de Mi Home ou à utiliser une sauvegarde d’un … iPhone.

Voir ici pour la méthode 

https://www.home-assistant.io/components/vacuum.xiaomi_miio/#ios

En français, voici les étapes :

Prérequis :

  • avoir le robot configuré et relié à l’application Mi-Home.
  • avoir Mi-Home d’installé sur l’iPhone
  • avoir ITunes d’installé
  • avoir installé le logiciel  iBackup Viewer
  • avoir installé DB Browser for SQLite.

Etapes :

  1. Démarrer iTunes et lancer une sauvegarde non chiffré de l’iPhone
  2. Démarrer iBackup Viewer et charger la sauvegarde
  3. Démarrer le module “Raw Data”
  4. Naviguer jusqu’à com.xiaomi.mihome
  5. Rechercher un fichier du type 123456789_mihome.sqlite
  6. Sauvegarder le fichier dans vos documents
  7. Ouvrir DB Browser et charger le fichier précédent
  8. Cliquer sur “Execute SQL”
  9. Entrer et exécuter la requêle SQL suivante:
SELECT ZTOKEN FROM ZDEVICE WHERE ZMODEL LIKE "%vacuum%"

Normalement, une clé hexa de 32 bits de longueur va s’afficher. Faites un copier. Mais si vous avez pas de chance, votre ZToken fera 96 caractères. Il faut alors la déchiffrer pour obtenir 32 caractères

Dans un terminal, exécuter la commande suivante

echo '0: ' | xxd -r -p | openssl enc -d -aes-128-ecb -nopad -nosalt -K 00000000000000000000000000000000

Le résultat affiché sera votre clé, que vous pouvez utiliser dans le plugin Xiaomi de Jeedom

A noter l’existence d’un outils python permettant un contrôle plus fin de votre xiaomi

https://github.com/rytilahti/python-miio

Retour d’expériences sur Jeedom et liens vers tutos

Bascule domoticz vers Jeedom

J’ai (lâchement) profité d’un plantage de la carte SD de mon Raspberry Pi pour tester l’application Jeedom et comparer avec mon installation Domoticz.

Ma modeste installation domotique est constitué des matériels suivants

Xiaomi / Yeelight

  • 1 Gateway V2
  • 2 capteur Température + Hydrométrie
  • 1 capteur Température + Hydro + Pression
  • 6 capteurs d’ouvertures
  • 1 capteur de présence
  • 1 bouton 4 fonctions (click, double click, click long pressed, click long released)
  • 1 robot aspirateur de première génération
  • 1 Yeelight

Philips Hue

  • 2 ampoules Hue
  • 2 ampoules Ikea compatibles Hue

Heatzy

  • 1 unique module Heatzy branché sur un radiateur du salon

Withings / Nokia

  • 1 balance withings

Mes scénarios existants sont assez “simplistes”

1 ampoule Hue commandable avec le bouton Xiaomi. On peut allumer/éteindre l’ampoule (simple clic), la mettre en luminosité faible (long click), ou baisser la luminosité par pallier de 10% (double clic)

1 ampoule Hue commandée avec le capteur de présence Xiaomi (sur présence, on allume, plus personne, on éteint après 10min).

Cet article n’a pas pour but de faire une comparaison exhaustive des différents protocoles présents dans les deux systèmes, mais de faire profiter d’un petit retour d’expérience.

Comparaison entre les deux systèmes

Les deux systèmes sont assez proches l’un de l’autre et possèdent tous les deux une communauté active.

Petite mise en garde préalable : bien que les deux systèmes peuvent s’installer sur une carte SD et RPI2/3, il est FORTEMENT conseillé d’utiliser une installation sur disque dur/clé USB. En effet, les systèmes domotiques stressent fortement les cartes SD et celles-ci peuvent vite se “briquer”….

Domoticz

Les plus

  • Totalement gratuit
  • Nécessite une machine peu puissante (RPI 1!)
  • Protocoles divers gérés par défaut
  • Interface de programmation “facilité”

Les moins

  • Les ressources sont essentiellement en anglais… et pas toujours à jour
  • Certains protocoles nécessitent des compétences avancées en informatiques
  • L’interface de programmation simplifiée contient des bugs. Certains de mes scénarios n’ont jamais réussi à fonctionner ou fonctionnaient uniquement dans certaines beta!
  • Pas de sauvegarde automatique intégrée

Jeedom

Les plus

  • Beaucoup de ressources en français – dont le forum et le site principal
  • Le market avec énormément de plugins divers
  • Installation facile sur RPI2 ou sur plateforme “vide” supporté
  • Support en ligne “pro”
  • Meilleur support pour les appareils Xiaomi (payant)
  • L’application mobile, vraiment bien faite (payante)
  • Meilleur niveau de WAF

Les moins

  • Plateforme nécessaire plus puissante
  • Beaucoup de plugin payants : pour avoir les mêmes fonctionnalités que j’utilisais sur domoticz, j’ai déboursé 18€ de logiciels. (Détails: Philips Hue – 2€, Xiaomi Home – 6€, App mobile – 4€, et Alarme – 6€).
  • Des plugins, oui, mais encore faut il qu’il y ait un suivi par des développeurs. Exemple, Wunderground ne fonctionne pas sur les dernières versions de Jeedom
  • Installation plus complexe sur serveur avec apache existant
  • L’aide en ligne parfois inexistante (par exemple, sur les fonctions)

Bref, c’est vraiment une question de goût entre les deux systèmes et de philosophie. Si le coût vous rebute, autant rester sur Domoticz ou autre.

Quelques points notables lors de l’installation de Jeedom

Je ne vais pas décrire la procédure d’installation. D’autres blogs font ça beaucoup mieux que moi. Par contre, j’ai quelques REX sur les erreurs qui me sont arrivées…

  • Si un délai de déclenchement est visible lors de l’exécution des scénarios Il s’agit peut être d’un souci de puissance machine. Bien que jeedom peut s’exécuter sur un RPI1, il faut (au minimum) un RPI3 pour bien fonctionner avec le plugin xiaomi. Via SSH, on peut regarder via la commande htop pour vérifier si le serveur n’est pas surchargé.
  • Si la crontab interne de jeedom ne fonctionne pas (menu paramètres, gestionnaire des tâches) ou que la fonction DANS des scénarios ne s’exécute pas….), ce n’est évidement pas normal. On peut également voir dans le syslog du serveur les messages suivants:
(*system*jeedom_watchdog) INSECURE MODE (group/other writable) (/etc/cron.d/jeedom_watchdog)
(*system*jeedom) INSECURE MODE (group/other writable) (/etc/cron.d/jeedom)

Les crontab sont créés dans le script install.sh, via les commande suivantes (compte root).

echo "* * * * * www-data /usr/bin/php ${WEBSERVER_HOME}/core/php/jeeCron.php >> /dev/null" > /etc/cron.d/jeedom
echo "* * * * * root /usr/bin/php ${WEBSERVER_HOME}/core/php/watchdog.php >> /dev/null" > /etc/cron.d/jeedom_watchdog

MAIS il faut corriger les droits des scripts via les commandes suivantes (ce n’est pas fait dans le script!)

chmod og-w /etc/cron.d/jeedom_watchdog
chmod og-w /etc/cron.d/jeedom

A noter également, de manière plus anecdotique, que l’intégration du robot Xiaomi Mi Robot dans le système a été assez compliqué (clé chiffré sous forme 96bits)

L’ajout dans Jeedom du Xiaomi MiRobot Vacum (v1 ou v2) nécessite en effet un token à récupérer dans l’application Mi Home.

Souci : les dernières versions de Mi Home sur Android ne stockent plus ce token. Les méthodes consistent donc à prendre une ancienne version de Mi Home ou à utiliser une sauvegarde d’un … iPhone.

Quelques tutoriaux utiles pour les débutants

http://sarakha63-domotique.fr/jeedom-installation-premiers-pas/

https://www.maison-et-domotique.com/72202-tuto-gerer-presence-domicile-grace-a-jeedom-wifi/

https://guillaumebraillon.fr/jeedom-scenario-bouton-switch-xiaomi/

https://guillaumebraillon.fr/jeedom-scenario-lumiere-sur-presence-corrige-optimise/

Quelques sites avec des exemples de scénario Jeedom, des ressources etc.

http://electrotoile.eu

https://jeedom-facile.fr

Dans l’avenir, je compte rajouter au blog quelques tutoriaux sur mes scénarios Jeedom.

Octoprint

Edit du 28/03/2018 SkipCool: Octoprint peut également être contrôlé via un plugin jeedom dont le test sera détaillé plus tard.

Pour pouvoir contrôler son imprimante à distance, le logiciel Octoprint est tout indiqué. Il s’agit d’une distribution linux spécifique destinée a être installée sur Raspberry Pi 3. Une fois installée tout est commandé via une interface web.

Tout d’abord un premier tuto qui explique comment installer et configurer Octoprint. C’est pour une autre imprimante mais ça reste valable : https://www.lesimprimantes3d.fr/forum/topic/1254-tuto-piloter-%C3%A0-distance-la-discovery-200-avec-octoprint-sur-raspberry-pi/

Attention : Pour que ça marche correctement une bonne alimentation 3A dédiée est nécessaire.

Octoprint permet aussi de faire dès impressions multi color simplement en inserant un bout de code dans le fichier Gcode issu du Slicer (cura ou autre)