ソース情報
- リポジトリ
- 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 lua-industrial-iotコマンドは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 | lua-industrial-iot |
| description | Scripter en Lua pour les passerelles IoT et Kepware. |
| version | 1.1.0 |
| author | EVA |
| license | Privée EVA St-Étienne |
| platforms | ["linux","windows"] |
| metadata | {"tags":["lua","iot","gateway","kepware","embedded","scripting","edge","network-monitoring"],"related_skills":["industrial-programming-languages","ot-it-integration-languages"]} |
Cette compétence régit le développement de scripts Lua légers et performants destinés à s'exécuter dans des environnements industriels aux ressources matérielles contraintes (passerelles IoT, routeurs, serveurs de communication Kepware).
En Lua, la table ({}) est la structure de données unique. Pour concevoir du code structuré sans gaspiller de mémoire, on utilise les métatables pour implémenter des mécanismes de classes légères.
-- Définition d'une classe de capteur
Sensor = {}
Sensor.__index = Sensor
function Sensor.new(tag, min_val, max_val)
local self = setmetatable({}, Sensor)
self.tag = tag
self.min = min_val
self.max = max_val
return self
end
function Sensor:scale_value(raw_val)
-- Conversion d'une valeur brute 0-32767 (PLC) vers la plage réelle
local scaled = self.min + (raw_val / 32767.0) * (self.max - self.min)
return scaled
end
Pour éviter la latence induite par le ramasse-miettes (Garbage Collector - GC) dans les environnements embarqués (par ex. routeurs Teltonika avec 32 Mo de RAM) :
-- Ajustement de l'agressivité du GC
collectgarbage("setpause", 100) -- Reprise immédiate du GC
collectgarbage("setstepmul", 200) -- Vitesse d'exécution double
Kepware intègre Lua pour modéliser des comportements dynamiques de variables sans connecter de véritable automate lors des phases de tests FAT.
-- Script Kepware exécuté cycliquement pour simuler la température d'un four
-- Les variables d'état persistantes doivent être déclarées au niveau global
if temp_four == nil then
temp_four = 20.0 -- Température initiale
consigne = 180.0 -- Consigne thermique
constante_temps = 0.05 -- Inertie thermique
end
-- Algorithme de transfert thermique simple (premier ordre)
local ecart = consigne - temp_four
local variation = ecart * constante_temps
-- Ajout d'une fluctuation aléatoire simulant du bruit de mesure (ex: +/- 0.5 °C)
local bruit = (math.random() - 0.5) * 1.0
temp_four = temp_four + variation + bruit
-- Assignation de la valeur simulée au Tag Kepware
-- Remarque : La fonction d'écriture dépend du runtime de Kepware (ex: WriteTag)
WriteTag("Canal_1.Equipement_1.Temperature_Four", temp_four)
Les passerelles IoT ou routeurs cellulaires d'atelier (ex: Teltonika RUT240/RUT955) s'appuient sur Lua pour interagir avec le système de configuration unifié UCI et l'API système ubus.
Ce script s'exécute en tâche périodique (cron) pour vérifier la qualité de la liaison cellulaire et publier des diagnostics.
local http = require("socket.http")
local ltn12 = require("ltn12")
-- Fonction pour lire le niveau de signal réseau via la commande CLI du modem
function get_signal_dbm()
local handle = io.popen("gsmctl -q") -- Commande spécifique Teltonika
local result = handle:read("*a")
handle:close()
local dbm = tonumber(result:match("([^%s]+)"))
return dbm or -113 -- Valeur minimale par défaut en cas d'échec
end
local signal = get_signal_dbm()
local status = "OK"
if signal < -95 then
status = "FAIBLE"
elseif signal < -110 then
status = "DECONNECTE"
end
-- Envoi d'une alerte JSON au serveur central
local payload = string.format('{"gateway_id":"RUT955_Atelier_1", "signal_dbm":%d, "wan_status":"%s"}', signal, status)
local response = {}
_, code = http.request{
url = ,
method = ,
headers = {
[] = ,
[] = (.(payload))
},
source = ltn12.source.(payload),
sink = ltn12.sink.(response)
}
code ~=
.()