Retour d'Etat Freebox player

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
MisterT
Messages : 55
Inscription : 12 avr. 2015, 19:04

Retour d'Etat Freebox player

Message par MisterT »

Salut a tous

Je cherche a connaitre l'état de ma freebox player. Savoir si elle est allumée ou non et donc permettre de déclencher l'allumage de lumière.
Plusieurs façon possible pour savoir si la freebox player est allumée:
- Par le ping de la télé si celle ci est allumée par la freebox player (cette méthode j'y arrive)
- Par la détection du fichier device.xml (c'est cette méthode que je ne comprends pas)

J'ai trouvé le code ci dessous et j'ai essayé de l'adapté dans un script_time.lua avec un device virtuel "Freebox player"mais cela n'est pas concluant

https://www.domotique-fibaro.fr/topic/8 ... %A2%C2%BB/

Code : Tout sélectionner

local HC2 = Net.FHttp('192.168.1.110', 54243);
local result, status, errorCode = HC2:GET("/device.xml");

if errorCode == 0 then
  if tonumber(status) == 200 then
    fibaro:debug('Status: ON')
  else
    fibaro:debug('Status: OFF or In Standby Mode')
  end
else
  fibaro:debug('Connection refused')
end
mon code en lua

Code : Tout sélectionner

commandArray = {}
local Domoticz = Net.FHttp('192.168.1.14', 54243);
local result, status, errorCode = Domoticz:GET("/device.xml");

if errorCode == 0 then
  if tonumber(status) == 200 then
    commandArray['Freebox player']='On'
  else
    commandArray['Freebox player']='Off'
  end
else
    commandArray['Freebox player']='Off'
end
return commandArray

Plusieurs questions
- Est ce qu'une adaptation est possible entre Home center 2 et domoticz
-l'adresse du local HC2 correspond a la box domotique ou au freebox player?

Un petit coup de main s'il vous plait
Dernière modification par MisterT le 05 févr. 2017, 14:22, modifié 1 fois.
jay
Messages : 30
Inscription : 04 janv. 2017, 13:21

Re: Retour d'Etat Freebox player

Message par jay »

Hello,
J'utilise la même méthode du XML pour vérifier si le player est allumé ou non.
Cependant comme je ne suis pas top niveau dev en lua je l'ai fais en bash mais le principe reste le même.

Dans leur script HC2 correspond à l'ip du freebox player.
lestatcrog
Messages : 38
Inscription : 19 janv. 2016, 20:47
Localisation : Niort

Re: Retour d'Etat Freebox player

Message par lestatcrog »

je viens de faire un test pour voir le retour du freebox player par un curl :

Curl IP_FreeboxPlayer:54243/device.xml

Si allumé : ouverture du fichier XML
Si coupé : Failed to connect

Pour tes questions :
L'adresse est bien celle du freebox player
et

Code : Tout sélectionner

local Domoticz = Net.FHttp('192.168.1.14', 54243);
local result, status, errorCode = Domoticz:GET("/device.xml");
je pense que c'est du code spécifique HC2
MisterT
Messages : 55
Inscription : 12 avr. 2015, 19:04

Re: Retour d'Etat Freebox player

Message par MisterT »

Merci a Jay et lestatcrog pour ces retours

Pour Jay, peux tu mettre a dispo ton code en bash pour comprendre.Comment fais tu pour faire basculer un device virtuel sans auto check lua)
Pour lestatcrog, on pourrait traduire le code en lua par

Code : Tout sélectionner

commandArray = {}
  if Curl 192.168.1.14:54243/device.xml = "true" then
    commandArray['Freebox player']='On'
  else
    commandArray['Freebox player']='Off'
  end
return commandArray
Merci pour vos futures réponses
jay
Messages : 30
Inscription : 04 janv. 2017, 13:21

Re: Retour d'Etat Freebox player

Message par jay »

Pas de problème voila un bout de mon script bash avec le check freebox, ça fait partie d'un gros script qui me permet de déterminer s'il y a une présence chez moi, vu que je n'ai pas encore les beacons :
#SI ON VEUT FREE
status=`curl -s 'http://'$checker':54243/device.xml' | grep -oP '(?<=<modelDescription>).*?(?=</modelDescription>)'`
if [ "$status" = "Freebox UPnP Renderer" ]
then
current_Status="On"
else
current_Status="Off"
fi
Je ne check pas en fonction du code erreur de curl, mais en fonction du retour d'un GREP sur la page device.xml, si la freebox player est allumé, je cherche avec grep dans la page le continu entre les deux balises <modelDescription> et si le player n'est pas allumé alors mon grep me sortira une variable vide.

Plus loin dans mon script, je mets à jour le devices freebox sur domoticz, en méthode classique avec curl :
if [ $current_Status = 'On' ]
then
url="http://127.0.0.1:8080/json.htm?type=com ... itchcmd=On"
curl $url
else
url="http://127.0.0.1:8080/json.htm?type=com ... tchcmd=Off"
curl $url
fi
Je ne vois pas ce que tu veux dire avec l'auto check lua. Je suis vraiment pas compétent dans ce langage ;)

A dispo
MisterT
Messages : 55
Inscription : 12 avr. 2015, 19:04

Re: Retour d'Etat Freebox player

Message par MisterT »

Salut merci pour ton retour

Si j'ai bien compris tu cherches un mot dans le fichier et si tu le trouves tu bascules le device freebox player sur On et si tu as du vide tu bascules sur Off.

J'ai donc d'autres questions
- Si je copie ces codes et remplace suivant mes ip et idx aurais je un retour concluant ?
- Ou mets tu ton fichier bash dans domoticz (Sur un device.... ) pour qu'il soit exécuté ?
jay
Messages : 30
Inscription : 04 janv. 2017, 13:21

Re: Retour d'Etat Freebox player

Message par jay »

MisterT a écrit :Si j'ai bien compris tu cherches un mot dans le fichier et si tu le trouves tu bascules le device freebox player sur On et si tu as du vide tu bascules sur Off.
Oui c'est bien ça.
MisterT a écrit :Si je copie ces codes et remplace suivant mes ip et idx aurais je un retour concluant ?
Oui tu peux le copier coller dans un fichier genre check_Freebox.sh
chmod +x check_Freebox.sh (pour le rendre executable)
pour tester le script tu fais un :
./check_Freebox.sh
MisterT a écrit :- Ou mets tu ton fichier bash dans domoticz (Sur un device.... ) pour qu'il soit exécuté ?
Une fois ton script fonctionnel, il faut que le raspberry l'executre toute les x secondes ou minutes (en fonction de tes besoin)
Pour planifier l'execution de ton script :

Code : Tout sélectionner

crontab -e
Dans le fichier qui s"ouvre tu rajoutes cette ligne à la in du fichier :

Code : Tout sélectionner

*/2 * * * * /home/pi/CHEMAIN_DE_TON_SCRIPT/check_Freebox.sh >/dev/null 2>&1
Si tu es avec l'éditeur nano Tu enregistres la nouvelle crontab avec la combinaison de touche "CTRL + O" et tu quittes avec "CTRL + X"

Dans mon exemple ici, le script se lance toutes les deux minutes, mais tu peux changer en modifiant le début de la ligne avant /home/, tu trouveras ici un générateur pour la crontab en fonction de ce que tu as besoin http://www.crontab-generator.org/

@Dispo
MisterT
Messages : 55
Inscription : 12 avr. 2015, 19:04

Re: Retour d'Etat Freebox player

Message par MisterT »

Salut me revoila

Je viens de creer le script sh puis je l'ai passé en executable et enfin le crontab et......................tada c'est nickel tout fonctionne.
Juste pour ma connaissance, a quoi correspond dans le crontab

Code : Tout sélectionner

 >/dev/null 2>&1

Code : Tout sélectionner

*/2 * * * * /home/pi/CHEMAIN_DE_TON_SCRIPT/check_Freebox.sh >/dev/null 2>&1
sinon pour ceux que cela intéresse le code au complet. Remplacer Checker, idx et xxx.xxx.x.xx:xxxx par vos données

Code : Tout sélectionner

#!/bin/bash
#SI ON VEUT FREE
checker="192.168.1.14"
idx="119"
status=`curl -s 'http://'$checker':54243/device.xml' | grep -oP '(?<=<modelDescription>).*?(?=</modelDescription>)'`
if [ "$status" = "Freebox UPnP Renderer" ]
then
current_Status="On"
else
current_Status="Off"
fi
if [ $current_Status = 'On' ]
then
url="http://xxx.xxx.x.xx:xxxx/json.htm?type=command&param=switchlight&idx="$idx"&switchcmd=On"
curl $url
else
url="http://xxx.xxx.x.xx:xxxx/json.htm?type=command&param=switchlight&idx="$idx"&switchcmd=Off"
curl $url
fi
Merci encore a Jay pour ces explications détaillées.Voila ici la preuve dun bon forum d'entraide ;)
lestatcrog
Messages : 38
Inscription : 19 janv. 2016, 20:47
Localisation : Niort

Re: Retour d'Etat Freebox player

Message par lestatcrog »

Petite Variante de ton script pour ne pas avoir des petits log toutes les 2 minutes, Change le statut si besoin uniquement

Code : Tout sélectionner

#!/bin/bash
#SI ON VEUT FREE
checker="IP_FreeboxPlayer"
# Domoticz server
DOMOTICZ_SERVER="IpDomoticz:Port"
idx="155"

status=`curl -s 'http://'$checker':54243/device.xml' | grep -oP '(?<=<modelDescription>).*?(?=</modelDescription>)'`
if [ "$status" = "Freebox UPnP Renderer" ]
then
current_Status="On"
else
current_Status="Off"
fi

result=$(curl -s "http://$DOMOTICZ_SERVER/json.htm?type=devices&rid=$idx"| jq -r .result[].Status)
if [ $result != $current_Status ]; then
    curl --silent -s -i -H  "Accept: application/json"  "http://$DOMOTICZ_SERVER/json.htm?type=command&param=switchlight&idx=$idx&switchcmd=$current_Status"
fi
MisterT
Messages : 55
Inscription : 12 avr. 2015, 19:04

Re: Retour d'Etat Freebox player

Message par MisterT »

Salut

J'ai testé le code et j'ai deux erreurs:
-en ligne 16 la commande jq n'est pas reconnue
-en ligne 17 un problème de ponctuations, signes

si possibilité de corriger ;)
Répondre