ソース情報
- リポジトリ
- JohnNuwan/EVA_CORE
- ソースの最終更新活動
- 2026年7月18日 08:30
- 検出された SKILL.md の言語
- フランス語
- スター
- 0
- フォーク
- 0
インストール方法
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
ソースファイルを確認
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
メニュー
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
SOC 職業分類に基づく
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
直接コマンドでは確認用 Prompt が省略されます。実行前にソースを確認してください。
npx skills add https://github.com/JohnNuwan/EVA_CORE --skill io-list-ingestionコマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?SkillsMP が現在取得できるファイルをダウンロードできます。
SKILL.md を表示中
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.
| name | io-list-ingestion |
| description | Parser et ingérer des listes d'E/S de CAO électrique. |
| version | 1.2.0 |
| author | EVA |
| license | Privée EVA St-Étienne |
| platforms | ["linux","macos","windows"] |
| metadata | {"tags":["eplan","cad","io-list","csv","excel","parsing","automation-engineering"],"related_skills":["siemens-scl-generation","rockwell-l5x-generation"]} |
Cette compétence régit l'ingestion industrielle de listes d'entrées/sorties (I/O) exportées à partir de schémas électriques (EPLAN, AutoCAD Electrical). Elle détaille l'utilisation de scripts d'ingestion automatisés pour normaliser les adresses physiques, valider la cohérence des signaux et générer les formats d'imports natifs pour TIA Portal et Studio 5000.
Les scripts de conversion peuvent être exécutés par l'agent à l'aide de l'outil suivant :
`execute_code` : Exécuter le script Python de conversion locale.Pour s'adapter aux différents formats d'exports de CAO, le script Python s'appuie sur un fichier de configuration décrivant la structure des colonnes :
{
"csv_delimiter": ";",
"columns": {
"symbol": "Designation_Materiel",
"address": "Adresse_Physique",
"signal_type": "Nature_Signal",
"description": "Texte_Fonctionnel",
"voltage_range": "Plage_Tension_Courant"
},
"signal_mapping": {
"DI": "BOOL",
"DO": "BOOL",
"AI": "INT",
"AO": "INT"
}
}
Ce script réalise le parsing, nettoie les symboles, attribue les types PLC corrects selon les plages physiques (ex: 4-20mA -> analogique INT brute ou REAL), résout les conflits et gère l'adressage multi-bus.
import csv
import json
import re
import xml.etree.ElementTree as ET
def clean_plc_symbol(symbol: str) -> str:
"""Nettoie le symbole pour être conforme aux spécifications de variables PLC."""
s = symbol.translate(str.maketrans("àâäéèêëîïôöùûüçÀÂÄÉÈÊËÎÏÔÖÙÛÜÇ", "aaaeeeeiioouuucAAAEEEEIIOOUUUC"))
s = re.sub(r"[^a-zA-Z0-9_]", "_", s)
s = re.sub(r"__+", "_", s)
return s.strip("_")
def parse_and_convert_io_list(csv_path: str, config_path: str, xml_out_path: str, csv_out_path: str):
with open(config_path, 'r', encoding='utf-8') as cfg_f:
cfg = json.load(cfg_f)
cols = cfg['columns']
sig_map = cfg['signal_mapping']
symbols_seen = set()
addresses_seen = {}
valid_records = []
with open(csv_path, mode='r', encoding='utf-8') as f:
reader = csv.DictReader(f, delimiter=cfg['csv_delimiter'])
for line_num, row in enumerate(reader, 1):
raw_sym = row.get(cols['symbol'], ).strip()
raw_addr = row.get(cols[], ).strip()
raw_sig = row.get(cols[], ).strip().upper()
desc = row.get(cols[], ).strip()
voltage = row.get(cols[], ).strip()
raw_sym raw_addr:
sym = clean_plc_symbol(raw_sym)
voltage.upper() voltage.upper() raw_sig == :
dtype =
:
dtype = sig_map.get(raw_sig, )
sym symbols_seen:
sym =
symbols_seen.add(sym)
raw_addr addresses_seen:
()
:
addresses_seen[raw_addr] = sym
valid_records.append({
: sym,
: raw_addr,
: dtype,
: voltage desc
})
root = ET.Element()
tag_table = ET.SubElement(root, , Name=)
tags_node = ET.SubElement(tag_table, )
rec valid_records:
tag = ET.SubElement(tags_node, , Name=rec[])
ET.SubElement(tag, ).text = rec[]
addr = rec[]
addr.startswith():
addr =
ET.SubElement(tag, ).text = addr
comment = ET.SubElement(tag, )
multi_lang = ET.SubElement(comment, , Lang=)
multi_lang.text = rec[]
tree = ET.ElementTree(root)
tree.write(xml_out_path, encoding=, xml_declaration=)
(csv_out_path, mode=, encoding=, newline=) f:
writer = csv.writer(f)
writer.writerow([])
writer.writerow([, , , , , ])
rec valid_records:
desc_fmt = rec[]
writer.writerow([, , rec[], rec[], desc_fmt, rec[]])
DI (Digital Input) mais que la tension est notée 230VAC au lieu de 24VDC, l'agent doit insérer un avertissement dans le log d'importation pour inviter l'automaticien à vérifier la présence d'un relais de couplage dans le schéma.%I et %Q.ASI_1A_Bit0). Le script doit être configuré pour traduire ces formats vers des variables mémoires structurées.