[RESOLU] Script python s'éxecute depuis raspbian mais pas depuis scripts lua domoticz - Gnotify

Vous avez des questions concernant les scripts dans Domoticz, posez vos questions ici, quelque soit le langage nous tenterons des réponses pertinentes ...
Douns
Messages : 60
Enregistré le : 04 oct. 2018, 20:38
Localisation : Meurthe-et-Moselle

Re: Script python s'éxecute depuis raspbian mais pas depuis scripts lua domoticz - Gnotify

Message par Douns » 22 août 2019, 09:09

Bon j'avance!

Vu que gnotify est lancé avec root et que lorsque je me connecte en putty avec l'utilisateur pi, je me suis dit que ça pouvait venir de là.

Je me suis donc connecté avec putty et j'ai fait un sudo su pour passer sous l'utilisateur root :

Code : Tout sélectionner

pi@Domoticz:~ $ sudo su
root@Domoticz:/home/pi#

J'ai ensuite tenté un gnotify et j'ai obtenu une erreur qui correspond au fait que les deux variables d'environnement GNOTIFY_IPS et GNOTIFY_LANG ne sont pas initialisées :

Code : Tout sélectionner

root@Domoticz:/home/pi# gnotify test
Traceback (most recent call last):
  File "/usr/local/bin/gnotify", line 10, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.5/dist-packages/gnotify/gnotify.py", line 20, in main
    ips = os.getenv("GNOTIFY_IPS").split(',')
AttributeError: 'NoneType' object has no attribute 'split'

Je les ai ajoutées avec ces commandes :

Code : Tout sélectionner

root@Domoticz:/home/pi# export GNOTIFY_LANG=fr
root@Domoticz:/home/pi# export GNOTIFY_IPS=192.168.1.98

Et victoire, gnotify fonctionne! Je retente depuis domoticz... et toujours rien... :cry:
J'ai ensuite changé mon script lua pour afficher les variables d'environnement:

Code : Tout sélectionner

function os.capture(cmd, raw)
  local f = assert(io.popen(cmd, 'r'))
  local s = assert(f:read('*a'))
  f:close()
  if raw then return s end
  s = string.gsub(s, '^%s+', '')
  s = string.gsub(s, '%s+$', '')
  s = string.gsub(s, '[\n\r]+', ' ')
  return s
end

print('script lance par :'..os.capture('whoami'))
print(os.capture('set'))
et j'ai obtenu :

Code : Tout sélectionner

 2019-08-22 09:03:00.466 Status: LUA: script lance par :root
2019-08-22 09:03:00.472 Status: LUA: IFS=' ' INVOCATION_ID='ea1f02db0eb442a0a6c528e7bafeab3a' JOURNAL_STREAM='8:11354' LANG='fr_FR.UTF-8' OPTIND='1' PATH='/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin' PPID='516' PS1='# ' PS2='> ' PS4='+ ' PWD='/home/pi/domoticz' 

Il manque les variables, comment puis-je les ajouter pour root? J'ai essayé avec :

Code : Tout sélectionner

echo -e "export GNOTIFY_IPS=[ip-addresses]\nexport GNOTIFY_LANG=[language]" | sudo tee --append /etc/profile
mais cela ne fonctionne pas. :?

Je pense qu'une fois les variables ajoutées à root, ce sera bon. ;)
Domoticz V4.10717 sur raspberry pi 3 B+
RFLink Gateway Nodo 433Mhz
Contrôleur Aeon Labs Z-Wave Plus Z-Stick GEN5

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


boum
Messages : 37
Enregistré le : 18 janv. 2019, 11:34
Localisation : France

Re: Script python s'éxecute depuis raspbian mais pas depuis scripts lua domoticz - Gnotify

Message par boum » 22 août 2019, 10:00

As-tu essayé :

Code : Tout sélectionner

print(os.capture('GNOTIFY_LANG=fr GNOTIFY_IPS=192.168.1.98 gnotify test'))
?

(En regardant les sources de gnotify sur github, on voit que l'erreur est due à un changement il y a 3 mois pour supporter plusieurs IP. Le script ne vérifie pas l'existence de la variable d'environment avant d'appeler split…)

Ou comme noté dans viewtopic.php?f=17&t=7881&start=10#p72608

Code : Tout sélectionner

os.execute("export GNOTIFY_IPS=xxx.xxx.xxx.xxx; export GNOTIFY_LANG=fr;/path/to/gnotify "..tts )
Domoticz v4.10717 sur Pi³ / Z-Wave / RFXCom

Douns
Messages : 60
Enregistré le : 04 oct. 2018, 20:38
Localisation : Meurthe-et-Moselle

Re: Script python s'éxecute depuis raspbian mais pas depuis scripts lua domoticz - Gnotify

Message par Douns » 22 août 2019, 10:16

boum a écrit :
22 août 2019, 10:00
As-tu essayé :

Code : Tout sélectionner

print(os.capture('GNOTIFY_LANG=fr GNOTIFY_IPS=192.168.1.98 gnotify test'))
?
non je ne savais même pas que l'on pouvait faire comme cela! (faut pas les ; ?)

Os.capture ne me renvoie rien, par contre avec

Code : Tout sélectionner

retour_cmd=os.execute('GNOTIFY_IPS=192.168.1.98 GNOTIFY_LANG=fr gnotify test')
if retour_cmd then
   print("ok")
else
    print("ko")
end
J'ai un beau "ok" en retour! :D
Je ne suis pas à coté de l'enceinte, je vous confirme ce soir si cela fonctionne!

boum a écrit :
22 août 2019, 10:00
(En regardant les sources de gnotify sur github, on voit que l'erreur est due à un changement il y a 3 mois pour supporter plusieurs IP. Le script ne vérifie pas l'existence de la variable d'environment avant d'appeler split…)
Ouaip c’est ce que j'ai vu et l'auteur du script à l'air d'avoir arrêté toute communication ou toute maintenance. Dommage, c'est vraiment bien fichu et ça donne de l'intérêt à la google home!

boum a écrit :
22 août 2019, 10:00
Ou comme noté dans viewtopic.php?f=17&t=7881&start=10#p72608

Code : Tout sélectionner

os.execute("export GNOTIFY_IPS=xxx.xxx.xxx.xxx; export GNOTIFY_LANG=fr;/path/to/gnotify "..tts )
Mince, pas vu celui là! C'est pas faut d'avoir cherché pourtant! :oops:

Bon j'essaye tout cela et je reviens vers vous! Merci!
Domoticz V4.10717 sur raspberry pi 3 B+
RFLink Gateway Nodo 433Mhz
Contrôleur Aeon Labs Z-Wave Plus Z-Stick GEN5

georges.attali
Messages : 51
Enregistré le : 19 févr. 2016, 21:35

Re: Script python s'éxecute depuis raspbian mais pas depuis scripts lua domoticz - Gnotify

Message par georges.attali » 22 août 2019, 18:35

Bonjour,
je crois que tu es sur la bonne piste, j'ai repris ton script et juste changé le os.capture.
Voudrais tu essayer celà (je n'ai pas testé, mais il y a de bonnes chances) :

Code : Tout sélectionner

commandArray = {}
function os.capture(cmd, raw)
  local f = assert(io.popen(cmd, 'r'))
  local s = assert(f:read('*a'))
  f:close()
  if raw then return s end
  s = string.gsub(s, '^%s+', '')
  s = string.gsub(s, '%s+$', '')
  s = string.gsub(s, '[\n\r]+', ' ')
  return s
end

print('script lance par :'..os.capture('whoami'))
-- attention au " et ' ci-dessous !
-- bien sur il faut remplacer 192.168.1.45 par la vrai adresse IP 
-- de la google home
-- pas d'espace avant ou apres le signe =
-- espace apres le ";" est autorisé
-- A la fin, j'ai écrit ...test' "   je ne suis pas sur que l'espace soit autorisé, 
-- il faut peut être écrire ...test'"  (sans espace)
print(os.capture("bash -c 'export GNOTIFY_IPS=192.168.1.45; export GNOTIFY_LANG=fr; /usr/local/bin/gnotify  test' "))

return commandArray
bonne journée
GD

PS : ben, en fait, la réponse était déjà au dessus, "joker" :roll:

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Douns
Messages : 60
Enregistré le : 04 oct. 2018, 20:38
Localisation : Meurthe-et-Moselle

Re: Script python s'éxecute depuis raspbian mais pas depuis scripts lua domoticz - Gnotify

Message par Douns » 23 août 2019, 15:33

Ça fonctionne!!! :mrgreen:

les commandes qui fonctionnent sont

Code : Tout sélectionner

os.execute('GNOTIFY_IPS=192.168.1.98 GNOTIFY_LANG=fr gnotify test')
ou

Code : Tout sélectionner

os.execute("bash -c 'export GNOTIFY_IPS=192.168.1.98; export GNOTIFY_LANG=fr; gnotify  test' ")
Merci à tous! Je vais pouvoir jouer et faire entrer ma google home dans mes scripts! :roll:
Domoticz V4.10717 sur raspberry pi 3 B+
RFLink Gateway Nodo 433Mhz
Contrôleur Aeon Labs Z-Wave Plus Z-Stick GEN5

viju
Messages : 1
Enregistré le : 08 avr. 2018, 12:18

Re: [RESOLU] Script python s'éxecute depuis raspbian mais pas depuis scripts lua domoticz - Gnotify

Message par viju » 10 sept. 2019, 23:31

bonsoir à tous ,
J'utilise le super script de Bierdok pour piloter mes volets cela fonctionne à merveille.
je souhaite faire dire à ma GH la température de ma boule FIBARO , mais voila je n'entends que "degré" .....
ci joint des extraits de mon script :

local captors = {
["Temperature boule"]="dehors",

end
if property == 'temperature' then
table.insert(sentences, captor..", "..tostring(values[0]).." degrés")
********************
if #sentences > 0 then
tts = table.concat(sentences, ".")
end
print("texte à dire :" ..tts)
--os.execute("gnotify "..tts)
os.execute('export GNOTIFY_IPS=192.168.10.3 export GNOTIFY_LANG=fr gnotify '..tts)
print("ok")


lorsque je dis "Ok google temperature dehors" je n'entends que "degré".....

voila les logs de DOMOTICZ :
2019-09-10 22:18:08.157 Status: LUA: IFTTT commande vocale
2019-09-10 22:18:08.158 Status: LUA: texte à dire :Temperature boule, 23.8 degrés
2019-09-10 22:18:08.186 Status: LUA: ok

les variables sont bien la ... je ne pense pas que cela soit du au export .
quand je tapes printenv je retrouve bien :
GNOTIFY_LANG=fr
GNOTIFY_IPS=X.X.X.X

Avez vous une idée ? des tests possible à faire ? merci de votre aide.

Douns
Messages : 60
Enregistré le : 04 oct. 2018, 20:38
Localisation : Meurthe-et-Moselle

Re: [RESOLU] Script python s'éxecute depuis raspbian mais pas depuis scripts lua domoticz - Gnotify

Message par Douns » 10 sept. 2019, 23:34

Salut ! Si tu lui demades deux fois d'affilié, la seconde fois, ça marche ?
Domoticz V4.10717 sur raspberry pi 3 B+
RFLink Gateway Nodo 433Mhz
Contrôleur Aeon Labs Z-Wave Plus Z-Stick GEN5

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre