Changer la langue des fichiers MKV en ligne de commande

Récemment, j’ai eu besoin de changer la langue de tous un tas d’épisodes de fichiers MKV qui avait été mal encodé par handbrake.

Sous linux, on peut utiliser une ligne de commande rapide pour faire ça via mkvpropedit

Un exemple un peu barbu pour définir la première piste audio et la première piste vidéo en anglais :

find * -type f -name "*.mkv" -exec mkvpropedit "{}" --edit track:a1 --set language=eng --edit track:v1 --set language=eng \;

Routeur OpenWrt et flux multiposte Freebox

Free propose d’accéder à des flux multipostes via l’URL suivante, utilisable via VLC media player

http://mafreebox.freebox.fr/freeboxtv/playlist.m3u

Mais si l’on utilise un routeur openwrt entre la freebox et les postes clients, cela ne fonctionne pas directement… Il faut installer un paquet supplémentaire pour réaliser la redirection des flux RTSP du protocole TV.

Première étape : installer le paquet kmod-ipt-nathelper-rtsp supplémentaire. Soit via luci :

Menu system>Software

Soit en se connectant en SSH au routeur :

opkg install kmod-ipt-nathelper-rtsp

Il faut ensuite activer l’option dans /etc/systctrl.conf

On ajoute la ligne

 net.netfilter.nf_conntrack_helper=1 

Et on valider l’option

sysctl -p

Contrôleur bandeau LED WiFi Magic Home Pro et Jeedom

Suite à un achat pour ajouter une lumière décorative à un bureau, j’en ai profité pour commander un contrôleur WiFi de bandeau LED. Celui-ci (chinois…) fonctionne avec l’application MagicHomePro.

Ce type de contrôleur est géré dans Home-Assistant via une librairie python “flux_led”. A priori, cela serait également géré par un plugin jeedom WiFilightV2 (payant). Mais impossible de savoir avant s’il est bien géré car le plugin ne gère que les contrôleurs RGBW/RGBWW. Evidemment, le mien n’est que RGB…

Installation préalable et configuration hors jeedom

  1. Installer le bandeau LED physiquement, faire le collage, les pliages éventuels
  2. Configurer le contrôleur de bandeau LED avec l’application Magic Home PRO. Le mode local est suffisant.
  3. Fixer l’adresse IP du contrôleur de bandeau LED dans votre routeur.

J’ai l’avantage d’avoir un routeur sous openwrt. J’ai donc décider de donner un nommage fixe à mon bandeau led, cela me sera utile plus tard. Mon bandeau led est nommé “bandeau-led-1.lan“. Si ce n’est pas le cas, pensez bien à noter l’adresse IP de votre (vos) bandeaux leds.

Configuration jeedom

Se connecter sur jeedom via ssh (puTTy, mobaxterm) pour installer les modules python3 flux_led et webcolors.

sudo pip3 install flux_led
sudo pip3 install webcolors

On en profite pour tester l’allumage (-1) et l’extinction du bandeau led (-0) via la ligne de commande. C’est une étape indispensable, si cela ne fonctionne pas, impossible de contrôler votre bandeau avec jeedom…

flux_led bandeau-led-1.lan -1
flux_led bandeau-led-1.lan -0

Voir l’aide de flux_led pour les autres paramètres éventuels

Par exemple, on peut une fonction de changement de couleur (en rouge)

flux_led bandeau-led-1.lan -c "#FF0000"

En l’état actuel on peut déjà utiliser le plugin script pour exécuter les commandes On / Off, et changement de couleur.

Pour cela, depuis le plugin script on crée un nouvel équipement, et dans l’onglet commandes on crée 3 commandes distinctes de type script

  • Une commande action “On” avec la requête flux_led bandeau-led-1.lan -1
  • Une commande action “Off avec la requête flux_led bandeau-led-1.lan -0
  • Une commande action “Color” de type action/couleur avec la commande flux_led bandeau-led-1.lan -c “#color#”

C’est pas mal… Mais il nous manque un retour d’état. Et mauvais point de flux_led, il n’y a pas de commande dans flux_led pour renvoyer l’état…

Mais après tout, comme on a commencé à faire un script, il est temps de passer au niveau 2 : on va créer notre propre script python en faisant appel aux classes de flux_led.

Script de retour d’état

Pour créer un script depuis jeedom, rien de plus simple. On crée une nouvelle commande (Etat) depuis l’équipement de type script info / numérique. Oui, numérique, impossible d’utiliser le retour binaire dans Jeedom… Dans la partie requête on clique sur l’icône verte “nouveau”. J’ai nommé mon script valueBandeau.py mais vous pouvez l’appeler comme bon vous semble.

Voilà un exemple de script. Il n’est pas super propre, il faudrait encadrer l’appel à WifiLedBulb avec un try catch et une gestion des erreurs pour renvoyer autre chose… bref… Le script est assez simple, et prend un seul paramètre : l’adresse IP ou nom

!/usr/bin/env python3
 from flux_led import *
 from argparse import ArgumentParser
 def main():
         parser = ArgumentParser(description='Return status of a WiFi LED controler.')
         parser.add_argument('ip',help='IP of WiFi LED controler')
         args = parser.parse_args()
         bulb1 = WifiLedBulb(args.ip)
         bulb1Status = bulb1.isOn()
         if bulb1.isOn():
                 print("1")
         else:
                 print("0")
 if name == 'main':
         main()

Une fois le script sauvegardé, il faut ajouter l’adresse IP ou nom DSLAN en paramètre.

Dans mon cas, cet appel est :

/var/www/html/plugins/script/data/valueBandeau.py bandeau-led-1.lan

Reste ensuite à mettre en place la partie widget. Mais je vous laisse faire ce que vous voulez. Exemple chez moi :

Et voilà, un bandeau LED intégré pour quelques heures de travail.

Xiaomi thermomètre Mija bluetooth LYWSD03 dans jeedom

Suite à une promotion récente dans dealabs je me suis commandé plusieurs petits thermomètres LYWSD03. (Lot de 4 Thermomètres connectés Xiaomi Mijia Bluetooth 2 hygromètre – Dealabs.com)

en vrai ils sont minuscules 😉

Ces thermomètres bluetooth sont très bien gérés dans home assistant et je pensais naïvement que c’était également le cas dans jeedom, vu qu’ils étaient présents dans la Documentation Jeedom. Et même dans le documentation de compatibilité, aucune précision 🙁 Jeedom compatibility

Alors oui, cela fonctionne mais au bout de quelques heures… plus rien. Et la batterie fond comme neige au soleil. C’est de saison…

Heureusement, certains utilisateurs de jeedom ont résolus le problème 🙂

Ces thermomètres utilisent un système de chiffrement avec une clé définie lors de l’appairage à l’application Xiaomi Home.

La méthode pour rajouter (proprement) les LYWSD03 dans Jeedom et de récupérer la clé d’appairage (bind key) via ce flasher web… Si votre PC a une clé bluetooth évidemment.

Telink Flasher (atc1441.github.io)

Dans cette fenêtre, il faut cliquer sur le bouton connect, puis sélectionner l’équipement bluetooth à relier; Ensuite il faut cliquer sur le bouton “Do activation”. La clé qui nous intéresse sera dans le champ “Mi Bind Key”

Attention, cette clé change à chaque activation. Une fois la clé récupérée, il faut donc “déconnecter” le thermomètre de la page. Le plus simple, faire CTRL+”F5″ pour recharger la page. Si vous avez plusieurs thermomètres, il faut refaire la manipulation en sélectionnant le bon thermomètre.

Une fois ceci fait, il faut aller modifier dans la partie bluetooth de jeedom sur la machine principale. Il faut se connecter en SSH à la machine hébergeant jeedom (Depuis windows : puTTY, mobaxterm).

sudo pip3 install pycryptodomex
cd /var/www/html/plugins/blea/resources/blead/devices/
sudo mv lywsd03.py lywsd03.py.old
sudo cv lywsd03.py_with_bindkey lywsd03.py
sudo nano lywsd03.py

On modifie alors la variable keys en associant chacune des MACS bluetooth avec sa clé d’appairage. La casse de l’adresse MAC n’est pas importante.

MAIS MAIS ce n’est pas fini. Si on a plusieurs antennes bluetooth, il faut réaliser une opération sur chacune des antennes.

  • Si on a déjà configurer les antennes, il faut se connecter à chacune d’entre elles via SSH et installer MANUELLEMENT le fichier pycryptodomex
sudo pip3 install pycryptodomex
  • Depuis jeedom, il faut démarrer le démon des antennes et vérifier qu’elles récupèrent bien le bon fichier lywsd03.py en regardant le contenu du fichier présent dans le fichier
~/blead/resources/blead/devices/lywsd03.py

Si le fichier n’est pas identique, il faut réinstaller / relancer le démon sur chacune des antennes. On peut également relancer le démon en mode debug et vérifier la présence de logs contenant les infos “LYWSD03——Encrypted”

Récupérer un flux instagram

Récemment, dans le cadre familial nous avons eu un problème de “partage” de vidéos entre instagram et whatsapp.

C’est un peu crétin car il s’agit de deux services de facebook, mais quand on partage une vidéo instagram dans whatsapp, seuls les personnes ayant instagram de validé sur leurs comptes peuvent lire la vidéo… Donc certains utilisateurs pouvaient lire la vidéo, les autres non…

J’ai donc du identifier une méthode pour récupérer des flux instagram (vidéos) et ainsi pouvoir les partager aux utilisateurs n’ayant pas de compte.

Donc oui, il existe une méthode rapide, fiable et linuxienne pour récupérer les vidéos : cela s’appelle instalooter, il faut l’utiliser avec Python :

Le code source sur github:

https://github.com/althonos/InstaLooter

La documentation associée:

https://instalooter.readthedocs.io/

Installation et usage pour un serveur linux

pip3 install --user instalooter --pre 
 ~/.local/bin/instalooter -v -u "monuser" -p "monmodepasse" post

Et voilà, encore une victoire de canard!

Et moi, je retourne au confinement…