Regarde mes posts, je suis aussi sous HA OS sur un pi4.
Je passe par une shell command
ah super j’avoue je ne suis pas passé sur les 162 posts du topic LoL
@Dathosim ça serait pas mal d’ajouter dans ton README.md, la méthode pour ceux qui sont sur HA OS.
Je vais suivre tout ton process Emy merci à toi. ça fonctionne bien, une fois le JSON récup ?
Super, génial, c’était ça, désormais, ça marche !
Du coup, j’ai bien regardé, il me manquait plein de bout de code… J’ai du me louper sur les copier/coller.
@thecrazylegs Je suis aussi sur HA OS et la méthode « shell command » marche très bien. Pense juste à ne pas sauter l’étape de copie des packages Python dans ton dossier python_scripts. (aux alentours du post #68, je crois…)
Mais donc du coup on oublie les accès PARENTS c’est bien çà j’ai tenté de mettre parent.html
#Connection à Pronote
client = pronotepy.Client('https://'+prefix_url+'.index-education.net/pronote/parent.html?login=true', username, password)
mais ça aurait été trop simple
Traceback (most recent call last):
File "/config/python_scripts/pronote.py", line 35, in <module>
lessons_today = client.lessons(date.today())
File "/usr/lib/python3.9/site-packages/pronotepy/clients.py", line 330, in lessons
l_list = response['donneesSec']['donnees']['ListeCours']
KeyError: 'ListeCours'
Mes ADOS se connectent via l’ENT77 Seine et marne et d’après le script, c’est dead, donc il faut que j’arrive à récupérer les accès élèves de PRONOTE sans passer par l’ENT.
https://github.com/bain3/pronotepy/blob/master/pronotepy/ent.py#L545
D’après le GitHub de PronotePy
Donc faut que l’on fasse un LevelUP de ton intégration ?
Bon le plus simple chopper les accès des ADOS, à chaque fois ils pensent que je vais les trackers mettre des mouchards MDR ils sont PARANO LoL
Regarde les anciens posts, tout y est expliqué.
Essaie plutôt :
`client = pronotepy.ParentClient('https://'+prefix_url+'.index-education.net/pronote/parent.html?login=true', username, password)`
Et pense à sélectionner l’enfant aussi.
if client.logged_in:
client.set_child('XXXX Xxxxx')
Bonjour,
Ceci est certainement dû au fait que l’état de ton sensor change parfois de statut durant certaines phases (redémarrage, perte de connexion, etc…)
Essaie d’ajouter des conditions à tes automations du style :
{% if states..... is defined %}
{% if states......!= 'unavailable' %}
{% if states......!='unknown'%}
{% if states........!=' '%}
« Track » le statut de ton capteur pour voir les états dans lequel il passe puis ajuste tes conditions (tu peux en mettre plusieurs à la suite.)
Avec ceci, tu ne devrais plus avoir de notifications intempestives.
Ceci vaut aussi bien pour les notes que pour tous les autres capteurs.
Le premier exemple que je t’ai donné sert à savoir si une valeur est est bien définie avant de l’afficher. Cela évite des erreurs dans HA.
Cordialement.
Premier ADO Done (via mon profile PARENT)
Mon autre ADO je crois que ce n’est que par l’ENT faut que je checke ça.
Me reste à voir les automations etc etc. MERCI pour ce gros taf sincèrement.
Merci
Yes ! Et un de plus !
Bravo et merci
Super ! ravi que ça avance.
Salut et bon dimanche à tous
A // Pronote bloque mes autres intégrations
Bon le plus gros est fait je pense mais il subsiste un soucis sur ma première intégration
Pronote remonte bien mais il y a un truc qui bloque mes autres intégrations
Quand je désactive PRONOTE aucune soucis, c’est n’est pas le script .py mais bien la déclaration des Sensor et /ou l’Intégration de l’onglet Lovelace.
Quand je reboote HA , j’ai ça :
TemplateError('UndefinedError: None has no element 2') while processing template 'Template("{{ state_attr('sensor.pronote_edt_erwann_prochain_jour', 'edt_prochainjour')[2]['annulation'] }}")' for attribute '_state' in entity 'binary_sensor.pronote_edt_erwann_prochain_jour_cours_2_annulation'
11:23:15 – (ERREUR) Template - message survenu pour la première fois à 11:23:14 et apparu 14 fois.
Error while processing template: Template("{{ state_attr('sensor.pronote_edt_erwann_prochain_jour', 'edt_prochainjour')[2]['annulation'] }}")
11:23:15 – (ERREUR) helpers/template.py - message survenu pour la première fois à 11:23:14 et apparu 14 fois.
Extrait de ma config yaml :
- platform: template
sensors:
pronote_edt_erwann_prochain_jour_cours_0_annulation:
friendly_name: "Edt erwann Prochain Jour Cours 0 annulation"
value_template: >-
{{ state_attr('sensor.pronote_edt_erwann_prochain_jour', 'edt_prochainjour')[0]['annulation'] }}
pronote_edt_erwann_prochain_jour_cours_1_annulation:
friendly_name: "Edt erwann Prochain Jour Cours 1 annulation"
value_template: >-
{{ state_attr('sensor.pronote_edt_erwann_prochain_jour', 'edt_prochainjour')[1]['annulation'] }}
pronote_edt_erwann_prochain_jour_cours_2_annulation:
friendly_name: "Edt erwann Prochain Jour Cours 2 annulation"
value_template: >-
{{ state_attr('sensor.pronote_edt_erwann_prochain_jour', 'edt_prochainjour')[2]['annulation'] }}
pronote_edt_erwann_prochain_jour_cours_3_annulation:
friendly_name: "Edt erwann Prochain Jour Cours 3 annulation"
value_template: >-
{{ state_attr('sensor.pronote_edt_erwann_prochain_jour', 'edt_prochainjour')[3]['annulation'] }}
pronote_edt_erwann_prochain_jour_cours_4_annulation:
friendly_name: "Edt erwann Prochain Jour Cours 4 annulation"
value_template: >-
{{ state_attr('sensor.pronote_edt_erwann_prochain_jour', 'edt_prochainjour')[4]['annulation'] }}
pronote_edt_erwann_prochain_jour_cours_5_annulation:
friendly_name: "Edt erwann Prochain Jour Cours 5 annulation"
value_template: >-
{{ state_attr('sensor.pronote_edt_erwann_prochain_jour', 'edt_prochainjour')[5]['annulation'] }}
pronote_edt_erwann_prochain_jour_cours_6_annulation:
friendly_name: "Edt erwann Prochain Jour Cours 6 annulation"
value_template: >-
{{ state_attr('sensor.pronote_edt_erwann_prochain_jour', 'edt_prochainjour')[6]['annulation'] }}
B // Pronote bloque mes autres intégrations
J’ai contacté @bain3 sur son dépôt Githbu de Pronotepy pour qu’il ajoute un accès ENT pour la Seine et marne, je lui ai filé les url ENT et de redirection vers Pronote
A priori, il m’a dit que c’était identique à « l’ESSONNE » et que je pouvais le faire tout seul au pire il le ferai semaine prochaine.
je suis allé dans le fichier /config/python_scripts/local-packages/ent.py
Et je dupliqué la partie def ent_essonne(username, password)
ce qui donne :
def ent_seine_et_marne(username, password):
"""
ENT Seine et Marne
Parameters
----------
username : str
username
password : str
password
Returns
-------
cookies : cookies
returns the ent session cookies
"""
# ENT / PRONOTE required URLs
ent_login = "https://ent77.seine-et-marne.fr/auth/login"
# Required Headers
headers = {
'connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:73.0) Gecko/20100101 Firefox/73.0'}
payload = {
'email': username,
'password': password,
}
# ENT Connection
session = requests.Session()
response = session.post(ent_login, headers=headers, data=payload)
return requests.utils.cookiejar_from_dict(requests.utils.dict_from_cookiejar(session.cookies))
jusque l’à rien de bien méchant LoL
dans le fichier pronote.py j’ai pris exemple sur ami @umustseeit
J’ai donc ajouté en dessous de import pronotepy
import pronotepy
from pronotepy.ent import ent_seine_et_marne
mais il n’arrive pas à charger mon bloc
Traceback (most recent call last):
File "/config/python_scripts/pronote.py", line 4, in <module>
from pronotepy.ent import ent_seine_et_marne
ImportError: cannot import name 'ent_seine_et_marne' from 'pronotepy.ent' (/usr/lib/python3.9/site-packages/pronotepy/ent.py)
J’avoue que je ne connais pas Python, je suis DEV web, backend, ops fullstack peut être, mais je n’ai jamais touché réellement au python, LoL il faut compiler ou autre pour que mes modifications soient prises en compte ? à moins que j’ai ####@@###@##@# quelque part LoL.
Si vous avez une idée
Merci pour ta réponse du coup j’ai mis ce parametrage du coup ça devrait empêcher de lancer l’automation si l’état de la note est indisponible
@umustseeit Non là, c’est quand ton capteur seras sur l’état « unavailable » qu’ il va se déclencher. c’est l’inverse qu’il te faut.
Comme déclencheur, tu mets template puis tu colles ceci:
{{ states('sensor.pronote_note_kelia') != 'unavailable' }}
Ton automation ne se déclenchera QUE si ton capteur n’est PAS sur « unavailabe ». Comme dis plus haut, tu peux en mettre plusieurs (avec des AND) à la suite.
Essai le code dans outils de dev → Modèle pour tester tes templates.
Dis le moi si tu as besoin de plus d’explications.
EDIT: J’avais pas vu le « NOT » sur ton screenshot. Je pense de ce fait que ça devrait fonctionner mais je n’utilise pas cette façon, je ne peux pas te confirmer. en tout cas l’exemple en template que je t’ai mis, lui, fonctionne parfaitement.
.
Bonjour, je pense qu’en ‹ dupliquant › le fichier ent.py, tu as oublié l’entête:
import logging
import typing
import requests
from bs4 import BeautifulSoup
log = logging.getLogger(__name__)
log.setLevel(logging.DEBUG)
Je te conseille de prendre le fichier en entier et d’y modifier la partie qui t’intéresse.
TemplateError('UndefinedError: None has no element 2') while processing template 'Template("{{ state_attr('sensor.pronote_edt_erwann_prochain_jour', 'edt_prochainjour')[2]['annulation'] }}")' for attribute '_state' in entity 'binary_sensor.pronote_edt_erwann_prochain_jour_cours_2_annulation'
11:23:15 – (ERREUR) Template - message survenu pour la première fois à 11:23:14 et apparu 14 fois.
Error while processing template: Template("{{ state_attr('sensor.pronote_edt_erwann_prochain_jour', 'edt_prochainjour')[2]['annulation'] }}")
11:23:15 – (ERREUR) helpers/template.py - message survenu pour la première fois à 11:23:14 et apparu 14 fois.
@thecrazylegs Tu pourrais nous mettre ton fichier JSON. Ton erreur est que HA ne trouve pas de valeur pour ton capteur. Ceci pourrait être normal sur les derniers capteurs s’il n’y à pas de cours l’après midi par exemple mais là sur le [2]
sans les suivants, je trouve ça bizarre.
@sosordinet merci pour tes explications finalement j’ai fait comme tu as préconisé, je verrais bien si ça fonctionne sinon je ferais comme j’avais fait la première fois.
Merci pour ta patience
Dernière question, est-ce que tu as mis en place le réveil en fonction des heures des cours ? Je suis largué …
Non, je ne pourrais pas t’aider la dessus. J’avais déjà fait mes automations avant que @Dathosim ne mette ses exemples en ligne.
Par contre si @Dathosim veut bien, j’avais fait en m’inspirant de son travail, un tableau supplémentaire avec les absences de l’onglet vie scolaire dans Pronote.
J’avais fait ça vite fait donc à finir. Les absences sont dans le désordre sur le screen car il n’y à pas encore d’absences pour ce trimestre, du coup j’ ai capter celles de l’année entière (qui est inversée) pour faire le screenshot.
Les « marks » blancs deviennent rouge si l’absences n’est pas justifiée.
Je ne sais pas comment @Dathosim régle l’heure de son réveil mais voici comment je fais pour récupérer la première heure de cours de la journée. En fait l’heure de fin de cours du loop.index-1
pour moi, m’ amène toujours à la première heure de cours de la journée. Quelle qu’elle soit.
Je vous mets mon capteur de la première heure de cours.
{% for state in('sensor.pronote_demo_edt_prochainjour', 'edt_prochainjour') -%}{%- if loop.first %}{{state_attr('sensor.pronote_demo_edt_prochainjour', 'edt_prochainjour')[loop.index-1]['heure_fin']}}{% endif -%}{%- endfor %}
Faîtes-en un sensor template et testez.
Il devient simple ensuite de régler son réveil avec.
Désolé, je viens de recevoir une notification avec une note en unavailable, tu penses que je me suis trompé quelque part ?
@sosordinet Merci pour le code je le mettais en place effectivement ça peut servir !
Oui, c’est normal. Il faut enlever le premier trigger. Là il déclenche dès qu’il change d’état.