소스 정보
- 저장소
- JohnNuwan/EVA_CORE
- 최근 소스 활동
- 2026년 7월 18일 08:30
- 감지된 SKILL.md 언어
- 프랑스어
- 스타
- 0
- 포크
- 0
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/JohnNuwan/EVA_CORE --skill alarm-rationalization명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
Concevoir et maintenir un watchdog auto-correcteur pour services HTTP — checks de santé, auto-restart, état persistant, rapports et pièges bash.
Serveur de messagerie sécurisé auto-hébergé (Signal-like) avec Flask + WebSocket + AES-256-GCM + pont EVA
ADAM-SENTINEL — Veilleur technologique 24h/24h. Scanne 10 domaines, cree des rapports, met a jour les skills, alerte sur les CVE et breaking changes.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | alarm-rationalization |
| description | Analyser et rationaliser les alarmes selon ISA-18.2. |
| version | 1.0.0 |
| author | EVA |
| license | Privée EVA St-Étienne |
| platforms | ["linux","macos","windows"] |
| metadata | {"EVA":{"tags":["alarm-management","isa-18-2","iec-62682","rationalization","scada","hmi","industrial-automation"],"related_skills":["ignition-scada","siemens-audit","industrial-diagnostic","oee-performance"]}} |
La gestion des alarmes est un enjeu critique dans les usines modernes. Un opérateur confronté à plus de 10 alarmes par heure (seuil ISA-18.2) ne peut plus réagir efficacement, ce qui entraîne des accidents, des arrêts non planifiés et des pertes de production. Le phénomène de nuisance alarms (alarmes inutiles) et d'alarm flooding (avalanche d'alarmes) est la première cause d'incidents opérationnels en industrie.
La norme ISA-18.2 / IEC 62682 définit le cycle de vie complet de la gestion des alarmes : identification, rationalisation, conception, implémentation, exploitation, surveillance et audit.
Cette compétence guide l'agent EVA pour :
À utiliser lorsque l'utilisateur demande :
Ne pas utiliser pour :
siemens-scl).industrial-diagnostic).La norme définit des seuils de performance clairs pour un système d'alarmes bien géré :
| KPI | Cible ISA-18.2 | Seuil d'Alerte | Description |
|---|---|---|---|
| Alarmes par heure par opérateur | ≤ 6 | > 10 | Charge moyenne d'alarmes que l'opérateur doit traiter |
| Taux de standing alarms | < 5% | > 10% | Alarmes actives en permanence (non résolues) |
| Taux de chattering alarms | < 1% | > 5% | Alarmes oscillant rapidement ON/OFF (> 3 transitions/min) |
| Taux de stale alarms | < 2% | > 5% | Alarmes activées depuis plus de 24h sans action |
| Ratio alarmes priorité 1 (Urgentes) | < 5% | > 10% | Part des alarmes de criticité maximale |
| Flood rate | < 10 alarmes/10min | > 30/10min | Débit d'alarmes lors d'un événement déclencheur |
Ce script Python analyse un fichier CSV d'export d'alarmes et calcule les KPIs ISA-18.2 :
import pandas as pd
from datetime import timedelta
from collections import Counter
def analyze_alarm_history(csv_path: str, timestamp_col: str = "Timestamp",
tag_col: str = "TagName", state_col: str = "State",
priority_col: str = "Priority") -> dict:
"""Analyse un export CSV d'historique d'alarmes et calcule les KPIs ISA-18.2.
Args:
csv_path: Chemin vers le fichier CSV d'alarmes.
timestamp_col: Nom de la colonne d'horodatage.
tag_col: Nom de la colonne du tag / mnémonique de l'alarme.
state_col: Nom de la colonne d'état (Active, Cleared, Acknowledged).
priority_col: Nom de la colonne de priorité (1=Urgente, 4=Faible).
Returns:
dict: Rapport complet contenant les KPIs et les top offenders.
"""
df = pd.read_csv(csv_path, parse_dates=[timestamp_col])
df = df.sort_values(timestamp_col)
total_alarms = len(df)
if total_alarms == 0:
return {"error": "Aucune alarme trouvée dans le fichier."}
# Période d'analyse
time_range = df[timestamp_col].max() - df[timestamp_col].min()
total_hours = max(time_range.total_seconds() / 3600, 1)
# KPI 1 : Alarmes par heure
alarms_per_hour = total_alarms / total_hours
# KPI 2 : Top 10 offenders (alarmes les plus fréquentes)
tag_counts = Counter(df[tag_col])
top_offenders = tag_counts.most_common(10)
# KPI 3 : Répartition par priorité
priority_dist = df[priority_col].value_counts().to_dict()
chattering = []
tag, group df.groupby(tag_col):
transitions = (group)
tag_duration_min = (
(group[timestamp_col].() - group[timestamp_col].()).total_seconds() / ,
)
rate = transitions / tag_duration_min
rate > :
chattering.append({: tag, : (rate, )})
last_hour = df[timestamp_col].() - timedelta(hours=)
recent = df[df[timestamp_col] >= last_hour]
active_tags = (recent[recent[state_col]..contains(, =, na=)][tag_col])
cleared_tags = (recent[recent[state_col]..contains(, =, na=)][tag_col])
standing = active_tags - cleared_tags
{
: (total_hours, ),
: total_alarms,
: (alarms_per_hour, ),
: alarms_per_hour <= ,
: [{: t, : c} t, c top_offenders],
: priority_dist,
: chattering,
: (standing),
: (standing),
}
__name__ == :
json
sys
path = sys.argv[] (sys.argv) >
report = analyze_alarm_history(path)
(json.dumps(report, indent=, ensure_ascii=, default=))
Chaque alarme doit être évaluée selon la grille suivante pour déterminer sa priorité réelle :
| Priorité | Conséquence si non traitée | Délai de réponse | Action requise de l'opérateur |
|---|---|---|---|
| 1 — Urgente | Danger immédiat pour la sécurité des personnes ou dommage irréversible à l'équipement | < 5 min | Action immédiate obligatoire |
| 2 — Haute | Perte de production majeure ou dépassement de limites réglementaires | < 15 min | Action rapide requise |
| 3 — Moyenne | Dégradation de qualité ou baisse de rendement significative | < 60 min | Action planifiable dans l'heure |
| 4 — Basse | Information de maintenance ou écart mineur sans impact immédiat | < 8h | Prise en compte lors de la prochaine ronde |
Le Projet Automate EVA génère un fichier DBLoad.csv contenant la liste de tous les défauts par catégorie d'organe. Ce fichier peut être utilisé comme base de rationalisation :
import csv
def extract_alarms_from_dbload(dbload_path: str) -> list:
"""Extrait la liste des alarmes depuis le fichier DBLoad.csv du Projet Automate.
Args:
dbload_path: Chemin vers le fichier DBLoad.csv généré par le Projet Automate.
Returns:
list: Liste des dictionnaires d'alarmes à rationaliser.
"""
alarms = []
with open(dbload_path, "r", encoding="utf-8-sig") as f:
reader = csv.DictReader(f, delimiter=";")
for row in reader:
alarms.append({
"category": row.get("Category", ""),
"tag": row.get("Tagname", ""),
"description": row.get("Description", ""),
"acquit_def": row.get("AcquitDef", ""),
"priority": "3", # Priorité par défaut à rationaliser
"action_required": "À définir",
"response_time": "< 60 min",
})
return alarms
Classer toutes les alarmes en priorité haute par excès de prudence :
Ignorer les alarmes de type "chattering" :
Ne pas impliquer les opérateurs dans la rationalisation :