Aller au contenu
MAM78

Vacances Scolaires De Monsieur Steven Adapté

Recommended Posts

Vacances Scolaires

 

Je partage avec vous ma première adaptation de Virtual Device (VD) qui gère les vacances scolaires selon les différentes zones en France.


Je suis parti (respect des sources) du code VD Jours Chômés de @HANSOLO et de l'initiative de @mprinfo (Vacances Scolaire De Monsieur Steven) :

Pour info, le code de Monsieur @Steven va traiter le fichier xml telecharge sur "http://telechargement.index-education.com/vacances.xml" et lit les données du fichier pour faire les calculs et afficher les 9 prochaines périodes de vacances scolaires en fonction de votre code département et sa zone scolaire.

 

J'ai adapté le code pour :

  • qu'il indique si aujourd'hui et demain sont des jours de vacances scolaires (voir variables ci-dessous)
  • qu'il précise si le jour en cours est dans une période de vacances scalaires
  • qu'il affiche la période en cours sur le module (la version de Steven n'affichait que les prochaines période)
  • actualiser le VD et les variables en utilisant la scène GEA avec la commande suivante (qui simule un clic sur le bouton <Rafraichir>)

 

5a54adfcba5f7_Sanstitre8.thumb.png.1519d9d385d70d83f1c29c6258c809c1.png

 

Voici le tutorail, il convient :

1) de créer 3 variables globales (ou laisser le VD les créer automatiquement) :

  • VacScolaire (contient le nombre de jours jusqu'au prochaines vacances scolaires)
  • VacScolaireJ (contient OUI ou NON pour indiquer si aujourd'hui est un jour de vacances scolaires)
  • VacScolaireJ1 (contient OUI ou NON pour indiquer si demain est un jour de vacances scolaires)

              

             Vous pouvez également modifier le nom de ces variables globale, notamment nécessaire si vous avez des enfants dans des zones scolaires différentes. Il convient dans ce cas de créer 2 VD avec chacun leurs variables globales.

 

2) Importer le module virtuel ci-dessous (Vacances_scolaires.vfib.json).

3) Indiquer dans le code du bouton "Rafraichir" votre code département pour déterminer automatiquement votre zone de vacances scolaire :

         departement = "78",
         varglobal = "VacScolaire",
         varglobalJ = "VacScolaireJ",
         varglobalJ1 = "VacScolaireJ",

 

  • Dans mon cas, c'est le 78 (Yvelines) situé dans la zone C.
  • Vous pouvez également modifier le nom des variables dans cette même partie de code.

 

4) Ajouter la commande ci-dessous dans les événements de votre scène GEA (sous le fonction function setEvents() et modifier l'id de votre VD.

 

GEA.add(true, 30, "", {{"VirtualDevice", 130, 1},{"Time", "00:00", "00:01"}})

 

  • La valeur 130 ci-dessus correspond à l'id de mon VD qui est disponible dans le chemin de votre explorateur, exemple : http://192.168.0.30/fibaro/fr/devices/virtual_edit.html?id=128.

 

5) Modifier éventuellement l'icône fournie ci-dessous de votre VD par celle de votre choix. Depuis le bouton <Rafraichir>.

 

Vous trouverez ci-joint le fichier module virtuel et l'icône de celui-ci.

 

Bon usage pour les intéressés et à votre dispo. dans la limite de mes compétences en LUA.

 

Merci aux sources pour ces partages.

Vacances Scolaires.png

 

Sources :

 

Change log :

  • 08/01/2017 : version V1.4 (Création automatique des variables globales + Quelques petites améliorations cosmétiques)
  • 08/01/2017 : version V1.3 (Correction de la mise à jour de la variable globale qui contient le nombre de jours jusqu'au prochaines vacances)
  • 08/01/2017 : version V1.2 (Correction et optimisation du code, suite aux problèmes rencontrés par certaines personnes sur leur iPhone)
  • 19/02/2017 : version V1.1 (Correction bug sur le calcul Jour de VacScolaireJ1 la veille du dernier jour des vacances scolaires)
  • 09/02/2017 : version V1.0 (version initiale)
Modifié par MAM78
Correction bug sur le calcul Jour de Vacances Scolaires J+1 le dernier jour des vacances
  • Like 1
  • Upvote 5

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir, 

 

@MAM78

 

Super pour ta 1ère :-), félicitations !!! 

2 infos pour ton point 5 :

  - la ligne GEA, maintenant tu peux l'écrire comme ceci : 

GEA.add(true, 30, "", {{"VirtualDevice", 130, 1},{"Time", "00:00", "00:01"}})

 

- l'adresse que tu donnes est l'URL depuis la HC2 lorsqu'on clique sur le VD, pour avoir le json du MV :

http://IPHC2/api/devices/130 dans l'exemple ;-)

 

Allez je teste ;-) 

 

Encore MERCI

Partager ce message


Lien à poster
Partager sur d’autres sites

@MAM78

 

Petite question, pourquoi tous ces labels ? je fainéantise je n'ai pas regardé le code :-)

 

OK, on oublie ma question ce sont les prochaines périodes de vacances ;-) si j'ai compris le code lol

 

Modifié par pepite

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pepite, je vais intégrer ta suggestion pour GEA.

 

Par-contre j'ai pas compris ton commentaire sur l'URL

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour l'URL : 

 - celle que tu donnes est l'URL lorsqu'on clique depuis l'interface de la HC2 sur un module virtuel pour "l'ouvrir"

 

L'URL que je donne est celle pour voir le json depuis l'API.

Teste dans un navigateur ;-) tu vas voir

 

Que fais tu avec les variables globales au fait ? tu ne mets que 0, OUI ou NON, ce que tu fais avec les labels deja. 

Je me trompe peut-être, mais je me demande si c'est nécessaire, juste une question, j'apprends le LUA alors je lis tous les codes pour ma culture..

Heuu parser c'est sur que c'est pas pour moi hihi

Partager ce message


Lien à poster
Partager sur d’autres sites

J'obtiens un truc du genre (pas trop lisible) lorsque mets dans mon navigateur (http://192.168.0.30/api/devices/130) :

{"id":130,"name":"Vacances scolaires","roomID":24,"type":"virtual_device","visible":true,"enabled":true,"properties":{"deviceIcon":1015,"ip":"","port":0,"currentIcon":"1015","log":"","logTemp":"","mainLoop":"","ui.Label0.value":"En vacances","ui.Label1.value":"04.02.2017 - 20.02.2017 | Vacances d'hiver","ui.Label10.value":"OUI","ui.Label11.value":"OUI","ui.Label2.value":"01.04.2017 - 18.04.2017 | Vacances de printemps","ui.Label3.value":"25.05.2017 - 28.05.2017 | Pont de l'Ascension","ui.Label4.value":"08.07.2017 - 04.09.2017 | Vacances d'été","ui.Label5.value":"21.10.2017 - 06.11.2017 | Vacances de la Toussaint","ui.Label6.value":"23.12.2017 - 08.01.2018 | Vacances de Noël","ui.Label7.value":"17.02.2018 - 05.03.2018 | Vacances d'hiver","ui.Label8.value":"14.04.2018 - 30.04.2018 | Vacances de printemps","ui.Label9.value":"07.07.2018 - 01.09.2018 | Vacances d'été","ui.LabelZone.value":"[C] Versailles","visible":"true","rows":[{"type":"button","elements":[{"id":1,"lua":true,"waitForResponse":false,"caption":"Rafraichir","name":"Button11","empty":false,"msg":"-- --------------------------------------------------------------------------------------------------------------\n-- Check that one and only one instance is in memory\n-- --------------------------------------------------------------------------------------------------------------\nif ((not Vacances) or (Vacances.errors >= 5)) then\n\n\tVacances = {\n\t\tdepartement = \"78\",\n\t\tvarglobal = \"VacScolaire\",\n    \tvarglobalJ = \"VacScolaireJ\",\n    \tvarglobalJ1 = \"VacScolaireJ1\",\n  \t\terrors = 0\n\t}\n\n\t-- --------------------------------------------------------------------------------------------------------------\n\t-- URL\n\t-- --------------------------------------------------------------------------------------------------------------\n  \tVacances.url = \"telechargement.index-education.com\"\n\n\t-- --------------------------------------------------------------------------------------------------------------\n\t-- Optenir le fichier XML\n\t-- --------------------------------------------------------------------------------------------------------------\n\tVacances.getXml = function()\n\t\tlocal URL = Net.FHttp(Vacances.url)\n\t\tresponse, status, errorCode = URL:GET(\"/vacances.xml\")\n\t\treturn Vacances.iif(response ~= nil, Vacances.newParser().ParseXmlText(response), \"\")\n\tend\n\n\t-- --------------------------------------------------------------------------------------------------------------\n\t-- Rerecher la zone par rapport au numéro de 

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour les variables. Elles me serviront pour faire des tests dans mes scènes ou dans du code LUA pour agir sur des actionneurs.

 

Par exemple : faire varier le niveau de chauffage des chambres des enfants en fonction des jours de vacances de ces dernier.

Modifié par MAM78

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui tu as le json de ton MV 130, rajoute dans ton navigateur un jsonviewer ;-) ca sera lisible. 

 

Dans ce cas, tu n'as pas forcement besoin de variable globale, tu peux lire la valeur d'un label, ca evite d'avoir trop de variables globales ;-)

 

avec l'id de ton VD et un label de ton VD

 

local value = fibaro:getValue(130, "ui.Label0.value")
fibaro:debug("Valeur de Label 0 : " ..value)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Personnellement je préfère les variables globale pour plusieurs raisons elles peuvent servir de déclencheur on peut avoir la date et l'heure de la dernière modifications. Les étiquettes dans les vd pour moi servent à visualiser et parfois à stocker une valeur qui sera utilisé dans le même VD

Envoyé de mon SM-G901F en utilisant Tapatalk

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Effectivement avec un plugin c'est beaucoup plus lisible. Merci pour l'info.

 

Faut-il encore connaitre le n° du VD !

Partager ce message


Lien à poster
Partager sur d’autres sites

@mprinfo

Oui pour la dernière date de modification pour les Vas, c'est clair. 

Les labels peuvent aussi servir de déclencheur, cela fonctionne ;-) 

Pour ce qui est des valeurs stockées, les etiquettes ont la même portée que les variables globales, tu peux les récupérer de n'importe quelle scene ou VD.

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui je sais mais il faut retenir l ID du VD ou est l'étiquette trop compliqué pour moi lol

Envoyé de mon SM-G901F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Depuis que j'ai installé le VD j'ai plus de push hihi

Partager ce message


Lien à poster
Partager sur d’autres sites

@pepite je ne vois pas le lien avec le VD.

 

Mais de ce que j'ai vu, ton problème est plus global ;)

Modifié par MAM78

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon, ben moi toujours pas  ;-) je ne comprends pas.
Je vais re-essayer la version d'origine pour tester si je recois les pushs. Si oui, je ferai un diff pour diagnostic ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

Chez-moi il fonctionne bien. Je pense qu'il doit s'agir d'un problème avec une combinaison avec un autre module virtuel ou une scène.

Partager ce message


Lien à poster
Partager sur d’autres sites

Vous trouverez une nouvelle version du module virtuel suite à la détection d'un bug sur le calcul de VacScolaireJ1 lorsque le jours en cours est le dernier jour des vacances scolaires en cours.

 

Voici la nouvelle version V1.1 : Vacances_scolaires.vfib-V1.1.json

Modifié par MAM78

Partager ce message


Lien à poster
Partager sur d’autres sites

tu peux poster le code, ca évite de reinclure tout le module et de rajouter une ID dans la BDD

merci

Modifié par Sakkhho
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir, 

 

Mes tests du soir, je ne comprends pas. 

 

1 - Import du VD originel de @Steven : push OK

2 - Import VD de @MAM78 (sans enlever le point 1) : push KO

3 - Copie code de MAM dans VD de Steven : push KO

4 - Suppression des VD :push OK 

 

A ne plus rien comprendre ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

Décidément ta box n'en veux pas de mon VD. Il te faut aller bruler un siège ;) ou aller voir un marabout 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

@pepite et si tu supprimes les 2 et que recrées le VD puis tu copies mon code dedans. (sans faire une importation) 

Modifié par MAM78

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut. Les enfants sont en vacances en ce moment mais la variable VacScolaireJ1 m'affiche toujours NON alors que ça devrait être OUI.

Quelqu'un d'autre rencontre ce problème.

Partager ce message


Lien à poster
Partager sur d’autres sites

aucun soucis chez moi

Envoyé de mon SM-G901F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok. Mais voici ce que j'ai dans le debug.

[DEBUG] 21:06:29: Lecture du fichier distant ...
[DEBUG] 21:06:31: Recherche de la zone pour le département : 26 ...
[DEBUG] 21:06:31: 26 ==> [A] Grenoble
[DEBUG] 21:06:31: Index1 Deb:19.10.2013 Fin:04.11.2013 Date:03.01.2018
[DEBUG] 21:06:31: Pas en vacance demain
[DEBUG] 21:06:32: Index1 Deb:21.12.2013 Fin:06.01.2014 Date:03.01.2018
[DEBUG] 21:06:32: Pas en vacance demain
[DEBUG] 21:06:32: Index1 Deb:01.03.2014 Fin:17.03.2014 Date:03.01.2018
[DEBUG] 21:06:32: Pas en vacance demain
[DEBUG] 21:06:32: Index1 Deb:26.04.2014 Fin:12.05.2014 Date:03.01.2018
[DEBUG] 21:06:32: Pas en vacance demain
[DEBUG] 21:06:32: Index1 Deb:05.07.2014 Fin:02.09.2014 Date:03.01.2018
[DEBUG] 21:06:32: Pas en vacance demain
[DEBUG] 21:06:32: Index1 Deb:18.10.2014 Fin:03.11.2014 Date:03.01.2018
[DEBUG] 21:06:32: Pas en vacance demain

C'est bien pris en compte que nous sommes sur une période de vacances mais ça affiche quand que "Pas de vacance demain".

Pourtant je n'ai rien touché.

Partager ce message


Lien à poster
Partager sur d’autres sites

×