Page 2 sur 8

Re: bibliothèque de fonctions pour scripts LUA

Publié : 14 mai 2017, 16:59
par papoo
a priori JSON.lua est présent dans ton répertoire /home/pi/domoticz/scripts/lua/

Re: bibliothèque de fonctions pour scripts LUA

Publié : 15 mai 2017, 09:34
par bnic
papoo a écrit :a priori JSON.lua est présent dans ton répertoire /home/pi/domoticz/scripts/lua/
J'ai sans doute une config un peu spéciale, je suis sous un ex box android Tronsmart sur laquelle j'ai installé Libreelec, et j'ai installé Domoticz via Docker. Je n'ai pas un package prêt à l'emploi. En tout cas dans ma config, même le dossier scripts n'existait pas... mais en l'ajoutant, aucun soucis ça fonctionne bien

Re: bibliothèque de fonctions pour scripts LUA

Publié : 22 mai 2017, 16:54
par vil1driver
petite fonction que j'utilise pour agrémenter le script de luminosité virtuelle
http://www.domoticz.com/wiki/Real-time_ ... Lux_sensor...

du coups en plus de mon device virtuel indiquant l'angle
je reçois dans un device texte la direction cardinale
Pour moi c'est plus parlant

Code : Tout sélectionner

-- convertion degrés en direction cardinale
function cardinals(deg)
	local cardinalDirections = {
		['N'] = {348.75, 360},
		['N'] = {0, 11.25},
		['NNE'] = {11.25, 33.75},
		['NE'] = {33.75, 56.25},
		['ENE'] = {56.25, 78.75},
		['E'] = {78.75, 101.25},
		['ESE'] = {101.25, 123.75},
		['SE'] = {123.75, 146.25},
		['SSE'] = {146.25, 168.75},
		['S'] = {168.75, 191.25},
		['SSW'] = {191.25, 213.75},
		['SW'] = {213.75, 236.25},
		['WSW'] = {236.25, 258.75},
		['W'] = {258.75, 281.25},
		['WNW'] = {281.25, 303.75},
		['NW'] = {303.75, 326.25},
		['NNW'] = {326.25, 348.75}
		}
	local cardinal
	for dir, angle in pairs(cardinalDirections) do
		if (deg >= angle[1] and deg < angle[2]) then
			cardinal = dir
			break
		end	
	end
	return cardinal
end

Re: bibliothèque de fonctions pour scripts LUA

Publié : 02 août 2017, 13:19
par papoo
A priori, plus besoin de fonctions de notification genre pushbullet,
la possibilité de choisir le type de notification dans ses scripts Lua est maintenant implémentée
https://www.domoticz.com/forum/viewtopi ... 84#p116009

Par exemple, si vous souhaitez utiliser kodi et pushbullet, vous avez besoin de quelque chose comme :

Code : Tout sélectionner

commandArray['SendNotification']='subject#body#0#sound#extradata#kodi;pushbullet'

Re: bibliothèque de fonctions pour scripts LUA

Publié : 02 août 2017, 14:49
par totof60
papoo a écrit :A priori, plus besoin de fonctions de notification genre pushbullet,
la possibilité de choisir le type de notification dans ses scripts Lua est maintenant implémentée
https://www.domoticz.com/forum/viewtopi ... 84#p116009

Par exemple, si vous souhaitez utiliser kodi et pushbullet, vous avez besoin de quelque chose comme :

Code : Tout sélectionner

commandArray['SendNotification']='subject#body#0#sound#extradata#kodi;pushbullet'

Intéressant, et avec le " module.lua" ca donne quoi ?

Re: bibliothèque de fonctions pour scripts LUA

Publié : 02 août 2017, 18:30
par papoo
Désolé mais jai pas compris la question
Si tu parles des fonctions de vil1driver la fonction Pushbullet ne sert plus mais elle peut rester en place pas besoin de la supprimer.

Re: bibliothèque de fonctions pour scripts LUA

Publié : 05 août 2017, 17:21
par technick
Bonjour,

j'aime bien l'idée de faire des fonctions Lua, je me permets d'attirer votre attentions sur mes fonctions de Log et autres :

https://easydomoticz.com/forum/viewtopi ... =10&t=4437

Si ça peut aider ;)

Re: bibliothèque de fonctions pour scripts LUA

Publié : 07 sept. 2017, 09:35
par landaisbenj
Hello.

J'aurai voulu savoir si il etait possible de faire ca: (notamment la ligne 3)

Code : Tout sélectionner

-- retourne le temps en seconde depuis la dernière maj du péréphérique
function lastSeen(device)
  timestamp = otherdevices_lastupdate[device] or device or uservariable_lastupdate[device]
  y, m, d, H, M, S = timestamp:match("(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+)")
  difference = os.difftime(os.time(), os.time{year=y, month=m, day=d, hour=H, min=M, sec=S})
  return difference
end
Au vu du code je suppose que la fonction arrive a faire la différence avec le "OR" (bien que je ne sache pas comment ?) et donc qu'on peut rajouter aussi le fonctionnement pour une variable.

A la base je cherche a créer un timer.
Par exemple je passe mon script, si il n'est pas valide je met ma variable a 1. Et pour le repasser je veux tester le faite que ma variable soit au moins a 1 depuis plus de 10 minutes par exemple.

Genre:

Code : Tout sélectionner

if uservariables['Variable'] == "0" or (uservariables['Variable'] == "1" and lastSeen('Variable') > 600) then
	if condition then
		action
		commandarray['Variable:Variable'] == "0"
	else
		commandarray['Variable:Variable'] == "1"
	end
end

Re: bibliothèque de fonctions pour scripts LUA

Publié : 09 sept. 2017, 09:17
par vil1driver
le or device de cette ligne

Code : Tout sélectionner

timestamp = otherdevices_lastupdate[device] or device
permet de passer outre une valeur null retournée par otherdevices_lastupdate[device]

je m'en sers pour le script double clic ou send twice (qui ne sont d'ailleurs pas à jour...)
viewtopic.php?f=17&t=401
viewtopic.php?f=17&t=480

car dans ce script j'enregistre le lastupdate directement dans une variable
je fais donc ceci pour fournir à la fonction un lastupdate spécifique par lecture du contenu de la variable

Code : Tout sélectionner

lastSeen(uservariable['ma variable'])
dans ton cas sans modifier la fonction ceci doit fonctionner

Code : Tout sélectionner

lastSeen(uservariable_lastupdate['ta variable'])
ce que tu propose doit fonctionner également je pense, mais je me demande bien pourquoi tu n'as pas simplement fait l'essai.. tu aurais eu ta réponse sans attendre

Re: bibliothèque de fonctions pour scripts LUA

Publié : 10 sept. 2017, 21:22
par landaisbenj
dans ton cas sans modifier la fonction ceci doit fonctionner:
lastSeen(uservariable_lastupdate['ta variable'])
Merci pour l'info ca fonctionne effectivement.

J'ai fais l'essai, mais j'ai eu cette erreur:
in *** Test LUA: /home/limabravo/domoticz/scripts/lua/modules.lua:165: field 'day' missing in date table
Et comme je m'attendais a ce que ça marche, je vous ai posé la question par reflex...

Du coup apres ton explication j'ai verifié et il s'agissait bien du probleme de valeur null a cause du or device.
J'ai echangé:

Code : Tout sélectionner

 timestamp = otherdevices_lastupdate[device] or device or uservariables_lastupdate[device] 
par:

Code : Tout sélectionner

 timestamp = otherdevices_lastupdate[device] or uservariables_lastupdate[device] or device
Et donc ca marche aussi.