Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/JohnNuwan/EVA_CORE --skill ignition-scada명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? 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 | ignition-scada |
| description | Programmer en Jython et configurer Ignition SCADA. |
| version | 1.1.0 |
| author | EVA |
| license | Privée EVA St-Étienne |
| platforms | ["linux","macos","windows"] |
| metadata | {"EVA":{"tags":["ignition","scada","jython","python-27","perspective","industrial-automation","tags-generation"],"related_skills":["simplify-code","plan","plc-connectivity"]}} |
La plateforme industrielle Ignition par Inductive Automation repose sur un moteur de script utilisant Jython (Python s'exécutant sur la JVM Java). La syntaxe supportée par défaut est celle de Python 2.7.
Cette compétence fournit à l'agent EVA les directives, conventions d'écriture et recettes de code indispensables pour :
À utiliser lorsque l'utilisateur demande de :
system.tag.readBlocking or system.tag.writeBlocking.system.db.runNamedQuery ou requêtes préparées.Ignition exécutant Jython 2.7, l'agent doit proscrire les syntaxes exclusives à Python 3 :
"Valeur : %s" % val ou "Valeur : {}".format(val).numpy ou pandas standards) ne fonctionneront pas sous Jython. Privilégier les classes Java de la JVM importées directement :
from java.util import ArrayList
list_java = ArrayList()
list_java.add("EVA")
Lors de l'écriture sur des tags de commande de type impulsion (ex: boutons Start, Stop, Reset d'un moteur), il convient de set le tag à True puis à False de façon asynchrone pour ne jamais bloquer le thread de rendu de l'interface client (IHM).
import time
startPath = "%s/Commands/Start" % devicePath
system.tag.writeBlocking([startPath], [True])
def release_pulse():
time.sleep(0.5) # Temporisation physique de l'impulsion (500 ms)
system.tag.writeBlocking([startPath], [False])
system.util.invokeAsynchronous(release_pulse)
Les anciennes fonctions system.tag.read et system.tag.write sont obsolètes. Depuis Ignition 8, il est obligatoire d'utiliser les fonctions bloquantes ou asynchrones prenant des listes pour des raisons de performance.
Règle de performance absolue : Ne jamais appeler readBlocking ou writeBlocking à l'intérieur d'une boucle for ou while. Toujours regrouper les chemins dans une liste unique et appeler la fonction une seule fois.
Lecture groupée optimisée :
# Regroupement des chemins dans une liste unique
paths = ["[default]AS660/EPH/660C1_EPH_AgitCtrl/Status", "[default]AS664/EM/664C6_E_B_INLET/Command"]
results = system.tag.readBlocking(paths)
# Lecture des valeurs avec vérification de qualité
if results[0].quality.isGood():
status_val = results[0].value
else:
status_val = None
Écriture groupée optimisée :
paths = ["[default]AS660/EPH/660C1_EPH_AgitCtrl/Status", "[default]AS664/EM/664C6_E_B_INLET/Command"]
values = [2, 1]
# Renvoie une liste de statuts de qualité d'écriture
write_status = system.tag.writeBlocking(paths, values)
for idx, stat in enumerate(write_status):
if not stat.isGood():
system.util.getLogger("EVA_Ignition").warn("Erreur d'écriture sur le tag : " + paths[idx])
Ne jamais concaténer de chaînes pour composer des requêtes SQL. Toujours configurer et appeler des Named Queries précompilées et paramétrées sur la Gateway.
# Appel d'une requête nommée paramétrée
params = {"motorId": 12, "activeStatus": True}
dataset = system.db.runNamedQuery("MonProjetEVA", "Moteurs/GetActiveLogs", params)
# Parcours propre du dataset Ignition
for row in range(dataset.getRowCount()):
msg = dataset.getValueAt(row, "message")
t_stamp = dataset.getValueAt(row, "t_stamp")
Pour éviter de figer l'interface utilisateur lors de tâches lentes (requête SQL complexe, requête HTTP externe), utiliser system.util.invokeAsynchronous pour déléguer le travail à un thread d'arrière-plan, puis mettre à jour l'IHM de manière sécurisée via system.util.invokeLater :
def task_heavy():
# Opération lente d'arrière-plan
import time
time.sleep(2)
res = "Succès"
# Fonction de retour vers le thread graphique principal (IHM)
def update_gui():
# Mise à jour sécurisée du composant
event.source.parent.getComponent('LabelResult').text = res
system.util.invokeLater(update_gui)
# Lancer la tâche asynchrone sans figer l'IHM
system.util.invokeAsynchronous(task_heavy)
Cette compétence intègre un script Python generate_ignition_config.py pour convertir directement le rapport consolidé de l'audit technique d'automatisme en :
tags.json) définissant l'arborescence des dossiers par Station d'Automatisme (AS), divisée en sous-dossiers EPH (Phases) et EM (Équipements) contenant des instances de UDTs standardisés.ignition_sync.py) appliquant les lectures et écritures groupées pour lier les phases aux équipements.Pour appeler le générateur de configuration, exécutez le script d'assistance via l'outil d'exécution de code (execute_code) avec le snippet suivant :
import subprocess
import os
# Définition des chemins
audit_report = "output/audit/2026-06-18_15/audit_report.md" # Remplacer par le chemin réel du rapport généré
out_tags = "output/audit/2026-06-18_15/ignition_tags.json"
out_script = "output/audit/2026-06-18_15/ignition_sync.py"
cmd = [
".venv/Scripts/python.exe",
"skills/industrial/automation/ignition-scada/scripts/generate_ignition_config.py",
"--audit-report", audit_report,
"--out-tags", out_tags,
"--out-script", out_script
]
print("Génération de la configuration Ignition en cours...")
result = subprocess.run(cmd, capture_output=True, text=True)
print(result.stdout)
if result.stderr:
print("Erreurs :", result.stderr)
readBlocking/writeBlocking)._types_/EPH_Template et _types_/EM_Template).