Connaître le niveau de batterie d’un appareil android sur jeedom

L’article suivant décrit le process permettant la mise en place d’un script ssh sous Jeedom;

Tutorial niveau et status batterie sous jeedom

Les adaptations nécessaires et les limitations :

  1. Si le téléphone ou la tablette est hors ligne, cela affiche un avertissement.
  2. Il faut fixer l’adresse IP de la tablette ou du smartphone
  3. Sur les versions récentes d’android, on ne peut pas afficher directement le status en charge / décharge ; Il faut utiliser un contournement suivant pour avoir l’info “Charging” / “Discharging” puis l’afficher via un widget. (voir le code ci-joint et la capture décran)
  4. Toujours sur les versions récentes d’android, l’application SSH doit être lancé ET visible en arrière plan, sinon ça ne marche pas. Si on oublie, pas d’info.
ssh -p 2222 <adresse IP> cat /sys/class/power_supply/battery/uevent | grep STATUS  | cut -d'=' -f2

Monitorer XTeVe via monit

XteVe est un “proxy” vers des serveurs IPTV via des listes M3U. Je l’utilise avec mon FAI (Free) pour interfacer les chaînes multipostes avec plex. On peut également l’utiliser pour regrouper des multiples playlist d’IPTV gratuites (par exemple : https://github.com/iptv-org/iptv)

Consulter le site officiel pour plus d’informations : https://xteve.de/

Oui mais voilà, parfois lors de l’enregistrement, XteVe plante (grrr…). Donc, j’ai souhaité rapidement ajouter un monitoring automatique à xteve pour permettre de le relancer sans intervention manuelle.

La première étape consiste à “transformer” xteve en démon. Ensuite, il faut utiliser un logiciel de monitoring type monit pour le surveiller. C’est simple donc 🙂

Création d’un démon de service

Créer le fichier de service :

cd /etc/systemd/system/
sudo vi xteve.service

Copier le contenu suivant

[Unit]
Description=xTeVe Service
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
ExecStart=/dossier_installation/xteve -config dossier_configuration
ExecReload=/usr/bin/killall xteve
ExecStop=/usr/bin/killall xteve
KillMode=process
Restart=always
RestartSec=15

User=running_user
Group=running_group
[Install]
WantedBy=multi-user.target

Attention à bien remplir les éléments manquants : dossier_installation,dossier_configuration, running_user et running_group.

On sauvegarde le fichier, puis on active le nouveau service :

sudo systemctl enable xteve
sudo systemctl start xteve

Création du fichier de monitoring pour monit

On crée un nouveau fichier pour ce monitoring ;

sudo vi /etc/monit/conf.d/xteve
check process xteve matching "xteve"
    start program = "systemctl start xteve"
    stop program = "systemctl stop xteve"
    if failed host 127.0.0.1 port 33400 with timeout 30 seconds for 3 cycles then restart

Attention à adapter le numéro de port du monitoring.

Ensuite, il ne reste plus qu’à relancer monit :

sudo /etc/init.d/monit restart

Et voilà, xteve fonctionne désormais tout seul.

… Et les mises à jour ?

Ah… oui… le défaut, c’est que xteve se met à jour uniquement au démarrage de l’application.

Donc, il faut également penser à le relancer de temps à autre pour qu’il puisse faire ces mises à jour. Pour cela, le plus simple reste à rajouter une ligne dans le crontab pour le redémarrer par exemple une fois par semaine le mardi vers 4h du matin (peu de chances d’enregistrer quelque chose…)

Ce qui donne dans crontab :

0 4 * * 1 systemctl restart xteve

Jeedom V4 le positionnement GPS

La version V4 de jeedom permet de rajouter des informations de configuration GPS de votre domicile. Ce positionnement est accessible aux plugins, … mais pas directement dans les scénarios.

Comme je suis l’adepte de ne pas dupliquer l’information inutilement, si vous en avez besoin, le plus simple est alors d’utiliser un bloc code et dans le bloc config avec comme clé

  • Pour la latitude info::latitude
  • Pour la longitude -: info::longitude
  • Et pour l’altitude : info::altitude

voir l’aide en ligne : https://jeedom.github.io/documentation/phpdoc/classes/config.html

Alors, à quoi peut servir cette information ? Et bien, on peut par exemple l’utiliser pour calculer les heures de lever / coucher du soleil sans passer par internet :

$latitute=config::byKey("info::latitude");
$longitude=config::byKey("info::longitude");
$sun_info = date_sun_info(time(), $latitute, $longitude);
$sunrise = date("Hi", $sun_info["sunrise"]);
$sunset = date("Hi", $sun_info["sunset"]);

//On peut ensuite soit stocker la valeur
cmd::byString('#[Météo][infos][lever]#')->event($sunrise);
cmd::byString('#[Météo][infos][coucher]#')->event($sunrise);
// ou envoyer a un scénario
$scenario->setData('sunrise', $sunrise);
$scenario->setData('sunset', $sunset);

Bien sûr, comme d’habitude avec jeedom, il existe 36 méthodes pour réaliser cette opération. Vous pouvez également utiliser le plugin meteo, qui marche très bien mais passe par internet. Ou si vous souhaitez le calculer dans votre jeedom, je conseille le script de Kiboost, très bien expliqué, et qui se base : https://github.com/KiboOst/php-sunPos/tree/master/Jeedom

Moi je retourne débugger mes scénarios !

Monitoring via monit et letsencrypt

Après avoir perdu une soirée à résoudre le souci … Je pense que cela mérite un petit article.

L’installation de monit sur un serveur peut s’avérer complexe si on doit la relier à un serveur signé par letsencrypt ;

En effet, monit ne supporte pas le format des certificats du certbot de letsencrypt ET ne permet d’avoir que des droits 600 sur le fichier (grrr).

Il faut donc rajouter un hook de déploiement. Un exemple de hook est disponible ici :

https://www.ringingliberty.com/2017/12/30/monit-lets-encrypt-and-file-permissions/

#!/bin/bash

for domain in $RENEWED_DOMAINS
do
    case $domain in
    example.com)
        cat $RENEWED_LINEAGE/privkey.pem $RENEWED_LINEAGE/fullchain.pem > /etc/monit/pemfile-$domain.pem
        chmod 600 /etc/monit/pemfile-$domain.pem
        ;;
done

Je remercie grandement l’auteur. Mais, l’article d’origine ne le précise pas, ce script de hook de déploiement est à installer (via root) dans l’emplacement:

/etc/letsencrypt/renewal-hooks/deploy

Ensuite, rulez!

Inspiration du weekend en domotique

Le retour de mon article d’inspiration avec au menu cette semaine quelques liens vers domo-blog et laboiteajb 🙂

Réutiliser une télécommandes de portail dans jeedom

Si comme moi vous vous êtes retrouvé avec une télécommande multi-bouton mais qu’un seul sert vraiment, cela peut vous servir. Cela nécessite un peu de matériel, mais au moins vous pourrez faire des trucs rigolos genre démarrer le robot de ménage avec un bouton ou… faire parler vos enceintes pour dire avec la voix de Homer “D’oh” oui, bon, OK on se satisfait de pas grand chose…

https://www.domo-blog.fr/controle-jeedom-telecommande-portail-toutes-marques/

Mettre en place des designs sous jeedom

Tout à fait autre chose, mais voilà un sujet “compliqué” : comment mettre en place un design jeedom de qualité. L’article de domo-blog est intéressant et permet de poser de bonnes bases. Attention par contre, lors de la migration de jeedom V3 à V4, il faut refaire les designs!

https://www.domo-blog.fr/design-jeedom-comment-mettre-en-place-une-interface-tablette-tactile-belle-et-fonctionnelle/

Connecter le compte enedis / linky a jeedom

Oui je sais, “il paraît” que Linky c’est mal, que ça tue les bébés phoques ou je ne sais quoi. … mais vu l’avancement de l’installation, on va tous finir en France à avoir un compteur communiquant, donc … il faut s’y faire.

Alors, pour cet article, si votre compteur est un Linky, ET si votre central électrique est en zone couverte ET si vous avez ouvert un compte Enedis pour visualiser les informations … alors vous aurez sur votre compte Enedis des informations régulières sur votre consommation, pseudos anonymisées. Et si on en profitait pour l’intégrer à Jeedom ? C’est le but de l’article suivant :

https://laboiteajb.fr/jeedom-connecter-un-compteur-linky/

Petit conseil fourni par un technicien Enedys qui est intervenu en urgence chez moi : bien surveiller l’installation du compteur, surtout au niveau du serrage des arrivées électriques.

Bon week-end à tous!