Home Assistant Git Exporter

This commit is contained in:
root
2024-08-26 13:38:09 +02:00
parent 80fc630f5e
commit fc0376e38e
2010 changed files with 11414 additions and 16153 deletions

View File

@@ -371,26 +371,46 @@ class UsageRestrictionEntity(CoordinatorEntity, SensorEntity):
def compute_native_value(self) -> Optional[str]:
"""This method extract the most relevant restriction level to display as aggregate"""
def any_restriction_match(matcher):
r = re.compile(matcher, re.IGNORECASE)
for restriction in self._restrictions:
if r.search(restriction):
return True
return False
if len(self._restrictions) == 0:
return "Aucune restriction"
if "Interdiction sur plage horaire" in self._restrictions:
if any_restriction_match("interdiction sur plage horaire"):
return "Interdiction sur plage horaire"
if "Interdiction sauf exception" in self._restrictions:
if any_restriction_match("interdi.*sauf"):
return "Interdiction sauf exception"
if "Interdit sauf pour les usages commerciaux après accord du service de police de leau." in self._restrictions:
if any_restriction_match("à lexception"):
return "Interdiction sauf exception"
if "Interdiction" in self._restrictions:
if any_restriction_match("à lexclusion"):
return "Interdiction sauf exception"
if any_restriction_match("Interdit.*dès lors"):
return "Interdiction sauf exception"
if any_restriction_match("Interdiction"):
return "Interdiction"
if "Interdiction." in self._restrictions:
if any_restriction_match("interdit"):
return "Interdiction"
if "Réduction de prélèvement" in self._restrictions:
if any_restriction_match("interdiction"):
return "Interdiction"
if any_restriction_match("limitation au strict nécessaire"):
return "Interdiction sauf strict nécessaire"
if any_restriction_match("Réduction de prélèvement"):
return "Réduction de prélèvement"
if "Consulter larrêté" in self._restrictions:
if any_restriction_match("Consulter larrêté"):
return "Erreur: consulter l'arreté"
if "Se référer à l'arrêté de restriction en cours de validité." in self._restrictions:
if any_restriction_match("Se référer à l'arrêté de restriction en cours de validité."):
return "Erreur: consulter l'arreté"
if "Pas de restriction sauf arrêté spécifique." in self._restrictions:
if any_restriction_match("Pas de restriction sauf arrêté spécifique."):
return "Autorisé sauf exception"
if any_restriction_match("Sensibiliser"):
return "Sensibilisation"
if any_restriction_match("Sensibilisation"):
return "Sensibilisation"
if len(self._restrictions) == 1:
return self._restrictions[0]
_LOGGER.warn(f"Restrictions are hard to interpret: {self._restrictions}")

View File

@@ -52,6 +52,7 @@ SENSOR_DEFINITIONS: tuple[VigieEauSensorEntityDescription, ...] = (
"fontaines",
"jeux d'eau",
".*Alimentation de douches de plage.*",
"Remplissage citerne, reserve, cuve à eau",
],
),
VigieEauSensorEntityDescription(
@@ -63,6 +64,7 @@ SENSOR_DEFINITIONS: tuple[VigieEauSensorEntityDescription, ...] = (
"Arrosage des .*potagers",
"arrosage.+arbres.+",
"arrosage.+plant.+",
"Cultures en godets et semis.+",
],
),
VigieEauSensorEntityDescription(
@@ -74,6 +76,9 @@ SENSOR_DEFINITIONS: tuple[VigieEauSensorEntityDescription, ...] = (
"trottoirs",
"voiries|voieries",
"Arrosage de surfaces de .+ générant de la poussière",
"Nettoyage des voies publiques.+",
"Arrosage des pistes de chantier",
".*voiries.*",
],
),
VigieEauSensorEntityDescription(
@@ -82,7 +87,7 @@ SENSOR_DEFINITIONS: tuple[VigieEauSensorEntityDescription, ...] = (
category="lawn",
key="lawn",
matchers=[
"pelouses",
".*pelouses.*",
"jardins d'agrément",
"massifs fleuris",
"Arrosage des espaces verts",
@@ -95,7 +100,17 @@ SENSOR_DEFINITIONS: tuple[VigieEauSensorEntityDescription, ...] = (
"Arrosage des jardinières et suspensions",
"Arrosage des espaces arborés",
"Arrosage.+terrains de sport",
"Arrosage terrain de sport et espaces verts",
"Arrosage terrains sport.+",
"Arrosage des îlots de fraîcheur validés par ladministration",
"sols équestres et sports motorisés",
"Arrosage des pistes d'hippodromes",
"pistes de chevaux",
".*équestres.*",
".*motorisés.*",
".*motorisées.*",
".*Arrosage des jardins et parcs ouverts au public.*",
".*gazons.*",
],
),
VigieEauSensorEntityDescription(
@@ -129,6 +144,7 @@ SENSOR_DEFINITIONS: tuple[VigieEauSensorEntityDescription, ...] = (
"Lavage de véhicule disposant dun système équipé dun recyclage de leau",
"Carénage des bateaux",
"Lavage et entretien des embarcations .+ en aire de carénage.",
"lavage.*embarcation.*",
],
),
VigieEauSensorEntityDescription(
@@ -161,6 +177,10 @@ SENSOR_DEFINITIONS: tuple[VigieEauSensorEntityDescription, ...] = (
"remise à niveau des piscines",
"Remplissage de piscines.+",
"Piscines ouvertes au public.*",
"Remplissage des piscines.+publi",
"Remplissage des jacuzzis",
".*piscines.*",
".*tobbogan aquatique.*",
],
),
VigieEauSensorEntityDescription(
@@ -176,6 +196,8 @@ SENSOR_DEFINITIONS: tuple[VigieEauSensorEntityDescription, ...] = (
"alimentation.+bassin.+",
"lestage pour stabilité",
"Alimentation détangs",
"remplissage.*retenues.*",
"Alimentation des retenues collinaires",
],
),
VigieEauSensorEntityDescription(
@@ -196,6 +218,8 @@ SENSOR_DEFINITIONS: tuple[VigieEauSensorEntityDescription, ...] = (
"rejet direct deaux polluées",
"orpaillage",
"Manœuvres des vannes d.installations hydrauliques",
"Installations de production délectricité hydraulique",
"Installation de production d'électricité hydraulique et termique à flamme",
"Manœuvres douvrages hydrauliques",
"Tout usage domestique non sanitaire de leau",
"Réalisation d'un seuil provisoire",
@@ -207,8 +231,13 @@ SENSOR_DEFINITIONS: tuple[VigieEauSensorEntityDescription, ...] = (
"Travaux sur les systèmes dassainissement occasionnant des rejets",
".*installations hydrauliques.*",
".*électricité dorigine hydraulique.*",
"Installations hydroélectriques",
"production.+origine.+hydraulique.*",
".*hydroélectriques.*",
".*hydrauliques.*",
"Installations de production d'électricité d'orignie hydraulique",
"Prélèvements des centrales hydroélectriques, moulins, barrages",
"Prélèvement domestique directement dans le cours d'eau",
],
),
VigieEauSensorEntityDescription(
@@ -230,6 +259,9 @@ SENSOR_DEFINITIONS: tuple[VigieEauSensorEntityDescription, ...] = (
matchers=[
"arrosage des golfs",
"Arrosage des.+golfs",
"parcours de golf",
"greens et départs",
".*golf.*",
],
),
VigieEauSensorEntityDescription(
@@ -255,6 +287,8 @@ SENSOR_DEFINITIONS: tuple[VigieEauSensorEntityDescription, ...] = (
"Création de prélèvements",
"Prélèvement en cours deau",
"alimentation en eau potable des populations.+",
"Prélèvement dans les cours d'eau quelque soit l'usage",
".*forages.*",
],
),
VigieEauSensorEntityDescription(
@@ -262,17 +296,79 @@ SENSOR_DEFINITIONS: tuple[VigieEauSensorEntityDescription, ...] = (
category="misc",
key="misc",
matchers=[
"Gestion des systèmes d'assainissement",
"Remplissage tonne de chasse",
"Activités cynégétiques",
"Structures gonflables/tubulaires privées à usage collectif > 1m3 nécessitant 1 vidange quotidienne",
"Abreuvement et hygiène des animaux",
"Abreuvement des animaux",
"Irrigation par aspersion des cultures",
"agricole",
"Irrigation par aspersion.*",
"irrigation.*cultures.*",
"irrigation.*maraîch.*",
"Maraîchage",
"irrigation.*arbres.*",
"Irrigation par système localisé et équipé dun outil de pilotage",
"Irrigation par système d'irrigation localisée.*",
"irrigation.*horticulture.*",
"Horticulture",
"Irrigation gravitaire et aspersion",
"Irrigation par canal gravitaire",
"Irrigation en Période de Printemps",
"Irrigation en Période Estivale",
"Irrigation Période Estivale",
"Irrigation OUGC",
"CIVE",
"CIPAN*",
"Irrigation dans les unités de gestion souterraines ou les grands cours d'eau",
"Irrigation dans le cadre de la gestion collective des associations dirrigants",
"Irrigation dans le cadre de la gestion collective Vie aval pilotée par la Chambre d'agriculture",
"Cultures sensibles",
"Cultures maraîchère",
"Prélèvements pour lirrigation assimilés domestiques",
"Prélèvements hors irrigation",
"Prélèvement pour réseau d'irrigation collective",
"Irrigation dans le cadre de la gestion collective",
"Jardinerie",
"grumes",
# ICPE means "Installation classée pour la protection de l'environment"
"ICPE",
"ICPE soumises à un APC relatif à la sécheresse",
"Usages récréatifs collectifs à partir deau potable.+",
"Réalisation de seuils provisoires",
"Activités industrielles et commerciales",
"Irrigation pour jeunes arbustes et plantiers de vigne",
"Interventions sur Station d'épuration",
"station.*épuration",
"station.*traitement.*eaux.*usées",
".*industriels.*",
"remplissage.*neige.*",
"Production de neige",
"neige de culture",
"des enneigeurs",
"usage.*non directement.*process.*",
"usage.*nécessaire.*process.*",
"usages agricoles",
"Activités industrielles.*",
"Activités commerciales.*",
"Établissements ayant une faible consommation d'eau",
"Vente de plantations",
"Prélèvements deau à usage industriel.*",
"Prélèvements.*horticulture.*",
"Prélèvement dans le canal pour un usage économique",
"lavage.*réservoirs d'eau potable",
"Lavage des réservoirs",
"période d'étiage",
"Irrigation à partir de retenues deau autorisées remplies hors période détiage",
"Irrigation par des eaux brutes provenant des ressources dites « maîtrisées »",
"Industries",
"Arboriculture en technique économe",
"Uniquement en Nouvelle Aquitaine",
"Purge des réseaux",
"Installations thermiques à flamme",
"Béalières et canaux dirrigation alimentés par gravité ou par pompage",
"Autres prélèvements à usage industriel ou artisanal",
"Autre irrigation",
],
),
)

File diff suppressed because it is too large Load Diff

View File

@@ -17,29 +17,18 @@ async def main():
restriction_list = {"restrictions": []}
usages = set()
async with aiohttp.ClientSession() as session:
vigieau = VigieauApi(session)
commune_list = await InseeApi(session).get_insee_list()
for i, commune in enumerate(commune_list):
print(f"{i}/{len(commune_list)}: {commune['nom']}")
try:
restriction = await vigieau.get_data(
insee_code=commune["code"],
profil="particulier",
lat=commune["centre"]["coordinates"][1],
long=commune["centre"]["coordinates"][0],
)
except VigieauApiError as e:
print(e.text)
# FIXME: Sometimes insee is enough to call vigieau Api, sometimes not exclude the one where it's not enough , for the moment
if restriction:
for usage in restriction.get("usages", []):
usages.add(
frozendict(
{"usage": usage["nom"], "thematique": usage["thematique"]}
)
)
if i % 10 == 0:
dump_restrictions(restriction_list, usages)
resp = await session.get("https://www.data.gouv.fr/fr/datasets/r/bfba7898-aed3-40ec-aa74-abb73b92a363")
if resp.status != 200:
raise Exception(f"Unable to get dataset from vigieau: {resp.status}")
data = await resp.json(content_type="binary/octet-stream")
# jq '.features | .[].properties.restrictions' ~/Downloads/zones_arretes_en_vigueur.geojson |less
for feature in data["features"]:
for restriction in feature["properties"]["restrictions"]:
usages.add(frozendict({"usage": restriction["nom"], "thematique": restriction["thematique"]}))
print(f"Found {len(usages)} different usages")
dump_restrictions(restriction_list, usages)