script Jour férié

Vous avez crée 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.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
fredclo
Messages : 81
Enregistré le : 28 févr. 2015, 16:57

script Jour férié

Message par fredclo » 11 oct. 2015, 18:34

Bonjour,

pour ceux qui n'auraient pas vu mon post sur le forum officiel de domoticz, je le poste ici aussi.

Le but est d'obtenir une variable dans domoticz qui prend la valeur true si jour férié et false si jour normal. C'est plus que pratique pour mes programmes (un bouton virtuel est week-end-jourférié ON ou OFF selon le jour et ainsi tout est facilement automatisable comme les volets le matin dans la chambre, la radio le matin...). Car les volets qui s'ouvrent le matin à 7h00 avec la radio qui hurle quand on est un jour férié c'est pas WAF du tout !!
Le plus dur est de trouver les jours de pâques.
Le mérite revient entièrement à audibert qui met son script jour pâque sur site :
http://gurau-audibert.hd.free.fr/josdbl ... rs-feries/

Dans une console, avec nano créer dans /scripts/lua : script_time_jf.lua

Listing--------------------------------------------------------------------------------------

Code : Tout sélectionner

commandArray = {}
-- Retourne le jour de Pâques au format epoch
-- annee : année (Integer) dont on désire connaître le jour de Pâques (ex : 2014)
-- La fonction n'effectue le calcul que si l'année a changée depuis son dernier appel
GetJourPaquesAnnee=0      -- Variable globale (année du dernier calcul) pour ne pas recalculer le jour de Pâques à chaque appel
GetJourPaquesEpochPaque=0 -- Variable globale (jour de Pâques au format epoch) pour ne pas recalculer le jour de Pâques à chaque appel
time = os.date("*t")
if((time.min == 5) and (time.hour == 0)) then
function GetJourPaques(annee)
  if(GetJourPaquesAnnee~=annee or GetJourPaquesEpochPaque==0) then
    local a=math.floor(annee/100)   -- donne 20 pour 2015
    local b=math.fmod(annee,100)    -- donne 15 pour 2015
    local c=math.floor((3*(a+25))/4)  -- donne 33 pour 20
    local d=math.fmod((3*(a+25)),4)   -- donne 3 pour 20
    local e=math.floor((8*(a+11))/25)
    local f=math.fmod((5*a+b),19)
    local g=math.fmod((19*f+c-e),30)
    local h=math.floor((f+11*g)/319)
    local j=math.floor((60*(5-d)+b)/4)
    local k=math.fmod((60*(5-d)+b),4)
    local m=math.fmod((2*j-k-g+h),7)
    local n=math.floor((g-h+m+114)/31)
    local p=math.fmod((g-h+m+114),31)
    local jour=p+1
    local mois=n
    GetJourPaquesAnnee=annee
    GetJourPaquesEpochPaque=os.time{year=annee,month=mois,day=jour,hour=12,min=0}
  end
  return GetJourPaquesEpochPaque
end

-- Retourne true si le jour courant est un jour férié
-- Le calcul des jours férié n'est fait qu'un fois par an (ou si la Vera reboot)
JourFerieAnnee=0  -- Variable globale (année du dernier calcul) pour ne pas recalculer le tableau à chaque appel
JourFerieTab = {} -- Variable globale (tableau des jours fériés) pour ne pas recalculer le tableau à chaque appel
function JourFerie()
  local today=os.date("%m-%d")
  local annee=tonumber(os.date("%Y"))
  if(annee~=JourFerieAnnee) then
    JourFerieAnnee=annee
    -- Dates fixes
    JourFerieTab["01-01"] = true -- 1er janvier
    JourFerieTab["05-01"] = true -- Fête du travail
    JourFerieTab["05-08"] = true -- Victoire des alliés
    JourFerieTab["07-14"] = true -- Fête nationale
    JourFerieTab["08-15"] = true -- Assomption
    JourFerieTab["11-01"] = true -- Toussaint
    JourFerieTab["11-11"] = true -- Armistice
    JourFerieTab["12-25"] = true -- Noël
    -- Dates variables
    local epochPaques=GetJourPaques(annee)
    JourFerieTab[os.date("%m-%d",epochPaques)] = true             -- Pâques
    JourFerieTab[os.date("%m-%d",epochPaques+24*60*60)] = true    -- Lundi de Pâques = Pâques + 1 jour
    JourFerieTab[os.date("%m-%d",epochPaques+24*60*60*39)] = true -- Ascension = Pâques + 39 jours
    JourFerieTab[os.date("%m-%d",epochPaques+24*60*60*49)] = true -- Pentecôte = Ascension + 49 jours
  end
  return JourFerieTab[today] -- (nldr : Both nil and false make a condition false)
end

-- print(JourFerie())
-- jf=(JourFerie())
-- print (jf)

if JourFerie() == true
then
commandArray['Variable:jf'] = 'true'
else
commandArray['Variable:jf'] = 'false'
end
end
return commandArray
end listing----------------------------------------------------------------------

Ajouter dans domoticz la variable jf as string, et vous aurez la variable jf true ou false selon qu'à 00h05 c'est un jour férié ou pas (exécution qu'une fois par jour à 00h05)

fredclo
RPi sur powerbank, bouton off/reset, domoticz (début avec Fhem sur dockstar), 4 sondes 1wire via rj45, ctrl des volets, tv/fbx, lumière, détecteurs d'ouverture, karotz, multiroom via pifm, ecodevice, ATI RF, et prg du mode arrêt des radiateurs via FP

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.


patrice
Messages : 1601
Enregistré le : 22 sept. 2014, 21:51

Re: script Jour férié

Message par patrice » 11 oct. 2015, 20:58

Bonsoir
sinon dans le style il y ahttp://domogeek.entropialux.com/static/doc/index.html qui rend énormement de services et qui est une tres belle API facilement interrogeable.

Mais il n'a pas le calcul de Paques, juste si c'est vacances scolaires ou pas mais aussi plein d'autres trucs
A voir donc,
Raspberry Pi model B+, RFXComm,8 interrupteurs Chacon, 5 ds180b 1-Wire, 3 douilles Chacon, 1 contact de porte Chacon, 1 module variateur,module emetteur 54700, Aeon Stick Z-wave, 1 MultiSensor Aeon, accés à distance.
aka thegritche@domoticz forum

fredclo
Messages : 81
Enregistré le : 28 févr. 2015, 16:57

Re: script Jour férié

Message par fredclo » 11 oct. 2015, 23:05

domogeek est arrêté faute de financement, je crois.

Par contre, pour être complet, le source est téléchargeable pour l'héberger chez soi. Je n'ai pas réussi l'install sur mon RPi, la faute à Python que je ne sais pas installer complètement (pb de sécurité ssl...).
Je n'ai pas insisté puisque mon prg me suffit. Mais en regardant le source rapidement, j'ai cru voir qqchose qui ressemblait au calcul des jours de pâques...
RPi sur powerbank, bouton off/reset, domoticz (début avec Fhem sur dockstar), 4 sondes 1wire via rj45, ctrl des volets, tv/fbx, lumière, détecteurs d'ouverture, karotz, multiroom via pifm, ecodevice, ATI RF, et prg du mode arrêt des radiateurs via FP

jule1986
Messages : 68
Enregistré le : 02 nov. 2015, 18:30
Localisation : Loiret (45)

Re: script Jour férié

Message par jule1986 » 13 nov. 2015, 20:02

Bonjour,
Merci beaucoup pour ce script, pensez vous qu'il est possible de rajouter les vacances scolaire comme l'auteur original en parle sur son site ?
Si oui comment adapter son script pour qu'il soit compatible avec domoticz ? il faut insérer le code dans le même script ou en faire un autre ?

Merci d'avance pour vos réponse.

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.


fredclo
Messages : 81
Enregistré le : 28 févr. 2015, 16:57

Re: script Jour férié

Message par fredclo » 13 nov. 2015, 20:17

bonsoir
je n'ai pas regardé le source de domogeek (l'auteur original dont vous parlez ? si oui, ce n'est pas lui sur ce script), mais je suppose que c'est saisi à la main.

donc il suffit de saisir dans le script les dates voulues (en bas là où il y a les dates)
fred
RPi sur powerbank, bouton off/reset, domoticz (début avec Fhem sur dockstar), 4 sondes 1wire via rj45, ctrl des volets, tv/fbx, lumière, détecteurs d'ouverture, karotz, multiroom via pifm, ecodevice, ATI RF, et prg du mode arrêt des radiateurs via FP

jule1986
Messages : 68
Enregistré le : 02 nov. 2015, 18:30
Localisation : Loiret (45)

Re: script Jour férié

Message par jule1986 » 14 nov. 2015, 08:57

Non je parle de l'auteur original de ce script : http://gurau-audibert.hd.free.fr/josdbl ... rs-feries/

Mais son script n'est pas pour domoticz a la base... (Merci pour la retranscription :D )

fredclo
Messages : 81
Enregistré le : 28 févr. 2015, 16:57

Re: script Jour férié

Message par fredclo » 14 nov. 2015, 09:52

ah ok ! j'avais pas vu comme j'ai pas d'enfant et suis pas fonctionnaire, les vacances scolaires je connais pas.
mais la réponse reste la meme comme vous voyez dans le script d'origine : saisir les dates dans la 2 eme partie du script

fred
RPi sur powerbank, bouton off/reset, domoticz (début avec Fhem sur dockstar), 4 sondes 1wire via rj45, ctrl des volets, tv/fbx, lumière, détecteurs d'ouverture, karotz, multiroom via pifm, ecodevice, ATI RF, et prg du mode arrêt des radiateurs via FP

fratton
Messages : 131
Enregistré le : 19 août 2015, 16:38

Re: script Jour férié

Message par fratton » 02 déc. 2015, 17:16

Bonne idée de script, ce qui me gène, c'est d'utiliser un script_time, donc exécuter toute les minutes, pour quelques chose que l'on a besoin de faire qu'une fois par jour, même si la mise à jour n'a lieu qu'une fois à 0h05.
Pour éviter cela, on peut faire un interrupteur virtuel avec une planification à "On" à 0h05 et Off à 0h06 et appeler le script lua dans la config de l'interrupteur. Mais cela ajoute encore des chose à domoticz, qui sur un Raspberry Pi n'est pas très économique en terme de de ressource.

J'ai donc recréer le script en PHP, qui à l'avantage de disposer d'une fonction easter_date() qui donne le jour de Pâques.

Code : Tout sélectionner

<?php
date_default_timezone_set('Europe/Paris');

// Domoticz IP:PORT
$IPPORT="192.168.1.100:8080";
// Variable utilisateur Domoticz à mettre à jour
$VARIABLE="JOUR_FERIE";


$ferie="NON";

$aujourdhui=date("d/m/Y");
$paques  = easter_date(date("Y"));
$pD  = date("j", $paques);
$pM = date("n", $paques);
$pY = date("Y", $paques);

$lundi_de_paques=date("d/m/Y",mktime(0, 0, 0, $pM, $pD + 1,  $pY));
$ascension=date("d/m/Y",mktime(0, 0, 0, $pM, $pD + 39, $pY));
$pentecote=date("d/m/Y", mktime(0, 0, 0, $pM, $pD + 49, $pY));
$lundi_de_pencote=date("d/m/Y", mktime(0, 0, 0, $pM, $pD + 50, $pY));

if (
        $aujourdhui=="01/01/".date("Y")         // Jour de l'an : 1er janvier
        or $aujourdhui=="01/05/".date("Y")      // Fête du travail : 1er mai
        or $aujourdhui=="08/05/".date("Y")      // Victoire des alliés 1945 : 8 mai
        or $aujourdhui=="14/07/".date("Y")      // Fête nationale : 14 juillet
        or $aujourdhui=="15/08/".date("Y")      // Assomption : 15 août
        or $aujourdhui=="01/11/".date("Y")      // Toussaint : 1er novembre
        or $aujourdhui=="08/11/".date("Y")      // Armistice de 1918 : 11 novembre
        or $aujourdhui=="25/12/".date("Y")      // Noël : 25 décembre
        or $aujourdhui==$paques                 // Pâques
        or $aujourdhui==$lundi_de_paques        // Lundi de pâques : pâques + 1 jour
        or $aujourdhui==$ascension              // L'Ascension  : pâques + 39 jours
        or $aujourdhui==$pentecote              // La pentecôte : pâques + 49 jours
        or $aujourdhui==$lundi_de_pencote       // Lundi de pentecôte : pâques + 50 jours
        ) {

        $ferie="OUI";
} else {
        $ferie="NON";
};

$majdomoticz="http://".$IPPORT."/json.htm?type=command&param=updateuservariable&vname=".$VARIABLE."&vtype=2&vvalue=".$ferie;

echo file_get_contents($majdomoticz);

?>
Ensuite l'appel par un cron à 0h01 :

Code : Tout sélectionner

1 0 * * * php5 -n /home/pi/domoticz/scripts/php/jours_feries.php > /tmp/jours_feries.log 2>&1
Raspberry Pi B+ / RF-Link 433MHz / divers device maison 433MHz et Wifi

vil1driver
Messages : 4615
Enregistré le : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: script Jour férié

Message par vil1driver » 02 déc. 2015, 17:31

tu sais que dans un script_time tu peux définir une heure de lancement ?

Code : Tout sélectionner

time = os.date("*t")

-- Trigger at 00:10 
if (time.hour == 0 and time.min == 10) then

Domoticz v4.10078 (ubuntu server) OpenZwave v1.4-3000 (zwave+ sigma designs) rfxtrx433 fw1015T1

433mhz : thgn800, ms13e2, phenix, Di.O, zk1pa, creasol sender
868mhz : fgms-001, fgfs-101, dsd37-zweu, ZW098


modules.lua

fratton
Messages : 131
Enregistré le : 19 août 2015, 16:38

Re: script Jour férié

Message par fratton » 02 déc. 2015, 17:35

Attention, en réalité, tu ne définis pas l'heure de lancement, tu lance le script lua toutes les minutes et dans ce script tu test l'heure, ce n'est pas la même chose.
Raspberry Pi B+ / RF-Link 433MHz / divers device maison 433MHz et Wifi

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