Page 1 sur 1

comportement d'un Script different entre terminal et evenement lua

Publié : 05 nov. 2018, 16:03
par MowokS
Bonjour à tous,
J'ai une gateway Xiaomi ainsi que des capteurs de mouvements aqara et j'utilise Domoticz pour controler l'allumage d'ampoules Xiaomi Philips.
Je pense avoir un problème de porté wifi (que je résoudrais plus tard) qui doit etre à l'origine de la non-exécution de commandes d'allumage/extinction:
je vois bien les switchs dans domoticz passer en "On", mais parfois rien ne bouge.
J'ai donc souhaiter mettre en place une vérification du statut de ces ampoules via un script bash lancer depuis un Évènement lua, afin de relancer la commande si le statut de l'ampoule n'a pas changé.J'ai donc créé un script bash (que j'ai découvert grâce à vous :D ) pour vérifier le statut dont voici un extrait:

Code : Tout sélectionner

#!/bin/bash

	if [ $1 = tv ]; then
		status=$(php miio-cli.php --ip AdresseDeLampoule --token IciMaCléToken --sendcmd '{"id":1,"method":"get_prop","params":["power"]}')
		resultat=$(grep -o off <<<$status)
		
			if [ "$resultat" = off ]; then
        		curl 'http://ID:PASSWD@IP:Port/json.htm?type=command&param=switchlight&idx=62&switchcmd=Off&level=0&passcode='
					else
						curl 'http://ID:PASSWD@IP:Port/json.htm?type=command&param=switchlight&idx=62&switchcmd=On&level=0&passcode='
			fi
	fi

Ce script interroge l’état de l'ampoule et en fonction de ce dernier passe un dummy switch On ou Off.
Quand je l’exécute dans le terminal de mon RPI3 tout fonctionne à merveille.
J'ai essayé plusieurs scripts Lua de ce type et le dummy switch passe en On et jamais en Off.
J'avoue ne pas comprendre.

Code : Tout sélectionner

commandArray = {}
if devicechanged['lampe tv'] == 'Off' then
    os.execute('//home/osmc/domoticz/scripts/php-miio-master/status.sh tv')
elseif devicechanged['lampe tv'] == 'On' then
     os.execute('//home/osmc/domoticz/scripts/php-miio-master/status.sh tv')
end

return commandArray
Je découvre la programmation, le lua, le bash, par contre la defaite, ça je connais :lol:
Ayant perdu pas mal d'heures pour une connerie pareille (madame trouve que d'appuyer sur l'interrupteur est moins problématique, personnellement je trouve ça moins fun...)... du coup si quelqu'un pouvait m'eclairer ça serait bien sympa =)
Au plaisir de vous lire

Re: comportement d'un Script different entre terminal et evenement lua

Publié : 05 nov. 2018, 17:52
par dxfantome
slt
pour ma part je ne pourrais pas t'aider directement sur ton prb , peut etre un probleme dans le chemein d'acces cité dans ton lua , ou un probleme de droit .
ca n'arrangera pas ton probleme mais tu peux faire plus simple , au lieux d'un if pour "off" et un "else" pour "On" :
if (devicechanged['lampe tv']) then
...
...
end

Re: comportement d'un Script different entre terminal et evenement lua

Publié : 05 nov. 2018, 19:29
par MowokS
dxfantome a écrit : 05 nov. 2018, 17:52 slt
pour ma part je ne pourrais pas t'aider directement sur ton prb , peut etre un probleme dans le chemein d'acces cité dans ton lua , ou un probleme de droit .
ca n'arrangera pas ton probleme mais tu peux faire plus simple , au lieux d'un if pour "off" et un "else" pour "On" :
if (devicechanged['lampe tv']) then
...
...
end
merci pour ta reponse, je ne connaissais pas ce tip =)

Re: comportement d'un Script different entre terminal et evenement lua

Publié : 05 nov. 2018, 21:36
par oredin
Bonjour,

Je n'ai aucun de ces matériels mais à la lecture du bout de bash, il y a qqch qui me semble étrange.

Essayez de remplacer $off par off (sans le $) dans le test "if [ "$resultat" = "$off" ]; then".

En Bash, les termes commençant par "$" sont des variables. Sauf à ce que la variable $off ait été renseigné ailleurs, votre test compare $resultat à une chaîne vide, ce qui expliquerait que le test soit toujours faux et que votre interrupteur passe toujours à on.

Bon courage.

Re: comportement d'un Script different entre terminal et evenement lua

Publié : 06 nov. 2018, 11:28
par MowokS
oredin a écrit : 05 nov. 2018, 21:36 Bonjour,

Je n'ai aucun de ces matériels mais à la lecture du bout de bash, il y a qqch qui me semble étrange.

Essayez de remplacer $off par off (sans le $) dans le test "if [ "$resultat" = "$off" ]; then".

En Bash, les termes commençant par "$" sont des variables. Sauf à ce que la variable $off ait été renseigné ailleurs, votre test compare $resultat à une chaîne vide, ce qui expliquerait que le test soit toujours faux et que votre interrupteur passe toujours à on.

Bon courage.
Bonjour et merci d'avoir pris le temps de me répondre.
Désolé mais j'avais cropé le script bash en ometant d'afficher les variables que j'avais déclaré, ma petite voix intérieure me disait que ça porterait à confusions.
J'ai donc édité mon post afin que ce soit plus clair.
Donc comme je le disais, en exécutant dans le terminal ce script, les dummy switch passent en ON/OFF en fonction de l’état de l'ampoule.
En le lançant à l’intérieur d'un script lua, le dummy switch passe en ON quel que soit l’état de l'ampoule, et quasiment en simultané avec le switch qui declanche le script d'etat, comme s'ils etaient linké.
Bonne journée

Re: comportement d'un Script different entre terminal et evenement lua

Publié : 06 nov. 2018, 11:44
par vil1driver
Salut,

Pourquoi ne récupères tu pas le status directement depuis le script lua ?

Pour le côté 'linké', c'est le principe du type DEVICE des scripts lua dans domoticz

Re: comportement d'un Script different entre terminal et evenement lua

Publié : 06 nov. 2018, 12:10
par MowokS
vil1driver a écrit : 06 nov. 2018, 11:44 Salut,

Pourquoi ne récupères tu pas le status directement depuis le script lua ?

Pour le côté 'linké', c'est le principe du type DEVICE des scripts lua dans domoticz
Bonjour Vil1driver,
Merci pour ta reponse.
Je ne sais pas passer ce type de commande php miio-cli.php --ip AdresseDeLampoule --token IciMaCléToken --sendcmd '{"id":1,"method":"get_prop","params":["power]}' dans os.execute, il y a des symboles que le script lua ne digére pas :lol:

Re: comportement d'un Script different entre terminal et evenement lua

Publié : 13 nov. 2018, 17:44
par landaisbenj
Tu vas passer une chaine dans os.execute. Du coup une chaine se met entre guillement soit " soit ' du coup si tu en utilise un dans ta chaine tu as un caractere d'extraction ce qui arrete ta chaine...
Genre: "comment va tu'yo d'poil" Dans ma chaine j'ai utiliser des ' donc je delimite ma chaine par des ".

Si j'avais voulu delimiter ma chaine par des ' il aurait fallu que je sorte les memes symboles de ma chaine:

'comment va tu\'yo d\'poil' .

Cherche de ce coté la pour utiliser ta commande.

Re: comportement d'un Script different entre terminal et evenement lua

Publié : 14 nov. 2018, 13:00
par MowokS
Bonjour et merci pour vos contributions.

Je viens de me rendre compte que dans mon script je n'avais pas inclus le chemin vers le dossier afin d’exécuter les commandes.
Comme je testais mon script dans le dossier tout aller bien forcément.
Je l'ai donc ajouté en début de script:

Code : Tout sélectionner

#!/bin/bash
cd /home/osmc/domoticz/scripts/php-miio-master/
Me reste plus qu'a gérer la temporisation car mes ampoules ne répondent pas si elles reçoivent plus d'une commande dans un intervalle de moins de 2s.

Problème résolu pour moi, un grand merci à tous!