dathosim / Pronote2Homeassistant

Tuto et bout de code pour ajouter des éléments de Pronote dans Home assistant
Apache License 2.0
40 stars 20 forks source link

Question concept: double enrégistrements #9

Closed vingerha closed 2 years ago

vingerha commented 2 years ago

Bonjour, avec ta solution et aussi la mienne, je reçoit double lignes de temps en temps. Example pour aujourd'hui: leçon annulé et re-enregistré dans un autre locale même heure... J'ai aussi vu d'autre trucs curieux dans grades/ evaluations et j'assume que pour les profs, c'est pas trops evident de gérer pronote de leur part. Question: est-ce que t'as déjà pensé d'une solution ou de l'accepter car probablement impossible de prevoir?


        {
            "id": "31A1292BDD1744",
            "date_heure": "21/03/2022, 17:00",
            "date": "21/03/2022",
            "heure": "17:00",
            "heure_fin": "18:00",
            "cours": "ENS. MORAL & CIVIQUE",
            "salle": "A102, A003 Peintres info, A003 bis Musiciens info",
            "annulation": false,
            "status": "Changement de salle",
            "background_color": "#FFFF80"
        },
        {
            "id": "31E54ED2DE1799",
            "date_heure": "21/03/2022, 17:00",
            "date": "21/03/2022",
            "heure": "17:00",
            "heure_fin": "18:00",
            "cours": "ENS. MORAL & CIVIQUE",
            "salle": "A102",
            "annulation": true,
            "status": "Cours annul\u00e9",
            "background_color": "#FFFF80"
        }
dathosim commented 2 years ago

Hello, alors ça c'est drôle ! j'ai justement travaillé la dessus hier soir ;-) Ceci est surement dû à la manière d'éditer les EdT dans Pronote - ce que fait un prof ou l'administration de l'école. Je pense (mais aucune certitude). que de temps en temps, au lieu de modifier la salle, il supprime l'heure et la recréé ! (a mon avis ce n'est pas la bonne manière mais rien pour les en empêcher) bref...

Du coup, on se retrouve de temps en temps avec des cours en double à la même heure : comme dans ton exemple. D'expérience, car j'ai pus constaté le pb depuis longtemps, on a toujours le cours remplacé en premier et le cours annulé en 2eme.

Du coup, je n'ai fait que rajouter un test dans la boucle qui construit le Json. Je check si l'heure du cours à afficher est la même que le cours précédent et que le 2eme cours qui devrait affiché est bien en statut annulé
Et ça donne

    for lesson in lessons_today:
        index=lessons_today.index(lesson)
        if not (lesson.start == lessons_today[index-1].start and lesson.canceled == True) :        
            jsondata['edt_aujourdhui'].append({
                'date_heure': lesson.start.strftime("%d/%m/%Y, %H:%M"),

à la place de :

    for lesson in lessons_today:
            jsondata['edt_aujourdhui'].append({
                'date_heure': lesson.start.strftime("%d/%m/%Y, %H:%M"),

je vais publier une nouvelle version qui intègre ça très bientôt

vingerha commented 2 years ago

J'avais la même idee mais on ne sait jamais si l'annulation arrive apres le changement de salle ou avant car aucune date de maj. Donc il faut assumer annulée est toujours avant. Chez mon fils un autre cas a rire (je ne sais pas comment les profs pensent). Ed. sport annulée avec mention 'cours maintenu' Je pense que le front-end de pronote chez les profs n'est pas evident ou....autres raison :) En plus, ma fille vient d'arriver a la maison et pour elle, la vie scolaire a dit que un des leçons était annulé et elle pourra partir...le prof a eu sa classe vide...et pronote dit aussi: changement de salle (voir si dessus).... c'est le bazar

vingerha commented 2 years ago

Avec le diner qui arrive, j'ai conclus que t'as besoin d'une autre solution que moi. Car je télécharge les Leçons jusq'a 14 jours avant, dans ma base de données, il faut que je gère les maj differament. Pour ta solution 'edt aujourd'hui' il n'y a presque pas de risque d'un maj dans la journée. Donc, de mon avis, ta solution marche 99% des cas (jamais dire 100%)

vingerha commented 2 years ago

Après plus d'analyses des données ,le résultat est pareil, Pour utiliser une logique comme si-dessus, les l=données doivent arriver trié par 'lessonStart' + 'lessonCanceled' et dans mon db ils ne sont pas toujours stocké comme ça. Heureusement ce tri est facile car 'sql' mais je ne sais pas comment pronotepy fait ces extraits ... est-ce que l'ordre est toujours non-canceled avant canceled ? Moi...je suis bien maintenant...en attendant le prochain défi :)

dathosim commented 2 years ago

dans ma solution, même quand y'a une mise à jour de la journée, elle est détectée : le fichier étant généré toutes les X minutes (réglé à 10min chez moi) - si y'a une mise à jour le sensor peut même le détecter - et on peut même envoyer une notification sur mise à jour de l'EDT par un prof en pleine journée

vingerha commented 2 years ago

donc j'au lu que pour toi l'ordre d'arrivage des lignes canceled/non-canceled n'est pas importante ...tant mieux... :)

dathosim commented 2 years ago

si si ça a une importance, mais tu ne remarqueras que je supprime que si : 1 - y'a 2 cours à la même heure 2 - Et que, le 2eme est canceled donc je ne prends pas de risque à supprimer des cours et faire en sorte que l'EDT ne soit pas le bon...

Mais en tous les cas merci de confirmer aussi que dans la majorité des cas (dans des datas), le canceled arrive en 2eme

dathosim commented 2 years ago

Bon ! J'ai eu le cas inverse 😏 Absence ou remplacement en premier et le doublon en 2eme Du coup, ils s'affichent tous les 2... Il faut renforcer le test que je fais : détecter les doublons d'horaire - checker si un des 2 est annulé et si l'autre est maintenu - et supprimer le annulé

vingerha commented 2 years ago

Ah.... je ne veux pas dire que je suis heureux mais heureusement c'est pas que mchez moi :) Dimanche dans la journée j'ai vu aussi ce cas: enrégistrement d'une changement de salle et quelques heures plus tard le prof à annulé totalement, deux lignes. Avec tous ça, je ne peux plus utiliser une base de données pour enregistrer des leçons car l'ordre / vérité n'est pas a détermner. ....et j'ai abandonné ça.

vingerha commented 2 years ago

Autre cas... ma fille a une sortie pedagogique lundi, 3 cours annulé (bien dans le json) mais pas d'enregistrement du sortie... pronote est vraiment 'intéressent' (comme l'on dit en anglais )

image

{
            "id": "31E57A1F6781E1",
            "date_heure": "04/04/2022, 13:00",
            "date": "04/04/2022",
            "heure": "13:00",
            "heure_fin": "15:00",
            "cours": "HIST-GEO ALLEMAND",
            "salle": "A012 (CDI allemand)",
            "annulation": true,
            "status": "Sortie p\u00e9dagogique",
            "background_color": "#F6F0B5"
        },
        {
            "id": "31D7761B6781CA",
            "date_heure": "04/04/2022, 15:00",
            "date": "04/04/2022",
            "heure": "15:00",
            "heure_fin": "17:00",
            "cours": "HISTOIRE & GEO SI",
            "salle": "A307",
            "annulation": true,
            "status": "Sortie p\u00e9dagogique",
            "background_color": "#B8B504"
        },
        {
            "id": "3139E7BA64811F",
            "date_heure": "04/04/2022, 17:00",
            "date": "04/04/2022",
            "heure": "17:00",
            "heure_fin": "18:00",
            "cours": "ENS. MORAL & CIVIQUE",
            "salle": "A102",
            "annulation": true,
            "status": "Sortie p\u00e9dagogique",
            "background_color": "#FFFF80"
dathosim commented 2 years ago

Ah oui ! Encore un cas à gérer ! Mais tu as vu ? La sorti est marquée dans le statut qui est normalement donne l'annulation ?!?

Du coup, on peut faire un test en front qui se base la dessus mais c bizarre... A voir

vingerha commented 2 years ago

Et... maintenant une situation a l'invese avec annulation. Cours normal > Cours modifié > Cours annulé..., les deux derniers sont présené et avec les cas si-dessus, je pense q'il n'est plus possible de savoir quel est l'état correct maintenant, je suis obligé de présenter chaque enrégistrement

vingerha commented 2 years ago

Nouveauté (c'est une boîte de surprises) ... Même avec 'lessonNum', qui presume une sorte de unicité... dommage ...... j'ai maintenant une situation avec deux lignes pour la même leçon avec même lessonNum.

vingerha commented 2 years ago

Je t'ajoute la situation d'aujourd'hui, pour trois cours ... pour rire un peu de plus Suivant les numeros, ils ont annulé puis modifié ces trois cours ... mais pour la première leçon ... c'est vraiment annulé Avec ça ... pourquoi ils choississent classe absente ou annulé ... shoot me... image

dathosim commented 2 years ago

je clos cet échange