NEWS
Skript PING
-
Hallo. Heute stelle ich euch einmal mein Skript "PING" vor. Wie der Name schon vermuten lässt, werden Daten uzr Erreichbarkeit von WLAN-Geräte abgefragt und in DP gespeichert.
Ach ja. Da gibt es einen Adapter. Im Grunde genommen, liefert das Skript fast die selben Daten.
Warum nun aber das Skript? Der Hauptvorteil für mich ist, ich muss nicht einen weiteren Adapter pflegen (Updates). Und von den Ressourcen kann ich mir auch ein paar sparen, da der JS-Adapter sowieso läuft.
VORAUSSETZUNGEN:
Im JS-Adapter muss "ping" als zusätzliches NPM-Modul eingetragen sein
//Version 1.0.0 - 04.10.2024 //Ersteller Ro75. //Voraussetzungen (Version 1.0.0 getestet mit) //NodeJS: 20.x //Javascript-Adapter: 8.7.6 //Admin-Adapter: 7.0.23 //JS-Controller: 6.0.11 //"normale" Geräte ("Computer, Router, Switch, HUB, NAS, WLAN-Steckdosen, Android-Smartphone, Android-Tablet, etc.") //Amazon Echos, SKY-Geräte und diverse Konsolen (einfach probieren) funktionieren nicht. const ping = require('ping'); //Im Javascript-Adapter einzutragen (Zusätzliche NPM-Module) const sMainPath = '0_userdata.0.Ping.'; //zentraler Datenpunkt //Konfiguration der abzufragenden Geräte. Geräte werden duch "Doppelpunkt" (:) getrennt. //Jedes Geräte besteht aus zwei Werten. Die Werte werden durch Komma (,) getrennt. //Linksvom Kommadie Bezeichnung und rechts vom Komma die IP-Adresse const cDevicePing = 'Device-1,192.168.XXX.XXX:Device-2,192.168.XXX.XXX:Device-3,192.168.XXX.XXX'; //bitte anpassen //Datenpunkte anlegen function PingInitalisierung(){ let sDevice = cDevicePing.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { let device_data = sDevice[i].split(','); createState(sMainPath+device_data[0], '', {name: device_data[1],read: true, write: true}); createState(sMainPath+device_data[0]+'.Ping.alive', false, {name: 'Pingstatus' ,type: 'boolean', read: true, write: true}); createState(sMainPath+device_data[0]+'.Ping.time', 0, {name: 'Zeit' ,type: 'number', read: true, write: true, unit: 'ms'}); createState(sMainPath+device_data[0]+'.Ping.status', '', {name: 'Status' ,type: 'string', read: true, write: true}); } } //START PingInitalisierung(); async function pingHost(host,sDesc) { try { const res = await ping.promise.probe(host, {timeout: 2, deadline: 2, packetSize: 16}); setState(sMainPath+sDesc+'.Ping.alive', JSON.parse(JSON.stringify(res)).alive, true); setState(sMainPath+sDesc+'.Ping.time', parseFloat(JSON.parse(JSON.stringify(res)).time), true); setState(sMainPath+sDesc+'.Ping.status', 'OK', true); } catch (error) { setState(sMainPath+sDesc+'.Ping.status', 'ERROR', true); } } //Ping aller 10 Sekunden - kann angepasst werden - kleinerer Wert nicht empfohlen //damit das Intervall (wenn zu niedrig) nicht "gesprengt" wird: Schleife sperren und am Ende wieder freigeben let bPingSperre = false; schedule('*/10 * * * * *', async function StartPing() { if (bPingSperre == false) { bPingSperre = true; let sDevice = cDevicePing.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { await pingHost(sDevice[i].split(',')[1],sDevice[i].split(',')[0]); } bPingSperre = false; } });
Wünsche Euch viel Erfolg bei der Umsetzung.
Ro75.
-
@ro75
wärst du so nett und würdest erläutern wie man ping zum js adapter als npm modul hinzufügt, thx -
@myzerat was möchtest du denn genau wissen? Wie im Bild im ersten Post zu sehen. JS-Adapter >> Allgemeine Einstellungen und dort jeweils das Wort ping eintragen und mit Enter bestätigen.
Ro75.
-
hab ich gemacht, wenn ich enter drücke tut sich nichts
-
Kleinbuchstaben...
ping
also -
ja hab ich auch probiert
-
Keine Ahnung was du da machst. Geht hier sofort:
-
ich bin auf eine samsung tablett s9 ultra mit dem samsung browser am probieren gewesen, mit dem firefox browser hat es sofort geklappt, komisch