用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/JohnNuwan/EVA_CORE --skill industrial-protocols命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 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 | industrial-protocols |
| description | Programmer sous protocoles OPC-UA, Modbus-TCP et MQTT. |
| version | 1.1.0 |
| author | EVA |
| license | Privée EVA St-Étienne |
| platforms | ["linux","macos","windows"] |
| metadata | {"tags":["opc-ua","modbus","mqtt","sparkplug-b","pycomm3","pymodbus","asyncua","industrial-automation"],"related_skills":["simplify-code","plan"]} |
L'informatique industrielle (OT) repose sur des protocoles de communication standardisés pour faire communiquer les automates, les capteurs, les IHM et les systèmes informatiques (SCADA, MES, Cloud).
Cette compétence guide l'agent EVA pour écrire des scripts d'intégration robustes en Python pour collecter et distribuer des données en temps réel en utilisant :
asyncua.pymodbus.paho-mqtt pour les architectures IIoT.À utiliser lorsque l'utilisateur demande :
OPC-UA est le standard moderne orienté objet. En production, les liaisons sont sécurisées par chiffrement et certificats d'authentification (PKI client/serveur).
None, Sign (signature de paquets uniquement), SignAndEncrypt (signature et chiffrement complet des données).Basic256Sha256, Aes128_Sha256_RsaOaep, Aes256_Sha256_RsaOaep).import asyncio
from asyncua import Client
from asyncua.crypto.security_policies import SecurityPolicyBasic256Sha256
async def read_secure_opc_ua():
url = "opc.tcp://192.168.1.100:4840"
client = Client(url=url)
# Configuration de la sécurité avec certificats PKI
# (Requis pour la politique SignAndEncrypt)
try:
await client.set_security(
SecurityPolicyBasic256Sha256,
certificate_path="pki/client_cert.pem",
private_key_path="pki/client_key.pem",
server_certificate_path="pki/server_cert.der"
)
async with client:
node_var = client.get_node("ns=3;s=Moteurs/Moteur1/Vitesse")
valeur = await node_var.get_value()
print("Vitesse actuelle lue de manière sécurisée : ", valeur)
except Exception as e:
print(f"Erreur de sécurité OPC UA : {e}")
if __name__ == "__main__":
asyncio.run(read_secure_opc_ua())
Modbus-TCP utilise des tables d'adresses physiques indexées (Holding Registers, Input Registers, Coils, Discrete Inputs) :
Modbus transmet les données par mots de 16 bits (Word). Les variables 32-bit (Real/Float, DInt) ou 64-bit nécessitent de fusionner plusieurs registres consécutifs et d'adapter le boutisme (Endianness).
from pymodbus.client import ModbusTcpClient
from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder
def read_modbus_float():
client = ModbusTcpClient('192.168.1.150', port=502, timeout=2.0)
client.connect()
# Lire 2 registres consécutifs (32 bits au total) à l'offset 100
result = client.read_holding_registers(address=100, count=2, slave=1)
if not result.isError():
# Décodeur de payload binaire
# Configuré pour Big Endian (mots et octets) - Standard Modicon classique
decoder = BinaryPayloadDecoder.fromRegisters(
result.registers,
byteorder=Endian.BIG,
wordorder=Endian.BIG
)
# Décoder en valeur Float 32-bit (Real)
vitesse = decoder.decode_32bit_float()
print(f"Vitesse décodée : {vitesse:.2f} Hz")
else:
print("Erreur de communication Modbus :", result)
client.close()
if __name__ == "__main__":
read_modbus_float()
Sparkplug B est une spécification IIoT définissant un format de payload binaire léger (Protobuf) pour MQTT et assurant le suivi de l'état de connexion des nœuds (NBIRTH, DBIRTH, NDATA, DDATA, NDEATH).
Chaque message contient un horodatage (timestamp), un numéro de séquence (seq) pour valider la continuité des trames, et un tableau d'éléments (metrics) contenant le type de données :
{
"timestamp": 1623956100000,
"seq": 42,
"metrics": [
{
"name": "Atelier1/Moteur1/Vitesse",
"timestamp": 1623956100000,
"type": "Float",
"value": 1450.5
},
{
"name": "Atelier1/Moteur1/Defaut",
"timestamp": 1623956100000,
"type": "Boolean",
"value": false
}
]
}
Pour publier ou souscrire à ces structures, les scripts d'acquisition utilisent des encodeurs/décodeurs Protobuf basés sur le dictionnaire de tags du site.
timeout=2.0 secondes) et encapsuler la connexion dans un bloc try/except.1.45e-38) à la place d'une valeur attendue (ex : 50.0).wordorder=Endian.LITTLE) ou des octets (byteorder=Endian.LITTLE) dans le décodeur de payload binaire.ConnectionRefusedError, exceptions pymodbus et asyncua) sont attrapées et gérées.client.close() ou utilisation de with / async with).Sign ou SignAndEncrypt.