[LUA] Sortir les poubelles

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

[LUA] Sortir les poubelles

Message par vil1driver »

Salut,

juste un petit script pour m'avertir de sortir la poubelle et la bonne ;)
  • semaine impair = poubelle grise
  • semaine pair = poubelle jaune
j'utilise SmsGateway mais libre à vous d'utiliser le système de notification qui vous convient

Code : Tout sélectionner

--[[


name : script_time_poubelles.lua

ce script à pour but de déterminer si nous sommes en semaine pair ou impair
et fonction de cela, le jeudi en fin d'après midi,
de nous alerter par SMS de sortir la poubelle concernée.




--]]


-- Get day of a week at year beginning 
--(tm can be any date and will be forced to 1st of january same year)
-- return 1=mon 7=sun
function getYearBeginDayOfWeek(tm)
  yearBegin = os.time{year=os.date("*t",tm).year,month=1,day=1}
  yearBeginDayOfWeek = tonumber(os.date("%w",yearBegin))
  -- sunday correct from 0 -> 7
  if(yearBeginDayOfWeek == 0) then yearBeginDayOfWeek = 7 end
  return yearBeginDayOfWeek
end

-- tm: date (as retruned from os.time)
-- returns basic correction to be add for counting number of week
--  weekNum = math.floor((dayOfYear + returnedNumber) / 7) + 1 
-- (does not consider correctin at begin and end of year) 
function getDayAdd(tm)
  yearBeginDayOfWeek = getYearBeginDayOfWeek(tm)
  if(yearBeginDayOfWeek < 5 ) then
    -- first day is week 1
    dayAdd = (yearBeginDayOfWeek - 2)
  else 
    -- first day is week 52 or 53
    dayAdd = (yearBeginDayOfWeek - 9)
  end  
  return dayAdd
end
-- tm is date as returned from os.time()
-- return week number in year based on ISO8601 
-- (week with 1st thursday since Jan 1st (including) is considered as Week 1)
-- (if Jan 1st is Fri,Sat,Sun then it is part of week number from last year -> 52 or 53)
function getWeekNumberOfYear(tm)
  dayOfYear = os.date("%j",tm)
  dayAdd = getDayAdd(tm)
  dayOfYearCorrected = dayOfYear + dayAdd
  if(dayOfYearCorrected < 0) then
    -- week of last year - decide if 52 or 53
    lastYearBegin = os.time{year=os.date("*t",tm).year-1,month=1,day=1}
    lastYearEnd = os.time{year=os.date("*t",tm).year-1,month=12,day=31}
    dayAdd = getDayAdd(lastYearBegin)
    dayOfYear = dayOfYear + os.date("%j",lastYearEnd)
    dayOfYearCorrected = dayOfYear + dayAdd
  end  
  weekNum = math.floor((dayOfYearCorrected) / 7) + 1
  if( (dayOfYearCorrected > 0) and weekNum == 53) then
    -- check if it is not considered as part of week 1 of next year
    nextYearBegin = os.time{year=os.date("*t",tm).year+1,month=1,day=1}
    yearBeginDayOfWeek = getYearBeginDayOfWeek(nextYearBegin)
    if(yearBeginDayOfWeek < 5 ) then
      weekNum = 1
    end  
  end  
  return weekNum
end  

function url_encode(str)
  if (str) then
    str = string.gsub (str, "\n", "\r\n")
    str = string.gsub (str, "([^%w %-%_%.%~])",
        function (c) return string.format ("%%%02X", string.byte(c)) end)
    str = string.gsub (str, " ", "+")
  end
  return str	
end

----------------------------------------------------------------------


commandArray = {}



local time = string.sub(os.date("%X"), 1, 5)
local day = os.date("%A")

-- le jeudi soir à 18h30 et 20h30
if ( day == "Thursday" and (time == "18:30" or time == "20:30") ) then

	-- récupérer numéro de la semaine actuelle
	useDate = os.time()	-- os.time{year=2015,month=9,day=30} -- il est possible de préciser la date
	weekNum = getWeekNumberOfYear(useDate)

	-- semaine pair ou impair
	pair = weekNum%2 == 0

	--print(os.date("%A %d/%m/%Y",useDate)..": week number:"..tostring(weekNum))


	if pair then
		-- poubelle jaune
		msg = "n\'oublie pas de sortir la poubelle jaune"
	else
		-- poubelle grise
		msg = "n\'oublie pas de sortir la poubelle grise"
	end
	-- olivier
	commandArray[1]={['OpenURL']='http://192.168.22.70:41047/send.html?smsto=+33612345678&smsbody='..url_encode(msg)..'&smstype=sms'}
	-- delphine
	commandArray[2]={['OpenURL']='http://192.168.22.70:41047/send.html?smsto=+33687654321&smsbody='..url_encode(msg)..'&smstype=sms'}
	print(msg)
end



return commandArray 
http://easydomoticz.com/une-plateforme- ... omoticz-2/
Dernière modification par vil1driver le 02 mai 2016, 20:39, modifié 2 fois.
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
jacques68
Messages : 241
Inscription : 10 mai 2015, 12:21

Re: Sortir les poubelles

Message par jacques68 »

Merci pour ce script!!! :D
Je mets en test
jacques68
Messages : 241
Inscription : 10 mai 2015, 12:21

Re: Sortir les poubelles

Message par jacques68 »

Test effectué avec succès. J'ai juste du modifie le format du numéro de tel en enlevant le 33 et remplacer par 0 et avoir le numéro commençant par 06
:lol:
rimram31
Messages : 659
Inscription : 04 oct. 2015, 11:22
Localisation : Toulouse

Re: Sortir les poubelles

Message par rimram31 »

Histoire de taquiner, os.date('%V') ça devrait marcher même sous dz non ?

Au début, j'ai pensé au date gnu mais finalement j'ai vu que '%V' était standard C. A ce propos, je n'ai appris que cette année que dans la norme, la 1ere semaine est celle ayant au moins 4 jours sur la nouvelle année, cette année c'est donc le 4 Janvier et donc 16 cette semaine.
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Sortir les poubelles

Message par vil1driver »

Idem pour l'histoire des 4 jours.. ;)

On arrête jamais d'apprendre :D

La source de mon script est la suivante et il est indiqué que le %V n'était plus fonctionnel, je n'ai pas testé du coups..

http://lua-users.org/wiki/WeekNumberInYear
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
glut
Messages : 9
Inscription : 21 mars 2015, 00:17

Re: Sortir les poubelles

Message par glut »

Bonsoir,
De mon coté, j'avais réalisé ce script

Code : Tout sélectionner

-- script_time_semaine_paire.lua

local numero_du_jour_de_la_semaine = tonumber(os.date("%w"))
local numero_de_la_semaine = tonumber(os.date("%W"))
local numero_du_mois = tonumber(os.date("%m"))

commandArray = {}

time = os.date("*t")

if (time.hour == 19 and time.min == 00) then -- Mise à jour a 19:00
    
   -- dépôt du verre mercredi soir semaines paires --
    if math.fmod(numero_de_la_semaine, 2) == 0 then
        if numero_du_jour_de_la_semaine == 3 then
            commandArray['SendNotification'] = '#Ramassage du verre'
            commandArray['SendEmail'] = '#Ramassage du verre#xxx@gmail.com'
        end
    end

    -- dépôt des encombrants jeudi soir mois impairs --
    if math.fmod(numero_du_mois, 2) ~= 0 then
        if numero_du_jour_de_la_semaine == 4 then
            commandArray['SendNotification'] = '#Ramassage des encombrants'
            commandArray['SendEmail'] = '#Ramassage des encombrants#xxx@gmail.com'
        end
    end
end

return commandArray
Raspberry PI2 + Stick Z-Wave Me + RFXCOM-RFXtrx433 USB 433.92MHz + Domoticz
1 FGWPE / 1 FGS212 / 6 FGS222 / 3 FGBS001 / 7 FGRM222
5 ZMNHSD1
1 SwiidInter / 1 Danfoss Living Connect Z / 1 sonde Imagin Tronix IM300
;)
Grincheux

Re: Sortir les poubelles

Message par Grincheux »

Merci pour le partage, en test.
J'ai pas tout compris mais quand les années ne commenceront pas 4 jours, il faudra modifier quelque chose ?
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Sortir les poubelles

Message par vil1driver »

La semaine qui comprend le 31 décembre et le 1er janvier est soit numérotée 01 soit 53..
Tout dépend du nombre de jour qu'elle compte dans la nouvelle année, la majorité l'emporte.

Non rien à modifier dans le script.
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
Grincheux

Re: Sortir les poubelles

Message par Grincheux »

Merci Vil1driver pour l'explication et 1er mail reçu aujourd'hui, nickel tout a marché, madame apprécie pas trop mais moi j'adore ☺ Du coup c'est moi qui a sorti les poubelles :)
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Sortir les poubelles

Message par vil1driver »

;)
bobjones62 a écrit : je n'ai encore jamais réalisé de Script lua.
J'ai recopié ton script sous Bloc-Notes en modifiant l'adresse IP par l'adresse IP de mon PI et le numéro de téléphone puis enregistré en UTF-8.
Le fichier je l'ai copié avec WinSCP dans le répertoire /home/pi/domoticz/scripts/lua

Maintenant je ne sais que faire pour l'utiliser
ahh ba c'est déjà pas mal :)

préfère notepad++ au simple bloc note.. tu verras c'est nettement plus puissant
tu peux même configurer winscp pour qu'un double clic sur un fichier te l'ouvre direct dans notepad++
à coups de ctrl+s pour valider chaque modif, les essais sont simplifiés

une fois les scripts dans le dossier lua, domoticz se charge de les lancer..

donc de ce côté là tu n'as rien à faire.

cependant, ce script utilise un système de notification spécifique que (je suppose) tu ne possèdes pas.
l'ip des 2 URL n'est pas celle de domoticz mais d'un serveur de SMS (lien de l'article en parlant en fin de tuto)

donc soit tu tentes d'installer SMS gateway,
soit tu vas donc devoir le modifier un petit peut en remplaçant ces URL pas la commande de notification classique (email)

Code : Tout sélectionner

commandArray['SendNotification']='Poubelles#'..url_encode(msg)..'#0'
ou

Code : Tout sélectionner

commandArray['SendEmail']='Poubelles#'..url_encode(msg)..'#your@email.com'
bien sure tu peux également adapter le jour et l'heure dans le code
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
Répondre