Synchroniser automatiquement les photos de son smartphone sur son NAS

Suite à la décision « controversée » de google de rendre son mécanisme de sauvegarde des photos payants et suite à l’arrêt du développement côté plex du service camera upload, je me suis penché vers les alternatives existantes pour permettre de sauvegarder les photos vers mon NAS.

Il existe sûrement d’autres outils, mais voilà ceux que j’utilise pour moi ou pour ma famille.

PhotoSync est une application payante disponible sur à priori toutes les plateformes existantes. La solution est payante sur Android / iOS mais fonctionne bien, ne nécessite pas de grosse infrastructure derrière.

Inconvénient : c’est payant. Mais bon, pffft 2€ quoi. A vous de voir.

Photosync (Google Play) / Photosync (AppleStore)

NextCloud est une application serveur dont l’application sur smartphone permet entre autre de synchroniser les photos automatiquement prises sur les téléphones android

L’inconvénient majeur c’est la complexité du système à mettre en place. L’installation nécessite de nombreux paquets et de la configuration « manuelle » à exécuter (ligne de commande…). La documentation en ligne est bien faite et il vaut mieux éviter de regarder les sites tiers sur le sujet qui ne sont pas à jour et peuvent faire faire des erreurs. J’en sais quelque chose…

NextCloud(Google Play) / NextCloud (Apple Store)

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 \;

Installation d’un home-cinema 4K avec Kodi Plex

Suite à la fermeture des cinémas, nous nous sommes lancés dans un projet qui nous tenait à coeur : la mise en place d’un « vrai » cinéma à la maison « home cinema ». C’est à dire, un video projecteur avec une vrai toile, un bon son et une installation confortable. Et même en bonus les M&ms 🙂

Analyse préalable de notre collection de films

Nous possédons une belle collection de film d’origines diverses et des abonnements à différents services de replay

  • Des blu-ray au format « standard » 1080p 24p, et en E-AC3, et des blu-ray 4K rippée au format MKV sous Plex.
  • Des DVD vidéos au format … DVD, 480p 24p, AC3. Rippée aussi au format MKV sous Plex.
  • Des abonnements à Disney+, Amazon Prime (donc, des films en 4K, 1080p)
  • Sans compter les replay divers et variés… et les enregistreur videos sur la TNT de Plex.
Une partie de notre collection …

Une remarque intéressante : les vidéos sont souvent au format 24p. Donc dans l’idéal, il faut un video projecteur le supportant pour éviter les effets de judder.

Judder ? Késako ?

Les films cinémas sont enregistrés bien souvent à 24 images / secondes. Mais pour être diffusé sur la télé ou des vidéoprojecteur 50Hz ou 60Hz, la TV va insérer des images mais pas tout le temps, et cela donne un effet de non fluidité aux mouvements rapides. Je ne vais pas rentrer dans les considérations techniques : Voir cette vidéo YouTube de la chaîne RTings (en anglais).

Le vidéoprojecteur n’aura pas de souci s’il gère une fréquence d’affichage en multiple de 24. En 120Hz ou 240Hz ce problème n’existe pas.

Pour la diffusion des vidéos, soit le vidéoprojecteur permet directement de décoder les différents formats, soit il vaut mieux utiliser un matériel dédié. Après une loooooongue analyse nous en avons conclus que la partie video devait être dédié à la vidéo, et non pas au décodage. Il s’agit essentiellement d’une question de chauffage : le videoprojecteur chauffe beaucoup et rajouter un processeur graphique dans un emplacement surchauffée est tout sauf une bonne idée. En gros : ça rame pour éviter que ça chauffe ! On alors faut payer une fortune… Sans compter le suivant de l’OS inexistant de ce genre de matériel.

Deux possibilités sont apparues :

  • Soit utiliser un mini-pc (type Mi Box android, ou type intel nuc sous windows 10) relié à bon videoprojecteur.
  • Soit utiliser un téléphone android permettant la diffusion via un cable USB-C vers HDMI, ou des clés Android (Google Chromecast, Amazon Fire TV stick, Nvidia Shield)

Nous avons exclus la seconde possibilité car elle ne permettent pas de brancher un lecteur Blu-Ray. Mais si vous n’en avez pas besoin, c’est une solution tout à fait valable. Attention tout de même : tous les Chromecast ne supportent pas le 24p!

Notre matériel

Un Mini PC : de marque AcePC, BT 4.2, WiFi 5G, Gigabit, un disque mSSD, des ports USB3, 8G de ram et décodage de la 4K en hardware.

Le videoprojecteur : un Vankyo fourni avec son écran de projection, acheté sur AliExpress, il supporte les flux en 24p, 50hz 60hz, 1080p et 4K

Une manette Bluetooth pour utiliser Kodi

Au niveau du son, en attendant mieux, nous avons deux grosses enceintes Bose (stéréo, donc)

Pour l’écran, nous avons fabriqué un cadre peint en noir et attaché la toile avec des agrafes, bien tendue. Pour tester le tout, nous avons utilisé un chromecast ultra (4K certes, mais pas 24p…)

Le rendu avant configuration logiciel

Configuration préalable du MiniPC

  1. Créer un compte dédié à la vidéoprojection
  2. Ajouter l’autologon pour ce compte : voir l’aide en ligne de Microsoft sur le sujet :

Configurer Windows pour automatiser la logon – Windows Server | Microsoft Docs

Autologon – Windows Sysinternals | Microsoft Docs

Configuration préalable de Kodi sur windows 10

  1. Télécharger et installer Kodi
  2. Installer l’extension PlexKodiConnect : suivre la procédure d’installation du github : Installation · croneter/PlexKodiConnect Wiki · GitHub
  3. Paramètre Kodi pour basculer en 24p automatiquement l’écran : Voir l’aide en ligne Settings/Player/Videos – Official Kodi Wiki. Le réglage dans notre cas a été positionné sur « on start / stop » qui permet de basculer en 60Hz dans les menus de Kodi et en 24p dans les films.

Démarrer Kodi automatiquement lors de l’ouverture de session

Kodi ne se lance pas tout seul au démarrage de la session windows 10 : il faut ajouter un petit programme compagnon appelée Launcher4Kodi :

XBMCLauncher / Launcher4Kodi – All in One Tool for Change Shell, Set Focus and more

Plugins de streaming (Disney+, Amazon Prime etc.)

Disney+

  • Ouvrir Kodi, ouvrir les Settings, puis File Manager
  • Double cliquer sur Add Source et sélectionner None. Valider le message si nécessaire.
  • Coller le lien suivant dans la barre d’adresse et la nommer SlyGuy
http://k.slyguy.xyz
  • Revenir au menu principal de Kodi, sélectionner le menu add-on. Cliquer sur Package installer, puis Install from Zip file. Rechercher puis installer SlyGuy
  • Ensuite, il faut se rendre dans le repository SlyGuy, et chercher Disney+ dans la liste des Add-ons vidéos et l’installer puis le configurer.
  • Lors du premier lancement d’une vidéo, Kodi va vous demander d’installer le plugin « InputStream Adaptative » et le codec Widevine, qui sont absolument nécessaires pour lire des videos protégées par DRM.

Amazon Prime Video

Quasiment le même principe, mais il faut aller chercher le repository et l’installer « à la main » depuis le github suivant :

Release Plugin Repository v1.0.3 for Leia and v1.0.0 for Matrix · Sandmann79/xbmc · GitHub

Ce projet nous a permis pour l’instant de profiter agréablement d’un certains nombre de films « presque comme au cinéma ».

Pour le futur, nous avons des évolutions prévues :

  • L’ajout du lecteur Blu-Ray USB, le tout relié avec Kodi. Tests à venir 🙂
  • Intégration d’Alexa à Kodi …en français
  • L’installation d’une vraie toile de cinéma électrique
  • Installation d’un son home-cinema..

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

Récupérer les informations de pollens.fr dans HomeAssistant

Cet article a pour objectif de combler un petit manque de HomeAssistant par rapport à Jeedom : l’affichage des valeurs de pollens.fr pour les afficher dans une carte et permettre de réaliser des alertes personnalisées.

Comme pour Jeedom, les données sont issues du site pollens.fr. Je me suis également imposé comme contrainte d’éviter de faire 20 appels au site et surcharger inutilement.

La méthode est de créer un ensemble de sensors en une seule fois.

Première action : récupérer l’adresse du JSON de pollens.fr adapté à votre département en remplaçant XX par le numéro du département:

https://www.pollens.fr/risks/thea/counties/XX

Ensuite, il faut créer les sensors en YAML dans le fichier configuration.yaml … ou autre fichier .yaml, cela dépend de votre configuration. A noter que la mise à jour ne sera faite que toutes les 43 200 secondes, soit … 12h. On peut augmenter si on le souhaite pour ne le faire qu’une fois par jour.

J’ai positionné une icône de fleur qui vient de material design. Elle devrait fonctionner dans toutes les dernières versions de HomeAssistant. https://pictogrammers.github.io/@mdi/font/5.3.45/

sensor:
  - platform: rest
    name: Pollens
    resource: https://www.pollens.fr/risks/thea/counties/XXXX
    json_attributes:
      - risks
      - riskLevel
    value_template: '{{ value_json.riskLevel }}'
  - platform: template
    sensors:
      pollens_risks_tilleul:
        friendly_name: Tilleul
        value_template: '{{ states.sensor.Pollens.attributes["risks"][0]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_ambroisie:
        friendly_name: Ambroisie
        value_template: '{{ states.sensor.Pollens.attributes["risks"][1]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_olivier:
        friendly_name: Olivier
        value_template: '{{ states.sensor.Pollens.attributes["risks"][2]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_plantain:
        friendly_name: Plantain
        value_template: '{{ states.sensor.Pollens.attributes["risks"][3]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_noisetier:
        friendly_name: Noisetier
        value_template: '{{ states.sensor.Pollens.attributes["risks"][4]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_aulne:
        friendly_name: Aulne
        value_template: '{{ states.sensor.Pollens.attributes["risks"][5]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_armoise:
        friendly_name: Armoise
        value_template: '{{ states.sensor.Pollens.attributes["risks"][6]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_chataignier:
        friendly_name: Châtaignier
        value_template: '{{ states.sensor.Pollens.attributes["risks"][7]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_urticacees:
        friendly_name: Urticacées
        value_template: '{{ states.sensor.Pollens.attributes["risks"][8]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_oseille:
        friendly_name: Oseille
        value_template: '{{ states.sensor.Pollens.attributes["risks"][9]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_graminees:
        friendly_name: Graminées
        value_template: '{{ states.sensor.Pollens.attributes["risks"][10]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_chene:
        friendly_name: Chêne
        value_template: '{{ states.sensor.Pollens.attributes["risks"][11]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_platane:
        friendly_name: Platane
        value_template: '{{ states.sensor.Pollens.attributes["risks"][12]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_bouleau:
        friendly_name: Bouleau
        value_template: '{{ states.sensor.Pollens.attributes["risks"][13]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_charme:
        friendly_name: Charme
        value_template: '{{ states.sensor.Pollens.attributes["risks"][14]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_peuplier:
        friendly_name: Peuplier
        value_template: '{{ states.sensor.Pollens.attributes["risks"][15]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_frene:
        friendly_name: Frêne
        value_template: '{{ states.sensor.Pollens.attributes["risks"][16]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_saule:
        friendly_name: Saule
        value_template: '{{ states.sensor.Pollens.attributes["risks"][17]["level"] }}'
        icon_template: mdi:flower
      pollens_risks_cypres:
        friendly_name: Cyprès
        value_template: '{{ states.sensor.Pollens.attributes["risks"][18]["level"] }}'
        icon_template: mdi:flower
    # Request every 12 hours
    scan_interval: 43200

Bien penser à redémarrer après la modification du fichier YAML pour que HomeAssistant ajoutent les nouveaux sensors .

Ensuite, il faut créer une carte spéciale de type entity-filter pour n’afficher que les valeurs de pollens non vide.

type: entity-filter
entities:
  - sensor.pollens_risks_tilleul
  - sensor.pollens_risks_ambroisie
  - sensor.pollens_risks_olivier
  - sensor.pollens_risks_plantain
  - sensor.pollens_risks_noisetier
  - sensor.pollens_risks_aulne
  - sensor.pollens_risks_armoise
  - sensor.pollens_risks_chataignier
  - sensor.pollens_risks_urticacees
  - sensor.pollens_risks_oseille
  - sensor.pollens_risks_graminees
  - sensor.pollens_risks_chene
  - sensor.pollens_risks_platane
  - sensor.pollens_risks_bouleau
  - sensor.pollens_risks_charme
  - sensor.pollens_risks_peuplier
  - sensor.pollens_risks_frene
  - sensor.pollens_risks_saule
  - sensor.pollens_risks_cypres
state_filter:
  - operator: '>'
    value: 0
card:
  type: glance
  title: Pollens

Et voilà une jolie carte

Une amélioration possible serait de rajouter un code couleur pour que l’icône soit jaune ou rouge selon le niveau, mais il faudrait prendre en compte le thème pour que cela reste « lisible ».