@atelieruldetehnologii/node-red-custome-solutions 0.62.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +56 -0
- package/PROPRIETARY-LICENSE.txt +157 -0
- package/README.md +105 -0
- package/TERMS-AND-CONDITIONS.md +311 -0
- package/advantech-read/advantech-read.html +775 -0
- package/advantech-read/advantech-read.js +449 -0
- package/advantech-write/advantech-write.html +413 -0
- package/advantech-write/advantech-write.js +338 -0
- package/bess-control/bess-control.html +569 -0
- package/bess-control/bess-control.js +541 -0
- package/bess-control/lib/allocation.js +149 -0
- package/bess-control/lib/batteries.js +86 -0
- package/bess-control/lib/helpers.js +157 -0
- package/bess-control/lib/messages.js +131 -0
- package/bess-control/lib/runtime.js +156 -0
- package/carlo-gavazzi/carlo-gavazzi.html +4327 -0
- package/carlo-gavazzi/carlo-gavazzi.js +3081 -0
- package/control-export/control-export.html +3644 -0
- package/control-export/control-export.js +2192 -0
- package/control-reactive/control-reactive.html +3136 -0
- package/control-reactive/control-reactive.js +2124 -0
- package/fronius-emulator/README.md +258 -0
- package/fronius-emulator/fronius-emulator.html +170 -0
- package/fronius-emulator/fronius-emulator.js +520 -0
- package/fronius-emulator/lib/binary-codec.js +65 -0
- package/fronius-emulator/lib/fronius-register-map.js +185 -0
- package/fronius-emulator/lib/modbus-parser.js +61 -0
- package/fronius-emulator/lib/modbus-tcp-server.js +224 -0
- package/fronius-emulator/lib/validation.js +206 -0
- package/fronius-emulator/lib/virtual-meter.js +132 -0
- package/fronius-read/fronius-read.html +3944 -0
- package/fronius-read/fronius-read.js +1466 -0
- package/fronius-read/lib/inverter-profiles.js +711 -0
- package/fronius-read/lib/sunspec-core.js +303 -0
- package/fronius-read/lib/sunspec-model-parsers.js +845 -0
- package/fronius-write/fronius-write.html +1789 -0
- package/fronius-write/fronius-write.js +2531 -0
- package/influxdb/influxdb.html +1077 -0
- package/influxdb/influxdb.js +1487 -0
- package/janitza/janitza.html +2562 -0
- package/janitza/janitza.js +1500 -0
- package/janitza/lib/janitza-profiles.js +371 -0
- package/lib/a3-test-server.js +199 -0
- package/lib/adam-6000-profiles.js +173 -0
- package/lib/licensing/constants.js +103 -0
- package/lib/licensing/device-id.js +251 -0
- package/lib/licensing/errors.js +21 -0
- package/lib/licensing/license-client.js +377 -0
- package/lib/licensing/license-state.js +50 -0
- package/lib/licensing/node-guard.js +150 -0
- package/lib/licensing/package-integrity.js +167 -0
- package/lib/licensing/package-integrity.json +513 -0
- package/lib/licensing/public-key.pem +3 -0
- package/lib/licensing/public-key.pem.example +2 -0
- package/lib/licensing/public-keys.js +18 -0
- package/lib/licensing/storage.js +63 -0
- package/lib/licensing/token-verifier.js +84 -0
- package/lib/numbers.js +26 -0
- package/license/atelier-license.html +88 -0
- package/license/atelier-license.js +170 -0
- package/modbus-tcp-discover/modbus-tcp-discover.html +190 -0
- package/modbus-tcp-discover/modbus-tcp-discover.js +706 -0
- package/multi-battery/multi-battery.html +649 -0
- package/multi-battery/multi-battery.js +668 -0
- package/multi-grid/multi-grid.html +745 -0
- package/multi-grid/multi-grid.js +1392 -0
- package/multi-inverter/lib/engine-core.js +237 -0
- package/multi-inverter/multi-inverter.html +2674 -0
- package/multi-inverter/multi-inverter.js +1393 -0
- package/package.json +109 -0
- package/phoenix-contact/lib/eem-ma370-advanced.js +175 -0
- package/phoenix-contact/lib/eem-ma370.js +138 -0
- package/phoenix-contact/lib/integrations.js +149 -0
- package/phoenix-contact/lib/phoenix-contact-profile.js +35030 -0
- package/phoenix-contact/phoenix-contact.html +840 -0
- package/phoenix-contact/phoenix-contact.js +679 -0
- package/pv-generator/pv-generator.html +284 -0
- package/pv-generator/pv-generator.js +387 -0
- package/pylontech-read/pylontech-read.html +763 -0
- package/pylontech-read/pylontech-read.js +518 -0
- package/pylontech-write/pylontech-write.html +405 -0
- package/pylontech-write/pylontech-write.js +546 -0
- package/scada-aggregator/lib/aggregate.js +72 -0
- package/scada-aggregator/lib/groups.js +39 -0
- package/scada-aggregator/scada-aggregator.html +108 -0
- package/scada-aggregator/scada-aggregator.js +117 -0
- package/scada-server/lib/aggregator-map.js +58 -0
- package/scada-server/lib/encoding.js +235 -0
- package/scada-server/lib/modbus-server.js +492 -0
- package/scada-server/lib/object-path.js +18 -0
- package/scada-server/lib/register-map.js +288 -0
- package/scada-server/scada-server.html +1419 -0
- package/scada-server/scada-server.js +704 -0
- package/scripts/check-syntax.js +66 -0
- package/scripts/package-integrity.js +46 -0
- package/scripts/package-release.js +116 -0
- package/scripts/run-tests.js +2178 -0
- package/scripts/tgz-integrity.js +74 -0
- package/sma-read/lib/sunspec-core.js +83 -0
- package/sma-read/lib/sunspec-model-parsers.js +853 -0
- package/sma-read/sma-read.html +659 -0
- package/sma-read/sma-read.js +458 -0
- package/sma-write/sma-write.html +105 -0
- package/sma-write/sma-write.js +270 -0
- package/victron-read/lib/mqtt-state.js +176 -0
- package/victron-read/victron-read.html +1074 -0
- package/victron-read/victron-read.js +1222 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
<script type="text/javascript">
|
|
2
|
+
RED.nodes.registerType("modbus-tcp-discover", {
|
|
3
|
+
category: "Atelierul de Tehnologii",
|
|
4
|
+
color: "#4C9F70",
|
|
5
|
+
defaults: {
|
|
6
|
+
license: { value: "", type: "atelier-license", required: true },
|
|
7
|
+
name: { value: "" },
|
|
8
|
+
target: { value: "192.168.1.0/24", required: true },
|
|
9
|
+
scanProfile: { value: "custom" },
|
|
10
|
+
detailLevel: { value: "standard" },
|
|
11
|
+
ports: { value: "502", required: true },
|
|
12
|
+
timeout: { value: 800, required: true, validate: RED.validators.number() },
|
|
13
|
+
concurrency: { value: 32, required: true, validate: RED.validators.number() },
|
|
14
|
+
rateLimit: { value: 100, required: true, validate: RED.validators.number() },
|
|
15
|
+
discoveryMode: { value: "tcp" },
|
|
16
|
+
resolveHostnames: { value: false },
|
|
17
|
+
emitClosed: { value: false },
|
|
18
|
+
probeModbus: { value: true },
|
|
19
|
+
unitIds: { value: "1-10" },
|
|
20
|
+
allowPublic: { value: false },
|
|
21
|
+
outputFormat: { value: "json" },
|
|
22
|
+
emitMode: { value: "summary_only" },
|
|
23
|
+
deviceCollection: { value: "last_octet" },
|
|
24
|
+
onlyChanges: { value: false },
|
|
25
|
+
scanOnStart: { value: false },
|
|
26
|
+
interval: { value: 0, validate: RED.validators.number() }
|
|
27
|
+
},
|
|
28
|
+
inputs: 1,
|
|
29
|
+
outputs: 2,
|
|
30
|
+
icon: "font-awesome/fa-search",
|
|
31
|
+
outputLabels: ["dispozitiv", "sumar / eroare"],
|
|
32
|
+
label: function () { return this.name || "modbus-tcp-discover"; },
|
|
33
|
+
oneditprepare: function () {
|
|
34
|
+
function applyProfile() {
|
|
35
|
+
const value = $("#node-input-scanProfile").val();
|
|
36
|
+
const ports = { sunspec: "502", modbus: "502", mqtt: "1883,8883", web: "80,443,8080,8443", industrial: "102,502,1883,4840,20000,44818", full: "80,102,443,502,1883,4840,8080,8443,8883,20000,44818" };
|
|
37
|
+
if (ports[value]) $("#node-input-ports").val(ports[value]);
|
|
38
|
+
const usesModbus = ["sunspec", "modbus", "industrial", "full"].includes(value);
|
|
39
|
+
if (value !== "custom") $("#node-input-probeModbus").prop("checked", usesModbus);
|
|
40
|
+
$("#md-ports-row, #md-ports-note").toggle(value === "custom");
|
|
41
|
+
$("#md-modbus-section").toggle(usesModbus || value === "custom");
|
|
42
|
+
toggleModbus();
|
|
43
|
+
}
|
|
44
|
+
function applyDetail() {
|
|
45
|
+
const detailed = $("#node-input-detailLevel").val() === "detailed";
|
|
46
|
+
if (detailed) {
|
|
47
|
+
$("#node-input-discoveryMode").val("full_discovery");
|
|
48
|
+
$("#node-input-resolveHostnames").prop("checked", true);
|
|
49
|
+
}
|
|
50
|
+
$("#md-detailed-note").toggle(detailed);
|
|
51
|
+
$("#md-hostname-row").toggle(!detailed);
|
|
52
|
+
}
|
|
53
|
+
function toggleModbus() { $("#md-unit-row").toggle($("#node-input-probeModbus").prop("checked")); }
|
|
54
|
+
$("#node-input-probeModbus").on("change", toggleModbus);
|
|
55
|
+
$("#node-input-scanProfile").on("change", applyProfile);
|
|
56
|
+
$("#node-input-detailLevel").on("change", applyDetail);
|
|
57
|
+
applyProfile();
|
|
58
|
+
applyDetail();
|
|
59
|
+
},
|
|
60
|
+
oneditsave: function () {
|
|
61
|
+
this.target = String($("#node-input-target").val() || "").trim();
|
|
62
|
+
this.ports = String($("#node-input-ports").val() || "").trim();
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
</script>
|
|
66
|
+
|
|
67
|
+
<script type="text/html" data-template-name="modbus-tcp-discover">
|
|
68
|
+
<div class="form-row"><label for="node-input-license"><i class="fa fa-key"></i> License</label><input type="text" id="node-input-license"></div>
|
|
69
|
+
<div class="modbus-discover-editor">
|
|
70
|
+
<div class="md-section">
|
|
71
|
+
<div class="md-title"><i class="fa fa-search"></i> Scanare retea TCP</div>
|
|
72
|
+
<p class="md-note">Scaneaza numai reteaua pentru care ai autorizatie. Nodul testeaza conexiuni TCP si nu necesita ping sau privilegii speciale.</p>
|
|
73
|
+
<div class="form-row"><label for="node-input-name"><i class="fa fa-tag"></i> Nume</label><input type="text" id="node-input-name" placeholder="Descoperire Modbus"></div>
|
|
74
|
+
<div class="form-row"><label for="node-input-target"><i class="fa fa-sitemap"></i> Retea / interval</label><input type="text" id="node-input-target" placeholder="192.168.1.0/24"></div>
|
|
75
|
+
<div class="md-example">Accepta CIDR, interval complet, interval scurt sau IP unic: <code>10.0.0.0/24</code>, <code>10.0.0.10-10.0.0.50</code>, <code>10.0.0.10-50</code>.</div>
|
|
76
|
+
<div class="form-row"><label for="node-input-scanProfile"><i class="fa fa-magic"></i> Tip scanare</label><select id="node-input-scanProfile"><option value="sunspec">SunSpec</option><option value="modbus">Modbus TCP</option><option value="mqtt">MQTT</option><option value="web">Web</option><option value="industrial">Protocoale industriale</option><option value="full">Scanare completa</option><option value="custom">Personalizat</option></select></div>
|
|
77
|
+
<div class="form-row"><label for="node-input-detailLevel"><i class="fa fa-sliders"></i> Nivel detalii</label><select id="node-input-detailLevel"><option value="rapid">Rapid</option><option value="standard">Standard</option><option value="detailed">Detaliat</option></select></div>
|
|
78
|
+
<div class="md-info" id="md-detailed-note"><i class="fa fa-info-circle"></i> Modul Detaliat include automat Ping, ARP, TCP, identificarea numelui dispozitivelor si verificarile extinse ale profilului ales.</div>
|
|
79
|
+
<div class="form-row" id="md-ports-row"><label for="node-input-ports"><i class="fa fa-plug"></i> Porturi</label><input type="text" id="node-input-ports" placeholder="502,80,443"></div>
|
|
80
|
+
<div class="md-example" id="md-ports-note">Lista sau interval, maximum 32: <code>502</code>, <code>80,443,502</code>, <code>500-510</code>.</div>
|
|
81
|
+
<div class="form-row md-check"><input type="checkbox" id="node-input-allowPublic"><label for="node-input-allowPublic">Permite explicit scanarea adreselor publice autorizate</label></div>
|
|
82
|
+
</div>
|
|
83
|
+
<div class="md-section" id="md-modbus-section">
|
|
84
|
+
<div class="md-title"><i class="fa fa-exchange"></i> Validare Modbus</div>
|
|
85
|
+
<div class="form-row md-check"><input type="checkbox" id="node-input-probeModbus"><label for="node-input-probeModbus">Verifica protocolul Modbus si detecteaza SunSpec</label></div>
|
|
86
|
+
<div class="form-row" id="md-unit-row"><label for="node-input-unitIds"><i class="fa fa-list-ol"></i> Unit ID</label><input type="text" id="node-input-unitIds" placeholder="1-10"></div>
|
|
87
|
+
</div>
|
|
88
|
+
<details class="md-advanced"><summary><i class="fa fa-cog"></i> Setari avansate</summary><div class="md-section">
|
|
89
|
+
<div class="md-title"><i class="fa fa-sliders"></i> Descoperire si performanta</div>
|
|
90
|
+
<div class="form-row"><label for="node-input-discoveryMode"><i class="fa fa-wifi"></i> Metoda</label><select id="node-input-discoveryMode"><option value="tcp">TCP</option><option value="ping_tcp">Ping + TCP</option><option value="arp_tcp">ARP/neighbour + TCP</option><option value="full_discovery">Complet: Ping + ARP + TCP</option></select></div>
|
|
91
|
+
<div class="form-row"><label for="node-input-timeout"><i class="fa fa-clock-o"></i> Timeout (ms)</label><input type="number" id="node-input-timeout" min="100" max="10000"></div>
|
|
92
|
+
<div class="form-row"><label for="node-input-concurrency"><i class="fa fa-tasks"></i> Concurenta</label><input type="number" id="node-input-concurrency" min="1" max="100"></div>
|
|
93
|
+
<div class="form-row"><label for="node-input-rateLimit"><i class="fa fa-tachometer"></i> Conexiuni/sec</label><input type="number" id="node-input-rateLimit" min="1" max="1000"></div>
|
|
94
|
+
<div class="form-row md-check" id="md-hostname-row"><input type="checkbox" id="node-input-resolveHostnames"><label for="node-input-resolveHostnames">Identifica numele dispozitivelor gasite</label></div>
|
|
95
|
+
<div class="form-row md-check"><input type="checkbox" id="node-input-emitClosed"><label for="node-input-emitClosed">Emite si gazdele fara porturi deschise</label></div>
|
|
96
|
+
</div></details>
|
|
97
|
+
<div class="md-section">
|
|
98
|
+
<div class="md-title"><i class="fa fa-repeat"></i> Monitorizare si iesire</div>
|
|
99
|
+
<div class="form-row md-check"><input type="checkbox" id="node-input-scanOnStart"><label for="node-input-scanOnStart">Scaneaza automat la pornire</label></div>
|
|
100
|
+
<div class="form-row"><label for="node-input-interval"><i class="fa fa-clock-o"></i> Interval (ms)</label><input type="number" id="node-input-interval" min="0" placeholder="0 = dezactivat"></div>
|
|
101
|
+
<div class="form-row md-check"><input type="checkbox" id="node-input-onlyChanges"><label for="node-input-onlyChanges">Emite dispozitive numai cand starea se schimba</label></div>
|
|
102
|
+
<div class="form-row"><label for="node-input-emitMode"><i class="fa fa-list"></i> Emitere</label><select id="node-input-emitMode"><option value="summary_only">Doar lista finala</option><option value="device_and_summary">Dispozitive live + lista finala</option></select></div>
|
|
103
|
+
<div class="form-row"><label for="node-input-deviceCollection"><i class="fa fa-key"></i> Index dispozitive</label><select id="node-input-deviceCollection"><option value="last_octet">Ultimul octet IP (1, 88, 101)</option><option value="ip">IP complet</option><option value="array">Array clasic</option></select></div>
|
|
104
|
+
<div class="form-row"><label for="node-input-outputFormat"><i class="fa fa-file-code-o"></i> Format</label><select id="node-input-outputFormat"><option value="json">JSON</option><option value="csv">CSV</option><option value="influx">InfluxDB</option></select></div>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
<style>
|
|
108
|
+
.modbus-discover-editor{--md-border:#d7dde5;--md-muted:#667085;--md-bg:#f8fafc}.modbus-discover-editor .md-section{margin:0 0 16px;padding:14px 16px;border:1px solid var(--md-border);border-radius:9px;background:var(--md-bg)}.modbus-discover-editor .md-title{margin-bottom:12px;font-size:15px;font-weight:600;color:#243447}.modbus-discover-editor .md-title i{margin-right:7px;color:#287a50}.modbus-discover-editor .md-note,.modbus-discover-editor .md-example{color:var(--md-muted);font-size:12px;line-height:1.45}.modbus-discover-editor .md-note{margin:0 0 14px}.modbus-discover-editor .md-example{margin:-6px 0 12px;padding-left:150px}.modbus-discover-editor .md-info{margin:-3px 0 13px 150px;padding:8px 10px;border-left:3px solid #287a50;background:#edf7f1;color:#315744;font-size:12px;line-height:1.4}.modbus-discover-editor .form-row label{width:140px}.modbus-discover-editor .form-row input:not([type=checkbox]){width:calc(100% - 150px)}.modbus-discover-editor .md-check{display:flex;align-items:center}.modbus-discover-editor .md-check input{width:auto;margin:0 10px 0 0}.modbus-discover-editor .md-check label{width:auto;margin:0}.modbus-discover-editor .md-advanced{margin:0 0 16px}.modbus-discover-editor .md-advanced>summary{cursor:pointer;padding:10px 14px;border:1px solid var(--md-border);border-radius:8px;background:#fff;font-weight:600;color:#344054}.modbus-discover-editor .md-advanced[open]>summary{margin-bottom:8px}.modbus-discover-editor .md-advanced .md-section{margin-bottom:0}
|
|
109
|
+
</style>
|
|
110
|
+
</script>
|
|
111
|
+
|
|
112
|
+
<script type="text/html" data-help-name="modbus-tcp-discover">
|
|
113
|
+
<p>Descopera dispozitive dintr-o retea IPv4, verifica porturile TCP si, in functie de profil, valideaza protocoale precum Modbus TCP, SunSpec sau MQTT. Pentru o utilizare obisnuita este suficient sa alegi reteaua, tipul scanarii si nivelul de detalii.</p>
|
|
114
|
+
|
|
115
|
+
<h3>Configurare rapida</h3>
|
|
116
|
+
<ol>
|
|
117
|
+
<li>Introdu reteaua, de exemplu <code>192.168.1.0/24</code>.</li>
|
|
118
|
+
<li>Alege <b>Tip scanare</b>: SunSpec, Modbus TCP, MQTT, Web sau Scanare completa.</li>
|
|
119
|
+
<li>Alege <b>Standard</b> pentru utilizarea curenta sau <b>Detaliat</b> pentru inventariere.</li>
|
|
120
|
+
<li>Conecteaza un nod Inject la intrare si un nod Debug la iesirea a doua.</li>
|
|
121
|
+
</ol>
|
|
122
|
+
<p>Setarile avansate pot ramane la valorile implicite. Modifica-le numai daca reteaua este lenta, filtrata sau necesita un comportament special.</p>
|
|
123
|
+
|
|
124
|
+
<h3>Tipuri de scanare</h3>
|
|
125
|
+
<ul>
|
|
126
|
+
<li><b>SunSpec</b> — verifica portul 502, cauta dispozitive compatibile SunSpec si citeste datele de identificare disponibile. Nu este limitat la un anumit producator.</li>
|
|
127
|
+
<li><b>Modbus TCP</b> — identifica servere Modbus TCP si Unit ID-urile care raspund, inclusiv dispozitive fara SunSpec.</li>
|
|
128
|
+
<li><b>MQTT</b> — verifica porturile MQTT uzuale si confirma protocolul prin raspunsul brokerului.</li>
|
|
129
|
+
<li><b>Web</b> — cauta interfete web pe porturile HTTP si HTTPS uzuale.</li>
|
|
130
|
+
<li><b>Protocoale industriale</b> — verifica un set de porturi utilizate frecvent in automatizari.</li>
|
|
131
|
+
<li><b>Scanare completa</b> — combina porturile presetate pentru o inventariere generala.</li>
|
|
132
|
+
<li><b>Personalizat</b> — permite introducerea manuala a porturilor si alegerea validarii Modbus.</li>
|
|
133
|
+
</ul>
|
|
134
|
+
|
|
135
|
+
<h3>Niveluri de detalii</h3>
|
|
136
|
+
<ul>
|
|
137
|
+
<li><b>Rapid</b> — prioritizeaza viteza si verifica informatiile esentiale.</li>
|
|
138
|
+
<li><b>Standard</b> — echilibru recomandat intre viteza si informatiile returnate.</li>
|
|
139
|
+
<li><b>Detaliat</b> — activeaza automat Ping + ARP + TCP, identifica numele dispozitivelor si executa verificarile extinse ale profilului. Nu trebuie activata separat optiunea pentru numele dispozitivelor.</li>
|
|
140
|
+
</ul>
|
|
141
|
+
<p>Identificarea numelui depinde de DNS-ul retelei. Lipsa unui nume nu inseamna ca dispozitivul este offline.</p>
|
|
142
|
+
|
|
143
|
+
<h3>Retea si adrese</h3>
|
|
144
|
+
<p>Sunt acceptate un IP unic (<code>192.168.1.20</code>), o retea CIDR (<code>192.168.1.0/24</code>), un interval complet (<code>192.168.1.20-192.168.1.50</code>) sau unul scurt (<code>192.168.1.20-50</code>). Adresele publice sunt blocate implicit; activeaza optiunea dedicata numai pentru adrese asupra carora ai autorizatie explicita.</p>
|
|
145
|
+
<p>ARP poate furniza adresa MAC numai pentru dispozitive aflate in acelasi segment local si vizibile sistemului pe care ruleaza Node-RED. Routerele nu transmit in mod normal informatia ARP intre subretele.</p>
|
|
146
|
+
|
|
147
|
+
<h3>Setari avansate</h3>
|
|
148
|
+
<ul>
|
|
149
|
+
<li><b>Metoda</b> stabileste daca descoperirea foloseste TCP, Ping, ARP sau combinatia lor. In modul Detaliat este folosita automat metoda completa.</li>
|
|
150
|
+
<li><b>Timeout</b> este timpul maxim asteptat pentru o verificare. Mareste-l pentru legaturi lente sau VPN.</li>
|
|
151
|
+
<li><b>Concurenta</b> stabileste cate verificari pot rula simultan. O valoare mare scurteaza scanarea, dar solicita mai mult reteaua.</li>
|
|
152
|
+
<li><b>Conexiuni/sec</b> limiteaza ritmul initiarii conexiunilor.</li>
|
|
153
|
+
<li><b>Emite gazdele fara porturi deschise</b> pastreaza in rezultat si dispozitivele observate prin Ping sau ARP.</li>
|
|
154
|
+
<li><b>Unit ID</b> stabileste adresele Modbus verificate. Exemplu: <code>1-10</code> sau <code>1,3,126</code>.</li>
|
|
155
|
+
</ul>
|
|
156
|
+
|
|
157
|
+
<h3>Intrare</h3>
|
|
158
|
+
<p>Orice mesaj porneste scanarea. Valorile configurate pot fi suprascrise din mesaj cu <code>msg.target</code>, <code>msg.scanProfile</code>, <code>msg.detailLevel</code>, <code>msg.ports</code>, <code>msg.timeout</code>, <code>msg.concurrency</code>, <code>msg.unitIds</code> si <code>msg.probeModbus</code>. Un mesaj cu <code>msg.cancel = true</code> opreste scanarea activa.</p>
|
|
159
|
+
|
|
160
|
+
<h3>Iesiri</h3>
|
|
161
|
+
<ol>
|
|
162
|
+
<li>Dispozitive individuale, numai cand este selectat <b>Dispozitive live + lista finala</b>.</li>
|
|
163
|
+
<li>Rezultatul final complet sau mesajul de eroare.</li>
|
|
164
|
+
</ol>
|
|
165
|
+
<p>Rezultatul final contine statistici despre scanare si colectia <code>msg.payload.devices</code>. Pentru fiecare dispozitiv pot fi incluse IP-ul, numele, MAC-ul, porturile deschise, producatorul, modelul, firmware-ul, seria, datele Modbus, Unit ID, SunSpec sau MQTT. Campurile pentru care nu exista date sunt eliminate automat.</p>
|
|
166
|
+
<p><code>open_ports</code> contine lista scurta a porturilor deschise. Campul <code>ports</code> este indexat direct dupa numarul portului, nu dupa pozitia intr-un array. De exemplu, rezultatul portului Modbus se acceseaza prin <code>msg.payload.devices["101"].ports["502"]</code>. Fiecare intrare contine starea, latenta si eventualul cod de eroare.</p>
|
|
167
|
+
<p>Rezultatele MQTT sunt organizate in acelasi mod: <code>mqtt["1883"]</code> si <code>mqtt["8883"]</code>. Astfel, informatia unui port poate fi gasita direct fara parcurgerea unui array.</p>
|
|
168
|
+
|
|
169
|
+
<h3>Organizarea dispozitivelor</h3>
|
|
170
|
+
<p>Varianta recomandata, <b>Ultimul octet IP</b>, permite accesul simplu prin <code>msg.payload.devices["101"]</code> pentru adresa <code>192.168.1.101</code>. Optiunea <b>IP complet</b> foloseste cheia <code>msg.payload.devices["192.168.1.101"]</code>, iar <b>Array clasic</b> produce o lista numerica. Daca ultimul octet se repeta intre subretele, nodul foloseste automat IP-ul complet pentru cheia duplicata.</p>
|
|
171
|
+
<p>Colectia <code>categories</code> ofera liste pregatite pentru utilizare: <code>modbus_devices</code>, <code>sunspec_devices</code>, <code>mqtt_devices</code> si <code>web_devices</code>. Fiecare foloseste acelasi mod de indexare ales pentru lista principala.</p>
|
|
172
|
+
|
|
173
|
+
<h3>Identificarea dispozitivului</h3>
|
|
174
|
+
<p>Campul <code>summary</code> combina intr-un text scurt identitatea si serviciile confirmate. <code>identification_confidence</code> poate fi <code>confirmed</code> cand identitatea sau protocolul a fost confirmat, <code>probable</code> cand exista indicii precum nume, producator MAC ori porturi deschise si <code>unknown</code> cand exista numai dovada ca adresa raspunde.</p>
|
|
175
|
+
<p><code>mac_vendor</code> este estimat din prefixul MAC folosind lista locala inclusa in nod. Informatia este orientativa: adresele MAC pot fi randomizate, virtualizate sau raportate prin Proxy ARP. Identificarea returnata direct prin Modbus/SunSpec are prioritate si un nivel de incredere mai mare.</p>
|
|
176
|
+
|
|
177
|
+
<h3>Optimizarea Modbus</h3>
|
|
178
|
+
<p>La o lista mare de Unit ID-uri, nodul testeaza mai intai adrese reprezentative. Daca raspunsurile arata ca serverul ignora sau oglindeste Unit ID-ul, scanarea se opreste inteligent. Daca raspunsurile sunt distincte sau lipsesc, verificarea continua pentru a descoperi dispozitive aflate la alte adrese. <code>tested_unit_ids</code> arata exact ce adrese au fost verificate efectiv.</p>
|
|
179
|
+
|
|
180
|
+
<h3>Recomandari</h3>
|
|
181
|
+
<ul>
|
|
182
|
+
<li>Pentru invertoare si contoare compatibile, incepe cu <b>SunSpec + Standard</b>.</li>
|
|
183
|
+
<li>Pentru dispozitive Modbus necunoscute, foloseste <b>Modbus TCP + Detaliat</b>.</li>
|
|
184
|
+
<li>Pentru inventarierea retelei, foloseste <b>Scanare completa + Detaliat</b>.</li>
|
|
185
|
+
<li>Daca scanarea produce prea mult trafic, redu Concurenta si Conexiuni/sec.</li>
|
|
186
|
+
</ul>
|
|
187
|
+
|
|
188
|
+
<h3>Limite si interpretare</h3>
|
|
189
|
+
<p>Sunt acceptate maximum 4096 de gazde, 32 de porturi, 247 Unit ID-uri si 100 de conexiuni concurente. Un raspuns Ping confirma accesibilitatea IP, nu existenta unui serviciu Modbus. Un port 502 deschis nu confirma singur protocolul Modbus; confirmarea apare numai dupa un raspuns Modbus valid. Unele dispozitive blocheaza Ping, dar raspund la TCP, motiv pentru care modul Detaliat combina mai multe metode.</p>
|
|
190
|
+
</script>
|