[LUA] Bibliothèque de fonctions

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: bibliothèque de fonctions pour scripts LUA

Message par papoo »

a priori JSON.lua est présent dans ton répertoire /home/pi/domoticz/scripts/lua/
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
bnic
Messages : 15
Inscription : 12 mai 2017, 09:28

Re: bibliothèque de fonctions pour scripts LUA

Message 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
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: bibliothèque de fonctions pour scripts LUA

Message 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
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: bibliothèque de fonctions pour scripts LUA

Message 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'
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
totof60
Messages : 373
Inscription : 29 avr. 2016, 09:31

Re: bibliothèque de fonctions pour scripts LUA

Message 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 ?
Domoticz V2022.2
sous Buster, Homebridge,RfLink
Raspberry pi3, Google home mini
plein de truc wifi !! de l'esp-01 jusque le nodemcu en passant par le wemos et même du DIY
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: bibliothèque de fonctions pour scripts LUA

Message 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.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
technick
Messages : 14
Inscription : 20 juil. 2017, 01:12

Re: bibliothèque de fonctions pour scripts LUA

Message 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 ;)
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: bibliothèque de fonctions pour scripts LUA

Message 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
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: bibliothèque de fonctions pour scripts LUA

Message 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
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
landaisbenj
Messages : 695
Inscription : 12 mars 2017, 19:24

Re: bibliothèque de fonctions pour scripts LUA

Message 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.
Rpbi3b: Domoticz + Homebridge + Monit + Freebox scripts + Shellinabox; Rpbi2: Jarvis
Domoticz: Derniere stable; RFLINK: Dernière stable; Xiaomi Gateway
Répondre