NEWS
Skript PING
-
Hallo. Heute stelle ich euch einmal mein Skript "PING" vor. Wie der Name schon vermuten lässt, werden Daten zur Erreichbarkeit von (W)LAN-Geräten abgefragt und in atenpunkten 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.
-
-
Kleinbuchstaben...
ping
also -
ja hab ich auch probiert
-
-
ich bin auf eine samsung tablett s9 ultra mit dem samsung browser am probieren gewesen, mit dem firefox browser hat es sofort geklappt, komisch
-
vielen dank für dein Script!
Funktioniert mit meinem Qnap NAS super
Schalte damit über ein Blockly zusätzlich ein Festplatten Array was über USB3 damit verbunden ist ein und aus -
super script von dir
Kann du sagen, warum Amazon Echos nicht gehen?
Mein Alexa-Echo-Show2 und FireTVStick wird als "true" angezeigt. Die Dot leider nicht
Edit: Was sagt den der Status "OK" aus bei jedem Netzwerkgerät
-
@emil70 sagte in Skript PING:
super script von dir
Kann du sagen, warum Amazon Echos nicht gehen?
Mein Alexa-Echo-Show2 und FireTVStick wird als "true" angezeigt. Die Dot leider nicht
Edit: Was sagt den der Status "OK" aus bei jedem Netzwerkgerät
Das kannst du selber ausprobieren:
per konsole schickst du mal ein 'ping <IP.DES.ECHO.DOT> ab und schaust dir die Antwort an.Es ist denkbar das die Firmware des EchoDot die Antworten auf ICMP Requests blockiert. Das würdest Du da dann sehen (oder auch andere Fehlermeldungen warum das nicht geht)
Das OK sagt aus das der Befehl sauber abgearbeitet wurde. Im Falle eines 'ERROR' ist auf deinem System etwas faul was dazu führt das die Pings nicht ausgeführt werden können.
A.
-
hast Recht, hätte ich auch selbst drauf kommen können
"Zeitüberschreitung der Anforderung." kommt
-
Hat hier jemand noch eine Idee, wie man
-
das man noch einen Datenpunkt bekommen, wieviele Geräte man im Netzwerk hat
-
das man noch einen Datenpunkt bekommen, wieviele davon auf "true" stehen
-
-
Habe das jetzt so gelöst. Für Alle die es brauchen können
Habe mir dazu extra Datenpunkte angelegt
-
ich habe aber generell noch eine Frage zu dem script. Ich habe daraus jetzt 3 script gemacht. Da ich Kameras, Lan und Wlan einzeln angezeigt bekommen möchte. Die funktionieren auch Alle soweit
ich würde gerne daraus ein script machen. Datenpunkte werden dann auch Alle richtig angelegt. Was ich nicht hinbekommen ist die Ping Abfrage
Momentan ist da so meine Einstellungen
//Version 1.0.0 - 04.10.2024 //Ersteller Ro75. //https://forum.iobroker.net/topic/77249/skript-ping //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 //https://forum.iobroker.net/topic/77249/skript-ping //"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 sMainPathKamera = '0_userdata.0.Netzwerkgeräte-Test.Kamera.'; //zentraler Datenpunkt const sMainPathKameras = '0_userdata.0.Netzwerkgeräte-Test.Kameras'; const sMainPathLan = '0_userdata.0.Netzwerkgeräte-Test.Lan.'; //zentraler Datenpunkt const sMainPathLangeraete = '0_userdata.0.Netzwerkgeräte-Test.Lan-Geräte'; const sMainPathWlan = '0_userdata.0.Netzwerkgeräte-Test.Wlan.'; //zentraler Datenpunkt const sMainPathWlangeraete = '0_userdata.0.Netzwerkgeräte-Test.Wlan-Geräte'; //Konfiguration der abzufragenden Geräte. Geräte werden duch "Doppelpunkt" (:) getrennt. //Jedes Geräte besteht aus zwei Werten. Die Werte werden durch Komma (,) getrennt. //Links vom Komma die Bezeichnung und rechts vom Komma die IP-Adresse const cDevicePingKamera = 'Kamera-Garage,192.168.178.50'; //bitte anpassen const cDevicePingLan = 'Lan-Geraete,192.168.178.60'; //bitte anpassen const cDevicePingWlan = 'Wlan-Geraete,192.168.178.70'; //bitte anpassen //Kamera Datenpunkte anlegen function PingInitalisierungKamera(){ let sDevice = cDevicePingKamera.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { let device_data = sDevice[i].split(','); createState(sMainPathKamera+device_data[0], '', {name: device_data[1],read: true, write: true}); createState(sMainPathKamera+device_data[0]+'.Ping.alive', false, {name: 'Pingstatus' ,type: 'boolean', read: true, write: true}); createState(sMainPathKamera+device_data[0]+'.Ping.time', 0, {name: 'Zeit' ,type: 'number', read: true, write: true, unit: 'ms'}); createState(sMainPathKamera+device_data[0]+'.Ping.status', '', {name: 'Status' ,type: 'string', read: true, write: true}); createState(sMainPathKameras, 0, {name: 'Onlinestatus' ,type: 'number', read: true, write: true}); } } //Lan Datenpunkte anlegen function PingInitalisierungLan(){ let sDevice = cDevicePingLan.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { let device_data = sDevice[i].split(','); createState(sMainPathLan+device_data[0], '', {name: device_data[1],read: true, write: true}); createState(sMainPathLan+device_data[0]+'.Ping.alive', false, {name: 'Pingstatus' ,type: 'boolean', read: true, write: true}); createState(sMainPathLan+device_data[0]+'.Ping.time', 0, {name: 'Zeit' ,type: 'number', read: true, write: true, unit: 'ms'}); createState(sMainPathLan+device_data[0]+'.Ping.status', '', {name: 'Status' ,type: 'string', read: true, write: true}); createState(sMainPathLangeraete, 0, {name: 'Onlinestatus' ,type: 'number', read: true, write: true}); } } //Wlan Datenpunkte anlegen function PingInitalisierungWlan(){ let sDevice = cDevicePingWlan.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { let device_data = sDevice[i].split(','); createState(sMainPathWlan +device_data[0], '', {name: device_data[1],read: true, write: true}); createState(sMainPathWlan +device_data[0]+'.Ping.alive', false, {name: 'Pingstatus' ,type: 'boolean', read: true, write: true}); createState(sMainPathWlan +device_data[0]+'.Ping.time', 0, {name: 'Zeit' ,type: 'number', read: true, write: true, unit: 'ms'}); createState(sMainPathWlan +device_data[0]+'.Ping.status', '', {name: 'Status' ,type: 'string', read: true, write: true}); createState(sMainPathWlangeraete, 0, {name: 'Onlinestatus' ,type: 'number', read: true, write: true}); } } //START PingInitalisierungKamera(); async function pingHost(host,sDesc) { try { const res = await ping.promise.probe(host, {timeout: 2, deadline: 2, packetSize: 16}); setState(sMainPathKamera+sDesc+'.Ping.alive', JSON.parse(JSON.stringify(res)).alive, true); setState(sMainPathKamera+sDesc+'.Ping.time', parseFloat(JSON.parse(JSON.stringify(res)).time), true); setState(sMainPathKamera+sDesc+'.Ping.status', 'OK', true); } catch (error) { setState(sMainPathKamera+sDesc+'.Ping.status', 'ERROR', true); } } PingInitalisierungLan(); async function pingHost(host,sDesc) { try { const res = await ping.promise.probe(host, {timeout: 2, deadline: 2, packetSize: 16}); setState(sMainPathLan+sDesc+'.Ping.alive', JSON.parse(JSON.stringify(res)).alive, true); setState(sMainPathLan+sDesc+'.Ping.time', parseFloat(JSON.parse(JSON.stringify(res)).time), true); setState(sMainPathLan+sDesc+'.Ping.status', 'OK', true); } catch (error) { setState(sMainPathLan+sDesc+'.Ping.status', 'ERROR', true); } } PingInitalisierungWlan(); async function pingHost(host,sDesc) { try { const res = await ping.promise.probe(host, {timeout: 2, deadline: 2, packetSize: 16}); setState(sMainPathWlan+sDesc+'.Ping.alive', JSON.parse(JSON.stringify(res)).alive, true); setState(sMainPathWlan+sDesc+'.Ping.time', parseFloat(JSON.parse(JSON.stringify(res)).time), true); setState(sMainPathWlan+sDesc+'.Ping.status', 'OK', true); } catch (error) { setState(sMainPathWlan+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 bPingSperreKamera = false; schedule('*/20 * * * * *', async function StartPing() { if (bPingSperreKamera == false) { bPingSperreKamera = true; let sDevice = cDevicePingKamera.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { await pingHost(sDevice[i].split(',')[1],sDevice[i].split(',')[0]); } bPingSperreKamera = false; } }); let bPingSperreLan = false; schedule('*/30 * * * * *', async function StartPing() { if (bPingSperreLan == false) { bPingSperreLan = true; let sDevice = cDevicePingLan.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { await pingHost(sDevice[i].split(',')[1],sDevice[i].split(',')[0]); } bPingSperreLan= false; } }); //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 bPingSperreWlan = false; schedule('*/40 * * * * *', async function StartPing() { if (bPingSperreWlan == false) { bPingSperreWlan = true; let sDevice = cDevicePingWlan.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { await pingHost(sDevice[i].split(',')[1],sDevice[i].split(',')[0]); } bPingSperreWlan = false; } });
der Part ist so nicht richtig. Da bräuchte ich Hilfe
//START PingInitalisierungKamera(); async function pingHost(host,sDesc) { try { const res = await ping.promise.probe(host, {timeout: 2, deadline: 2, packetSize: 16}); setState(sMainPathKamera+sDesc+'.Ping.alive', JSON.parse(JSON.stringify(res)).alive, true); setState(sMainPathKamera+sDesc+'.Ping.time', parseFloat(JSON.parse(JSON.stringify(res)).time), true); setState(sMainPathKamera+sDesc+'.Ping.status', 'OK', true); } catch (error) { setState(sMainPathKamera+sDesc+'.Ping.status', 'ERROR', true); } } PingInitalisierungLan(); async function pingHost(host,sDesc) { try { const res = await ping.promise.probe(host, {timeout: 2, deadline: 2, packetSize: 16}); setState(sMainPathLan+sDesc+'.Ping.alive', JSON.parse(JSON.stringify(res)).alive, true); setState(sMainPathLan+sDesc+'.Ping.time', parseFloat(JSON.parse(JSON.stringify(res)).time), true); setState(sMainPathLan+sDesc+'.Ping.status', 'OK', true); } catch (error) { setState(sMainPathLan+sDesc+'.Ping.status', 'ERROR', true); } } PingInitalisierungWlan(); async function pingHost(host,sDesc) { try { const res = await ping.promise.probe(host, {timeout: 2, deadline: 2, packetSize: 16}); setState(sMainPathWlan+sDesc+'.Ping.alive', JSON.parse(JSON.stringify(res)).alive, true); setState(sMainPathWlan+sDesc+'.Ping.time', parseFloat(JSON.parse(JSON.stringify(res)).time), true); setState(sMainPathWlan+sDesc+'.Ping.status', 'OK', true); } catch (error) { setState(sMainPathWlan+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 bPingSperreKamera = false; schedule('*/20 * * * * *', async function StartPing() { if (bPingSperreKamera == false) { bPingSperreKamera = true; let sDevice = cDevicePingKamera.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { await pingHost(sDevice[i].split(',')[1],sDevice[i].split(',')[0]); } bPingSperreKamera = false; } }); let bPingSperreLan = false; schedule('*/30 * * * * *', async function StartPing() { if (bPingSperreLan == false) { bPingSperreLan = true; let sDevice = cDevicePingLan.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { await pingHost(sDevice[i].split(',')[1],sDevice[i].split(',')[0]); } bPingSperreLan= false; } }); //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 bPingSperreWlan = false; schedule('*/40 * * * * *', async function StartPing() { if (bPingSperreWlan == false) { bPingSperreWlan = true; let sDevice = cDevicePingWlan.split(':'); for (let i = 0; i <= sDevice.length-1; i++) { await pingHost(sDevice[i].split(',')[1],sDevice[i].split(',')[0]); } bPingSperreWlan = false; } });
Edit: nach der ersten Pingabfrage kommt dann das
javascript.0 12:35:20.027 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.028 warn at pingHost (script.js.common.Netzwerkstatus.Test1:105:9) javascript.0 12:35:20.028 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.029 warn at pingHost (script.js.common.Netzwerkstatus.Test1:106:9) javascript.0 12:35:20.029 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.051 warn at pingHost (script.js.common.Netzwerkstatus.Test1:104:9) javascript.0 12:35:20.051 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.053 warn at pingHost (script.js.common.Netzwerkstatus.Test1:105:9) javascript.0 12:35:20.053 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.054 warn at pingHost (script.js.common.Netzwerkstatus.Test1:106:9) javascript.0 12:35:20.054 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.077 warn at pingHost (script.js.common.Netzwerkstatus.Test1:104:9) javascript.0 12:35:20.078 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.079 warn at pingHost (script.js.common.Netzwerkstatus.Test1:105:9) javascript.0 12:35:20.080 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.081 warn at pingHost (script.js.common.Netzwerkstatus.Test1:106:9) javascript.0 12:35:20.081 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.102 warn at pingHost (script.js.common.Netzwerkstatus.Test1:104:9) javascript.0 12:35:20.103 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.104 warn at pingHost (script.js.common.Netzwerkstatus.Test1:105:9) javascript.0 12:35:20.104 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.106 warn at pingHost (script.js.common.Netzwerkstatus.Test1:106:9) javascript.0 12:35:20.106 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.136 warn at pingHost (script.js.common.Netzwerkstatus.Test1:104:9) javascript.0 12:35:20.137 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.138 warn at pingHost (script.js.common.Netzwerkstatus.Test1:105:9) javascript.0 12:35:20.138 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.139 warn at pingHost (script.js.common.Netzwerkstatus.Test1:106:9) javascript.0 12:35:20.140 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.197 warn at pingHost (script.js.common.Netzwerkstatus.Test1:104:9) javascript.0 12:35:20.197 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.198 warn at pingHost (script.js.common.Netzwerkstatus.Test1:105:9) javascript.0 12:35:20.198 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13) javascript.0 12:35:20.199 warn at pingHost (script.js.common.Netzwerkstatus.Test1:106:9) javascript.0 12:35:20.200 warn at async Object.StartPing (script.js.common.Netzwerkstatus.Test1:121:13)