NEWS
Skript Hardwareinformationen via SNMP
-
Hallo. Heute stelle ich euch einmal mein Skript "Hardwareinformationen" vor. Dieses Skript ist etwas umfangreicher und anspruchsvoller.
Mit dem Skript können Hardwareinformationen vom Host (also da wo der ioBroker läuft) oder auch von jedem anderen Gerät im Netzwerk ausgelesen werden. Voraussetzung ist SNMP.
Danach werden diese Daten in Ordner gepackt und so gestaltet, um sie in Visualisierungen (VIS/VIS2,...) oder auch Grafana zu nutzen.
Es können die Daten von einem Gerät oder auch von mehreren abgefragt werden.
Hier einfach einmal paar Details.Allgemeine Informationen:
Auf Geräten mit Linux ist das Auslesen von SNMP-Informationen kein Problem. Unter Windows ist dies auch möglich, aber nicht so umfangreich (wie es gebraucht wird). Die Daten stehen in einer Datenbank. Jedes Objekt (Daten) sind sogenannte OID's.
Dabei unterscheidet man nach OID's, welche auf jedem System (z.B. PI + NUC mit Debian 11, 12 oder Ubuntu) vorhanden sind, oder nur auf bestimmten Geräten (Scanner, Drucker - herstellerabhängig). Dafür ist etwas Zeit, Detektivarbeit und die passende Software zum Heraussuchen der passenden OID's nötig. Dafür verwende ich: MIB Browser (https://www.ireasoning.com/).
Ich habe bei mir SNMP getestet:
- Debian 11 (PI) - viele Informationen (CPU, BOARD, RAM, HDD, SWAP, Netzwerk)
- Debian 12 (PI) - viele Informationen (CPU, BOARD, RAM, HDD, SWAP, Netzwerk)
- NUC (Ubuntu 22.04.x LTS und 24.04.x LTS) - viele Informationen (CPU, BOARD, RAM, HDD, SWAP, Netzwerk)
- Drucker (HP Laserjet 150nw) - wenige Informationen (Toner, Trommel, Seiten)
- Scanner (Brother DS-940DW) - wenige Informationen (Seiten)
- WD MyCloud2ExUltra - viele Informationen (CPU, BOARD, RAM, HDD, SWAP, Netzwerk)
- Windows 11 - einige Informationen (RAM, HDD, Netzwerk)
Theoretisch auf jedem Gerät was SNMP bereits installiert hat und nur noch aktiviert werden muss, oder wo es nachinstalliert werden kann.
Welche Daten kann (standardmäßig) das Skript auslesen?
//Temperaturen (experimentieren, welcher OID passt)
1.3.6.1.4.1.2021.13.16.2.1.3.1 - Temperatur (PI mit Debian)
1.3.6.1.4.1.2021.13.16.2.1.3.2 - Temperatur (NUC mit Ubuntu)
1.3.6.1.4.1.2021.13.16.2.1.3.3 - Temperatur (PI + NUC)
1.3.6.1.4.1.2021.13.16.2.1.3.4 - Temperatur (PI + NUC)
1.3.6.1.4.1.2021.13.16.2.1.3.5 - Temperatur (PI + NUC)
1.3.6.1.4.1.2021.13.16.2.1.3.6 - Temperatur (PI + NUC)//FAN (PI, aber nur wenn installiert)
1.3.6.1.4.1.2021.13.16.3.1.3.2// CPU Auslastung 1 Minute, 5 Minuten, 15 Minuten
1.3.6.1.4.1.2021.10.1.3.1 - C1
1.3.6.1.4.1.2021.10.1.3.2 - C5
1.3.6.1.4.1.2021.10.1.3.3 - C15//Netzwerk
1.3.6.1.2.1.2.2.1.10.3 - Net_In
1.3.6.1.2.1.2.2.1.16.3 - Net_Out//HDD, bei PI SD-Karte - Bootlaufwerk
1.3.6.1.2.1.25.2.3.1.5.36 - HDD
1.3.6.1.2.1.25.2.3.1.6.36 - HDD_Used
1.3.6.1.2.1.25.2.3.1.4.36 - HDD_Alloc//RAM
1.3.6.1.2.1.25.2.3.1.5.1 - RAM
1.3.6.1.2.1.25.2.3.1.6.1 - RAM_Used
1.3.6.1.2.1.25.2.3.1.4.1 - RAM_Alloc
1.3.6.1.2.1.25.2.3.1.6.6 - RAM_Buffer
1.3.6.1.2.1.25.2.3.1.6.7 - RAM_Cache
1.3.6.1.2.1.25.2.3.1.5.11 - RAM_Avail
1.3.6.1.2.1.25.2.3.1.5.8 - RAM_Shared//SWAP
1.3.6.1.2.1.25.2.3.1.5.10 - SWAP
1.3.6.1.2.1.25.2.3.1.6.10 - SWAP_Used
1.3.6.1.2.1.25.2.3.1.4.10 - SWAP_AllocDas Skript lässt sich aber auch flexibel anpassen. So können auch andere Daten ausgelesen, gespeichert und ausgewertet werden
VORARBEITEN - DIENST (SERVICE) SNMP:
+++SNMP unter Linux installieren und einrichten:+++
- System auf aktuellen Stand bringen.
sudo apt update sudo apt full-upgrade
danach ggfs. ein sudo reboot
- SNMP installieren.
sudo apt install snmp snmpd
- SNMP konfigurieren. Hier bitte mit meiner Konfiguration vergleichen und bei euch anpassen. Die Konfigurationsdatei findet ihr im Verzeichnis:
/etc/snmp
zum editieren z.B.
nano /etc/snmp/snmpd.conf
########################################################################### # # snmpd.conf # An example configuration file for configuring the Net-SNMP agent ('snmpd') # See snmpd.conf(5) man page for details # ########################################################################### # SECTION: System Information Setup # # syslocation: The [typically physical] location of the system. # Note that setting this value here means that when trying to # perform an snmp SET operation to the sysLocation.0 variable will make # the agent return the "notWritable" error code. IE, including # this token in the snmpd.conf file will disable write access to # the variable. # arguments: location_string sysLocation Sitting on the Dock of the Bay sysContact Me <me@example.org> # sysservices: The proper value for the sysServices object. # arguments: sysservices_number sysServices 72 ########################################################################### # SECTION: Agent Operating Mode # # This section defines how the agent will operate when it # is running. # master: Should the agent operate as a master agent or not. # Currently, the only supported master agent type for this token # is "agentx". # # arguments: (on|yes|agentx|all|off|no) master agentx # agentaddress: The IP address and port number that the agent will listen on. # By default the agent listens to any and all traffic from any # interface on the default SNMP port (161). This allows you to # specify which address, interface, transport type and port(s) that you # want the agent to listen on. Multiple definitions of this token # are concatenated together (using ':'s). # arguments: [transport:]port[@interface/address],... agentaddress udp:161 ########################################################################### # SECTION: Access Control Setup # # This section defines who is allowed to talk to your running # snmp agent. # Views # arguments viewname included [oid] # system + hrSystem groups only view systemonly included .1.3.6.1.2.1.1 view systemonly included .1.3.6.1.2.1.25.1 view systemonly included .1.3.6.1.4.1.8072.1.3.2 view systemonly included .1.3.6.1.2.1.2 view systemonly included .1.3.6.1.2.1.25.2.3.1 # rocommunity: a SNMPv1/SNMPv2c read-only access community name # arguments: community [default|hostname|network/bits] [oid | -V view] # Read-only access to everyone to the systemonly view rocommunity public default rocommunity6 public default # SNMPv3 doesn't use communities, but users with (optionally) an # authentication and encryption string. This user needs to be created # with what they can view with rouser/rwuser lines in this file. # # createUser username (MD5|SHA|SHA-512|SHA-384|SHA-256|SHA-224) authpassphrase [DES|AES] [privpassphrase] # e.g. # createuser authPrivUser SHA-512 myauthphrase AES myprivphrase # # This should be put into /var/lib/snmp/snmpd.conf # # rouser: a SNMPv3 read-only access username # arguments: username [noauth|auth|priv [OID | -V VIEW [CONTEXT]]] rouser authPrivUser authpriv -V systemonly # include a all *.conf files in a directory includeDir /etc/snmp/snmpd.conf.d
Danach ein
sudo reboot
oder
sudo systemctl restart snmpd
VORARBEITEN - JS-Adapter
Als zusätzliche NPM-Module muss ping und net-snmp eingetragen sein.
HINWEIS: Wenn mehr als 4 Geräte aktiv abgefragt werden, kann es notwendig werden die Option "Maximale setState-Abfragen pro Minute pro Skript zu erhöhen.
Um es vorab zu sagen. Ein reines Einkopieren und Starten vom Skript wird nur bedingt zum Erfolg führen. Ein wenig Anpassung kann nötig werden. Damit es einfacher wird, habe ich nach dem Skript ein paar Beispiele zu Konfiguration beigefügt. Noch ein Hinweis. Im Skript sind zur Verdeutlichung 4 Geräte konfiguriert.
//Version 1.0.1 - 28.09.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 //OS: Debian 11, Debian 12, UBUNTU 22.04.x LTS, UBUNTU 24.04.x LTS const ping = require('ping'); //Im Javascript-Adapter einzutragen (Zusätzliche NPM-Module) const snmp = require("net-snmp"); //Im Javascript-Adapter einzutragen (Zusätzliche NPM-Module) const sMainPath = '0_userdata.0.HardwareInfo.'; //Zentraler Datenpunkt zur Datenablage //Konfiguration der auszulesenden Geräte (Rechner: PI, NUC) - kann frei zusammengestellt werden //Jedes Gerät ist ein Wert im Array aDevice // ********************* KONFIGURATION BEGINN ********************* const CountDevice = 8; //Anzahl der Geräte let aDevice = new Array(CountDevice); //hier werden die Daten für jedes Gerät hinterlegt //Geräte definieren: Jedes Geräte besitzt 4 (vier) Informationen. Jede Information wird durch ein ":" (Doppelpunkt) getrennt //Info 1 = Bezeichnung: // Bei Drucker und Scanner muss dieses Wort mit in der Bezeichnung stehen - z.B. Drucker_HP150nw oder Scanner_DS-940DW //Info 2 = IP-Adresse //Info 3 = (Array) oID's (SNMP) - ACHTUNG: ungültige oder nicht vorhandene oIDs sorgen dafür, dass (gar) keine Daten geliefert werden //Info 4 = (Array) (zu Info 3 gehöriger Datenpunkt) //ACHTUNG: die Arrays von 3 und 4 müssen gleich groß sein //Die Nummerierung beginnt in einem Array bei 0! aDevice[0] = 'Rechenkraft:192.168.10.3:1.3.6.1.4.1.2021.13.16.2.1.3.1,1.3.6.1.4.1.2021.13.16.3.1.3.2,1.3.6.1.4.1.2021.10.1.3.1,1.3.6.1.4.1.2021.10.1.3.2,1.3.6.1.4.1.2021.10.1.3.3,1.3.6.1.2.1.2.2.1.10.3,1.3.6.1.2.1.2.2.1.16.3,1.3.6.1.2.1.25.2.3.1.5.36,1.3.6.1.2.1.25.2.3.1.6.36,1.3.6.1.2.1.25.2.3.1.4.36,1.3.6.1.2.1.25.2.3.1.5.1,1.3.6.1.2.1.25.2.3.1.6.1,1.3.6.1.2.1.25.2.3.1.4.1,1.3.6.1.2.1.25.2.3.1.6.6,1.3.6.1.2.1.25.2.3.1.6.7,1.3.6.1.2.1.25.2.3.1.5.11,1.3.6.1.2.1.25.2.3.1.5.8,1.3.6.1.2.1.25.2.3.1.5.10,1.3.6.1.2.1.25.2.3.1.6.10,1.3.6.1.2.1.25.2.3.1.4.10:"Temperatur,FAN,C1,C5,C15,Net_In,Net_Out,HDD,HDD_Used,HDD_Alloc,RAM,RAM_Used,RAM_Alloc,RAM_Buffer,RAM_Cache,RAM_Avail,RAM_Shared,SWAP,SWAP_Used,SWAP_Alloc"'; aDevice[1] = 'DashBoard:192.168.10.105:1.3.6.1.4.1.2021.13.16.2.1.3.1,1.3.6.1.4.1.2021.10.1.3.1,1.3.6.1.4.1.2021.10.1.3.2,1.3.6.1.4.1.2021.10.1.3.3,1.3.6.1.2.1.2.2.1.10.3,1.3.6.1.2.1.2.2.1.16.3,1.3.6.1.2.1.25.2.3.1.5.36,1.3.6.1.2.1.25.2.3.1.6.36,1.3.6.1.2.1.25.2.3.1.4.36,1.3.6.1.2.1.25.2.3.1.5.1,1.3.6.1.2.1.25.2.3.1.6.1,1.3.6.1.2.1.25.2.3.1.4.1,1.3.6.1.2.1.25.2.3.1.6.6,1.3.6.1.2.1.25.2.3.1.6.7,1.3.6.1.2.1.25.2.3.1.5.11,1.3.6.1.2.1.25.2.3.1.5.8,1.3.6.1.2.1.25.2.3.1.5.10,1.3.6.1.2.1.25.2.3.1.6.10,1.3.6.1.2.1.25.2.3.1.4.10:"Temperatur,C1,C5,C15,Net_In,Net_Out,HDD,HDD_Used,HDD_Alloc,RAM,RAM_Used,RAM_Alloc,RAM_Buffer,RAM_Cache,RAM_Avail,RAM_Shared,SWAP,SWAP_Used,SWAP_Alloc"'; aDevice[2] = 'OMVNas:192.168.10.5:1.3.6.1.4.1.2021.13.16.2.1.3.1,1.3.6.1.4.1.2021.13.16.3.1.3.2,1.3.6.1.4.1.2021.10.1.3.1,1.3.6.1.4.1.2021.10.1.3.2,1.3.6.1.4.1.2021.10.1.3.3,1.3.6.1.2.1.2.2.1.10.2,1.3.6.1.2.1.2.2.1.16.2,1.3.6.1.2.1.25.2.3.1.5.36,1.3.6.1.2.1.25.2.3.1.6.36,1.3.6.1.2.1.25.2.3.1.4.36,1.3.6.1.2.1.25.2.3.1.5.1,1.3.6.1.2.1.25.2.3.1.6.1,1.3.6.1.2.1.25.2.3.1.4.1,1.3.6.1.2.1.25.2.3.1.6.6,1.3.6.1.2.1.25.2.3.1.6.7,1.3.6.1.2.1.25.2.3.1.5.11,1.3.6.1.2.1.25.2.3.1.5.8,1.3.6.1.2.1.25.2.3.1.5.10,1.3.6.1.2.1.25.2.3.1.6.10,1.3.6.1.2.1.25.2.3.1.4.10,1.3.6.1.2.1.25.2.3.1.5.72,1.3.6.1.2.1.25.2.3.1.6.72,1.3.6.1.2.1.25.2.3.1.4.72,1.3.6.1.2.1.25.2.3.1.3.72,1.3.6.1.2.1.25.2.3.1.5.56,1.3.6.1.2.1.25.2.3.1.6.56,1.3.6.1.2.1.25.2.3.1.4.56,1.3.6.1.2.1.25.2.3.1.3.56,1.3.6.1.2.1.25.2.3.1.5.57,1.3.6.1.2.1.25.2.3.1.6.57,1.3.6.1.2.1.25.2.3.1.4.57,1.3.6.1.2.1.25.2.3.1.3.57:"Temperatur,FAN,C1,C5,C15,Net_In,Net_Out,HDD,HDD_Used,HDD_Alloc,RAM,RAM_Used,RAM_Alloc,RAM_Buffer,RAM_Cache,RAM_Avail,RAM_Shared,SWAP,SWAP_Used,SWAP_Alloc,SDA,SDA_Used,SDA_Alloc,SDA_Descr,SDB,SDB_Used,SDB_Alloc,SDB_Descr,SDC,SDC_Used,SDC_Alloc,SDC_Descr"'; aDevice[3] = 'Server:192.168.10.99:1.3.6.1.4.1.2021.13.16.2.1.3.2,1.3.6.1.4.1.2021.10.1.3.1,1.3.6.1.4.1.2021.10.1.3.2,1.3.6.1.4.1.2021.10.1.3.3,1.3.6.1.2.1.2.2.1.10.3,1.3.6.1.2.1.2.2.1.16.3,1.3.6.1.2.1.25.2.3.1.5.36,1.3.6.1.2.1.25.2.3.1.6.36,1.3.6.1.2.1.25.2.3.1.4.36,1.3.6.1.2.1.25.2.3.1.5.1,1.3.6.1.2.1.25.2.3.1.6.1,1.3.6.1.2.1.25.2.3.1.4.1,1.3.6.1.2.1.25.2.3.1.6.6,1.3.6.1.2.1.25.2.3.1.6.7,1.3.6.1.2.1.25.2.3.1.5.11,1.3.6.1.2.1.25.2.3.1.5.8,1.3.6.1.2.1.25.2.3.1.5.10,1.3.6.1.2.1.25.2.3.1.6.10,1.3.6.1.2.1.25.2.3.1.4.10:"Temperatur,C1,C5,C15,Net_In,Net_Out,HDD,HDD_Used,HDD_Alloc,RAM,RAM_Used,RAM_Alloc,RAM_Buffer,RAM_Cache,RAM_Avail,RAM_Shared,SWAP,SWAP_Used,SWAP_Alloc"'; aDevice[4] = 'Boinc:192.168.10.2:1.3.6.1.4.1.2021.13.16.2.1.3.1,1.3.6.1.4.1.2021.13.16.3.1.3.2,1.3.6.1.4.1.2021.10.1.3.1,1.3.6.1.4.1.2021.10.1.3.2,1.3.6.1.4.1.2021.10.1.3.3,1.3.6.1.2.1.2.2.1.10.3,1.3.6.1.2.1.2.2.1.16.3,1.3.6.1.2.1.25.2.3.1.5.36,1.3.6.1.2.1.25.2.3.1.6.36,1.3.6.1.2.1.25.2.3.1.4.36,1.3.6.1.2.1.25.2.3.1.5.1,1.3.6.1.2.1.25.2.3.1.6.1,1.3.6.1.2.1.25.2.3.1.4.1,1.3.6.1.2.1.25.2.3.1.6.6,1.3.6.1.2.1.25.2.3.1.6.7,1.3.6.1.2.1.25.2.3.1.5.11,1.3.6.1.2.1.25.2.3.1.5.8,1.3.6.1.2.1.25.2.3.1.5.10,1.3.6.1.2.1.25.2.3.1.6.10,1.3.6.1.2.1.25.2.3.1.4.10:"Temperatur,FAN,C1,C5,C15,Net_In,Net_Out,HDD,HDD_Used,HDD_Alloc,RAM,RAM_Used,RAM_Alloc,RAM_Buffer,RAM_Cache,RAM_Avail,RAM_Shared,SWAP,SWAP_Used,SWAP_Alloc"'; aDevice[5] = 'MyCloud2ExUltra:192.168.10.7:1.3.6.1.4.1.5127.1.1.1.8.1.7.0,1.3.6.1.4.1.5127.1.1.1.8.1.8.0,1.3.6.1.4.1.2021.10.1.3.1,1.3.6.1.4.1.2021.10.1.3.2,1.3.6.1.4.1.2021.10.1.3.3,1.3.6.1.2.1.2.2.1.10.2,1.3.6.1.2.1.2.2.1.16.2,1.3.6.1.2.1.25.2.3.1.5.57,1.3.6.1.2.1.25.2.3.1.6.57,1.3.6.1.2.1.25.2.3.1.4.57,1.3.6.1.2.1.25.2.3.1.3.57,1.3.6.1.2.1.25.2.3.1.5.58,1.3.6.1.2.1.25.2.3.1.6.58,1.3.6.1.2.1.25.2.3.1.4.58,1.3.6.1.2.1.25.2.3.1.3.58,1.3.6.1.2.1.25.2.3.1.5.1,1.3.6.1.2.1.25.2.3.1.6.1,1.3.6.1.2.1.25.2.3.1.4.1,1.3.6.1.2.1.25.2.3.1.6.6,1.3.6.1.2.1.25.2.3.1.6.7,1.3.6.1.2.1.25.2.3.1.6.8,1.3.6.1.2.1.25.2.3.1.5.10,1.3.6.1.2.1.25.2.3.1.6.10,1.3.6.1.2.1.25.2.3.1.4.10:"Temperatur_String,FAN_String,C1,C5,C15,Net_In,Net_Out,HDD,HDD_Used,HDD_Alloc,HDD_Descr,SDA,SDA_Used,SDA_Alloc,SDA_Descr,RAM,RAM_Used,RAM_Alloc,RAM_Buffer,RAM_Cache,RAM_Shared,SWAP,SWAP_Used,SWAP_Alloc"'; aDevice[6] = 'Drucker_HP150nw:192.168.10.19:1.3.6.1.2.1.43.11.1.1.9.1.1,1.3.6.1.2.1.43.11.1.1.9.1.2,1.3.6.1.2.1.43.11.1.1.9.1.3,1.3.6.1.2.1.43.11.1.1.9.1.4,1.3.6.1.2.1.43.11.1.1.9.1.5,1.3.6.1.2.1.43.11.1.1.9.1.6,1.3.6.1.2.1.43.10.2.1.4.1.1,1.3.6.1.2.1.43.11.1.1.9.1.7,1.3.6.1.2.1.43.11.1.1.9.1.8,1.3.6.1.2.1.43.11.1.1.9.1.9,1.3.6.1.2.1.43.11.1.1.9.1.10,1.3.6.1.2.1.43.5.1.1.17.1,1.3.6.1.4.1.11.2.3.9.4.2.1.4.1.2.6.0,1.3.6.1.4.1.11.2.3.9.4.2.1.4.1.2.7.0:"Cyan_Stand,Magenta_Stand,Yellow_Stand,Black_Stand,Bildeinheit_Stand,Transfereinheit_Stand,Druckvorgänge,Fuser_Stand,Tray_Stand,FrictionPad_Stand,WasteToner_Stand,Seriennummer,DruckvorgängeSW,DruckvorgängeColor"'; aDevice[7] = 'Scanner_DS-940DW:192.168.10.18:1.3.6.1.4.1.2435.2.3.9.4.2.1.5.5.54.2.2.1.3.3,1.3.6.1.4.1.2435.2.3.9.4.2.1.5.5.54.2.2.1.2.3,1.3.6.1.2.1.43.5.1.1.17.1:"Seiten,Fehler,Seriennummer"'; // ********************* KONFIGURATION ENDE ********************* // ********************* AB HIER NICHTS MEHR ÄNDERN ********************* //Anlage der Datenpunkte und Vorbereitung der Netzwerk-Variablen, basierend auf const aDevice let db_IN_NEW = new Array(CountDevice); let db_OUT_NEW = new Array(CountDevice); let db_IN_OLD = new Array(CountDevice); let db_OUT_OLD = new Array(CountDevice); let db_IN_DIFF = new Array(CountDevice); let db_OUT_DIFF = new Array(CountDevice); let db_IN_SUM = new Array(CountDevice); let db_OUT_SUM = new Array(CountDevice); function Initalisierung(){ for (let i = 0; i <=CountDevice-1; i++) { let device_data = aDevice[i].split(':'); //Hauptordner createState(sMainPath+device_data[0], '', {name: device_data[1],read: true, write: true}); if (device_data[0].indexOf('Drucker') == -1 && device_data[0].indexOf('Scanner') == -1) { //SNMP DATA createState(sMainPath+device_data[0]+'.SNMP_Data.Temperatur', 0, {name: 'Temperatur' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.Temperatur_String', '', {name: 'Temperatur_String' ,type: 'string', read: true, write: true}); //Platzhalter - nicht immer existent - speziell WD Geräte createState(sMainPath+device_data[0]+'.SNMP_Data.C1', '', {name: 'CPU 1' ,type: 'string', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.C5', '', {name: 'CPU 5' ,type: 'string', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.C15', '', {name: 'CPU 15' ,type: 'string', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.FAN', 0, {name: 'FAN' ,type: 'number', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.SNMP_Data.FAN_String', '', {name: 'FAN_String' ,type: 'string', read: true, write: true}); //Platzhalter - nicht immer existent - speziell WD Geräte createState(sMainPath+device_data[0]+'.SNMP_Data.Net_In', 0, {name: 'Net_In' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.Net_Out', 0, {name: 'Net_Out' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.RAM', 0, {name: 'RAM' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.RAM_Used', 0, {name: 'RAM_Used' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.RAM_Alloc', 0, {name: 'RAM_Alloc' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.RAM_Buffer', 0, {name: 'RAM_Buffer' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.RAM_Cache', 0, {name: 'RAM_Cache' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.RAM_Avail', 0, {name: 'RAM_Avail' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.RAM_Shared', 0, {name: 'RAM_Shared' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.HDD', 0, {name: 'HDD' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.HDD_Used', 0, {name: 'HDD_Used' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.HDD_Alloc', 0, {name: 'HDD_Alloc' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.HDD_Descr', '', {name: 'Bezeichnung UUID' ,type: 'string', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.SDA', 0, {name: 'SDA' ,type: 'number', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.SNMP_Data.SDA_Used', 0, {name: 'SDA_Used' ,type: 'number', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.SNMP_Data.SDA_Alloc', 0, {name: 'SDA_Alloc' ,type: 'number', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.SNMP_Data.SDA_Descr', '', {name: 'Bezeichnung UUID' ,type: 'string', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.SNMP_Data.SDB', 0, {name: 'SDB' ,type: 'number', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.SNMP_Data.SDB_Used', 0, {name: 'SDB_Used' ,type: 'number', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.SNMP_Data.SDB_Alloc', 0, {name: 'SDB_Alloc' ,type: 'number', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.SNMP_Data.SDB_Descr', '', {name: 'Bezeichnung UUID' ,type: 'string', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.SNMP_Data.SDC', 0, {name: 'SDC' ,type: 'number', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.SNMP_Data.SDC_Used', 0, {name: 'SDC_Used' ,type: 'number', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.SNMP_Data.SDC_Alloc', 0, {name: 'SDC_Alloc' ,type: 'number', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.SNMP_Data.SDC_Descr', '', {name: 'Bezeichnung UUID' ,type: 'string', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.SNMP_Data.SWAP', 0, {name: 'SWAP' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.SWAP_Used', 0, {name: 'SWAP_Used' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.SWAP_Alloc', 0, {name: 'SWAP_Alloc' ,type: 'number', read: true, write: true}); } else if (device_data[0].indexOf('Drucker') >= 0) { //SNMP DATA - Drucker createState(sMainPath+device_data[0]+'.SNMP_Data.Cyan_Stand', 0, {name: 'Cyan_Stand' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.Magenta_Stand', 0, {name: 'Magenta_Stand' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.Yellow_Stand', 0, {name: 'Yellow_Stand' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.Black_Stand', 0, {name: 'Black_Stand' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.Bildeinheit_Stand', 0, {name: 'Bildeinheit_Stand' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.Transfereinheit_Stand', 0, {name: 'Transfereinheit_Stand' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.Druckvorgänge', 0, {name: 'Druckvorgänge' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.DruckvorgängeSW', 0, {name: 'DruckvorgängeSW' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.DruckvorgängeColor', 0, {name: 'DruckvorgängeColor' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.Tray_Stand', 0, {name: 'Tray_Stand' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.FrictionPad_Stand', 0, {name: 'FrictionPad_Stand' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.WasteToner_Stand', 0, {name: 'WasteToner_Stand' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.Fuser_Stand', 0, {name: 'Fuser_Stand' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.Seriennummer', '', {name: 'Seriennummer' ,type: 'string', read: true, write: true}); } else { //SNMP DATA - Scanner createState(sMainPath+device_data[0]+'.SNMP_Data.Seiten', 0, {name: 'Seiten' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.SeitenSW', 0, {name: 'SeitenSW' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.SeitenColor', 0, {name: 'SeitenColor' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.Fehler', 0, {name: 'Fehler' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.SNMP_Data.Seriennummer', '', {name: 'Seriennummer' ,type: 'string', read: true, write: true}); } if (device_data[0].indexOf('Drucker') == -1 && device_data[0].indexOf('Scanner') == -1) { //DETAILS createState(sMainPath+device_data[0]+'.CPU.Temperatur', 0, {name: 'Temperatur' ,type: 'number', read: true, write: true, unit: '°C'}); createState(sMainPath+device_data[0]+'.CPU.M1', 0, {name: '1 Minute' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.CPU.M5', 0, {name: '5 Minuten' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.CPU.M15', 0, {name: '15 Minuten' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.CPU.FAN', 0, {name: 'Lüfter' ,type: 'number', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.RAM.Total', 0, {name: 'Total' ,type: 'number', read: true, write: true, unit: 'Byte'}); createState(sMainPath+device_data[0]+'.RAM.Used', 0, {name: 'Used' ,type: 'number', read: true, write: true, unit: 'Byte'}); createState(sMainPath+device_data[0]+'.RAM.UsedProzent', 0, {name: 'UsedProzent' ,type: 'number', read: true, write: true, unit: '%'}); createState(sMainPath+device_data[0]+'.RAM.Puffer', 0, {name: 'Puffer' ,type: 'number', read: true, write: true, unit: 'Byte'}); createState(sMainPath+device_data[0]+'.RAM.Avail', 0, {name: 'Avail' ,type: 'number', read: true, write: true, unit: 'Byte'}); createState(sMainPath+device_data[0]+'.SWAP.Total', 0, {name: 'Total' ,type: 'number', read: true, write: true, unit: 'Byte'}); createState(sMainPath+device_data[0]+'.SWAP.Used', 0, {name: 'Used' ,type: 'number', read: true, write: true, unit: 'Byte'}); createState(sMainPath+device_data[0]+'.SWAP.UsedProzent', 0, {name: 'UsedProzent' ,type: 'number', read: true, write: true, unit: '%'}); createState(sMainPath+device_data[0]+'.SWAP.Free', 0, {name: 'Free' ,type: 'number', read: true, write: true, unit: 'Byte'}); createState(sMainPath+device_data[0]+'.HDD.0.Total', 0, {name: 'Total' ,type: 'number', read: true, write: true, unit: 'Byte'}); createState(sMainPath+device_data[0]+'.HDD.0.Used', 0, {name: 'Used' ,type: 'number', read: true, write: true, unit: 'Byte'}); createState(sMainPath+device_data[0]+'.HDD.0.UsedProzent', 0, {name: 'UsedProzent' ,type: 'number', read: true, write: true, unit: '%'}); createState(sMainPath+device_data[0]+'.HDD.0.Free', 0, {name: 'Free' ,type: 'number', read: true, write: true, unit: 'Byte'}); createState(sMainPath+device_data[0]+'.HDD.0.UUID', '', {name: 'UUID' ,type: 'string', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.HDD.1.Total', 0, {name: 'Total' ,type: 'number', read: true, write: true, unit: 'Byte'}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.HDD.1.Used', 0, {name: 'Used' ,type: 'number', read: true, write: true, unit: 'Byte'}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.HDD.1.UsedProzent', 0, {name: 'UsedProzent' ,type: 'number', read: true, write: true, unit: '%'}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.HDD.1.Free', 0, {name: 'Free' ,type: 'number', read: true, write: true, unit: 'Byte'}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.HDD.1.UUID', '', {name: 'UUID' ,type: 'string', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.HDD.2.Total', 0, {name: 'Total' ,type: 'number', read: true, write: true, unit: 'Byte'}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.HDD.2.Used', 0, {name: 'Used' ,type: 'number', read: true, write: true, unit: 'Byte'}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.HDD.2.UsedProzent', 0, {name: 'UsedProzent' ,type: 'number', read: true, write: true, unit: '%'}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.HDD.2.Free', 0, {name: 'Free' ,type: 'number', read: true, write: true, unit: 'Byte'}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.HDD.2.UUID', '', {name: 'UUID' ,type: 'string', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.HDD.3.Total', 0, {name: 'Total' ,type: 'number', read: true, write: true, unit: 'Byte'}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.HDD.3.Used', 0, {name: 'Used' ,type: 'number', read: true, write: true, unit: 'Byte'}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.HDD.3.UsedProzent', 0, {name: 'UsedProzent' ,type: 'number', read: true, write: true, unit: '%'}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.HDD.3.Free', 0, {name: 'Free' ,type: 'number', read: true, write: true, unit: 'Byte'}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.HDD.3.UUID', '', {name: 'UUID' ,type: 'string', read: true, write: true}); //Platzhalter - nicht immer existent createState(sMainPath+device_data[0]+'.Network.In_Summe', 0, {name: 'Summe IN' ,type: 'number', read: true, write: true, unit: 'Byte'}); createState(sMainPath+device_data[0]+'.Network.Out_Summe', 0, {name: 'Summe OUT' ,type: 'number', read: true, write: true, unit: 'Byte'}); createState(sMainPath+device_data[0]+'.Network.In_Speed', 0, {name: 'Speed IN' ,type: 'number', read: true, write: true, unit: 'Byte/s'}); createState(sMainPath+device_data[0]+'.Network.Out_Speed', 0, {name: 'Speed OUT' ,type: 'number', read: true, write: true, unit: 'Byte/s'}); createState(sMainPath+device_data[0]+'.Network.Net_Speed', 0, {name: 'Speed SUMME' ,type: 'number', read: true, write: true, unit: 'Byte/s'}); } else if (device_data[0].indexOf('Drucker') >= 0) { //DETAILS - Drucker createState(sMainPath+device_data[0]+'.Cyan', 0, {name: 'Cyan' ,type: 'number', read: true, write: true, unit: '%'}); createState(sMainPath+device_data[0]+'.Magenta', 0, {name: 'Magenta' ,type: 'number', read: true, write: true, unit: '%'}); createState(sMainPath+device_data[0]+'.Yellow', 0, {name: 'Yellow' ,type: 'number', read: true, write: true, unit: '%'}); createState(sMainPath+device_data[0]+'.Black', 0, {name: 'Black' ,type: 'number', read: true, write: true, unit: '%'}); createState(sMainPath+device_data[0]+'.Bildeinheit', 0, {name: 'Bildeinheit' ,type: 'number', read: true, write: true, unit: '%'}); createState(sMainPath+device_data[0]+'.Transfereinheit', 0, {name: 'Transfereinheit' ,type: 'number', read: true, write: true, unit: '%'}); createState(sMainPath+device_data[0]+'.Fixiereinheit', 0, {name: 'Fixiereinheit' ,type: 'number', read: true, write: true, unit: '%'}); createState(sMainPath+device_data[0]+'.Resttonerbox', 0, {name: 'Resttonerbox' ,type: 'number', read: true, write: true, unit: '%'}); createState(sMainPath+device_data[0]+'.Einzugsrolle', 0, {name: 'Einzugsrolle' ,type: 'number', read: true, write: true, unit: '%'}); createState(sMainPath+device_data[0]+'.Separationpads', 0, {name: 'Separationpads' ,type: 'number', read: true, write: true, unit: '%'}); createState(sMainPath+device_data[0]+'.Pages', 0, {name: 'Seiten' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.Pages_SW', 0, {name: 'Seiten_S/W' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.Pages_Color', 0, {name: 'Seiten_Farbe' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.Seriennummer', '', {name: 'Seriennummer' ,type: 'string', read: true, write: true}); } else { //DETAILS - Scanner createState(sMainPath+device_data[0]+'.Pages', 0, {name: 'Seiten' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.Pages_SW', 0, {name: 'Seiten_S/W' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.Pages_Color', 0, {name: 'Seiten_Farbe' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.Fehler', 0, {name: 'Fehler' ,type: 'number', read: true, write: true}); createState(sMainPath+device_data[0]+'.Seriennummer', '', {name: 'Seriennummer' ,type: 'string', read: true, write: true}); } //Netzwerk-Variablen db_IN_NEW[i] = 0; db_OUT_NEW[i] = 0; db_IN_OLD[i] = 0; db_OUT_OLD[i] = 0; db_IN_DIFF[i] = 0; db_OUT_DIFF[i] = 0; db_IN_SUM[i] = 0; db_OUT_SUM[i] = 0; } } //START Initalisierung(); function fRundenM(num) { var m = Number((Math.abs(num) * 100).toPrecision(15)); return Math.round(m) / 100 * Math.sign(num); } async function pingHost(host) { try { const res = await ping.promise.probe(host); return JSON.parse(JSON.stringify(res)).alive; } catch (error) { console.error(error); } } function Datenfilter(Typ=0, Wert) { if(Typ == 4) { var a= Array.from(new Uint8Array(Wert)); return String.fromCharCode(...a); } else { return Wert; } } async function SNMPQuery(sDP='', sIP='', oids, dps) { let oid_data = oids.split(','); let oidlist = new Array(oid_data.length); for (let i = 0; i <= oid_data.length-1; i++) { oidlist[i] = oid_data[i]; } dps = dps.substr(0, dps.length - 1); dps = dps.substring(1); let dp_data = dps.split(','); let dplist = new Array(dp_data.length); for (let i = 0; i <= dp_data.length-1; i++) { dplist[i] = dp_data[i]; } var session = snmp.createSession (sIP, "public"); session.get (oidlist, function (error, varbinds) { if (!error) { for (var i = 0; i < varbinds.length; i++) { if (snmp.isVarbindError (varbinds[i])) { console.error (snmp.varbindError (varbinds[i])); } else { setState(sDP+dplist[i], Datenfilter(varbinds[i].type,varbinds[i].value), true); } } } session.close (); }); } schedule('*/10 * * * * *', async function Datenabruf() { for (let i = 0; i <= aDevice.length-1; i++) { let device_data = aDevice[i].split(':'); if( await pingHost(device_data[1]) == true) { await SNMPQuery(sMainPath+device_data[0]+'.SNMP_Data.', device_data[1], device_data[2], device_data[3]); await sleep(500); if (device_data[0].indexOf('Drucker') == -1 && device_data[0].indexOf('Scanner') == -1) { await Netzwerk(i, sMainPath+device_data[0], true); await SWAP(sMainPath+device_data[0],true); await RAM(sMainPath+device_data[0],true); await HDD(sMainPath+device_data[0],'HDD',0,true); await HDD(sMainPath+device_data[0],'SDA',1,true); await HDD(sMainPath+device_data[0],'SDB',2,true); await HDD(sMainPath+device_data[0],'SDC',3,true); await BOARD(sMainPath+device_data[0],true); } else if (device_data[0].indexOf('Drucker') >= 0) { //Drucker await Drucker(sMainPath+device_data[0]); } else { //Scanner await Scanner(sMainPath+device_data[0]); } } else { await sleep(500); if (device_data[0].indexOf('Drucker') == -1 && device_data[0].indexOf('Scanner') == -1) { await Netzwerk(i, sMainPath+device_data[0], false); await SWAP(sMainPath+device_data[0],false); await RAM(sMainPath+device_data[0],false); await HDD(sMainPath+device_data[0],'HDD',0,false); await HDD(sMainPath+device_data[0],'SDA',1,false); await HDD(sMainPath+device_data[0],'SDB',2,false); await HDD(sMainPath+device_data[0],'SDC',3,false); await BOARD(sMainPath+device_data[0],false); } } } }); //************************************************ AB HIER DIE AUSWERTUNG DER SNMP DATEN in BRAUCHBARE DATEN */ async function Netzwerk(ID, dpDevice, bOnline=true) { if(bOnline == true) { db_IN_OLD[ID] = db_IN_NEW[ID]; db_OUT_OLD[ID] = db_OUT_NEW[ID]; db_IN_NEW[ID] = getState(dpDevice+'.SNMP_Data.Net_In').val*1; db_OUT_NEW[ID] = getState(dpDevice+'.SNMP_Data.Net_Out').val*1; db_IN_DIFF[ID] = db_IN_NEW[ID]-db_IN_OLD[ID]; if (db_IN_DIFF[ID] < 0) { db_IN_DIFF[ID]=(4294967295-db_IN_OLD[ID])+db_IN_NEW[ID]; } db_IN_SUM[ID]=db_IN_SUM[ID]+db_IN_DIFF[ID]; db_OUT_DIFF[ID]=db_OUT_NEW[ID]-db_OUT_OLD[ID]; if (db_OUT_DIFF[ID] < 0) { db_OUT_DIFF[ID]=(4294967295-db_OUT_OLD[ID])+db_OUT_NEW[ID]; } db_OUT_SUM[ID]=db_OUT_SUM[ID]+db_OUT_DIFF[ID]; setState(dpDevice+'.Network.In_Summe', db_IN_SUM[ID], true); setState(dpDevice+'.Network.Out_Summe', db_OUT_SUM[ID], true); setState(dpDevice+'.Network.In_Speed', db_IN_DIFF[ID]/10, true); //Division mit 10, weil Abruf aller 10 Sekunden - brauchbares Ergebnis setState(dpDevice+'.Network.Out_Speed', db_OUT_DIFF[ID]/10, true); //Division mit 10, weil Abruf aller 10 Sekunden - brauchbares Ergebnis setState(dpDevice+'.Network.Net_Speed', (db_OUT_DIFF[ID] + db_IN_DIFF[ID])/10, true); //Division mit 10, weil Abruf aller 10 Sekunden - brauchbares Ergebnis } else { db_IN_NEW[ID] = 0; db_OUT_NEW[ID] = 0; db_IN_OLD[ID] = 0; db_OUT_OLD[ID] = 0; db_IN_DIFF[ID] = 0; db_OUT_DIFF[ID] = 0; db_IN_SUM[ID] = 0; db_OUT_SUM[ID] = 0; setState(dpDevice+'.Network.In_Summe', 0, true); setState(dpDevice+'.Network.Out_Summe', 0, true); setState(dpDevice+'.Network.In_Speed', 0, true); setState(dpDevice+'.Network.Out_Speed', 0, true); setState(dpDevice+'.Network.Net_Speed', 0, true); setState(dpDevice+'.SNMP_Data.Net_In', 0, true); setState(dpDevice+'.SNMP_Data.Net_Out', 0, true); } } async function BOARD(dpDevice, bOnline=true) { if(bOnline == true) { if(getState(dpDevice+'.SNMP_Data.Temperatur').val == 0 && getState(dpDevice+'.SNMP_Data.Temperatur_String').val != '') { // 1. Ausnahme: WD - MyCloud let wdTemperatur = getState(dpDevice+'.SNMP_Data.Temperatur_String').val; let Position = wdTemperatur.indexOf('Centigrade:'); wdTemperatur = wdTemperatur.substring(Position+11,13); setState(dpDevice+'.CPU.Temperatur', Number(wdTemperatur), true); } else { //Normalfall setState(dpDevice+'.CPU.Temperatur', fRundenM(getState(dpDevice+'.SNMP_Data.Temperatur').val/1000), true); } setState(dpDevice+'.CPU.M1', Number(getState(dpDevice+'.SNMP_Data.C1').val), true); setState(dpDevice+'.CPU.M5', Number(getState(dpDevice+'.SNMP_Data.C5').val), true); setState(dpDevice+'.CPU.M15', Number(getState(dpDevice+'.SNMP_Data.C15').val), true); if(getState(dpDevice+'.SNMP_Data.FAN').val == 0 && getState(dpDevice+'.SNMP_Data.FAN_String').val != '') { // 1. Ausnahme: WD - MyCloud let wdFAN = getState(dpDevice+'.SNMP_Data.FAN_String').val; let Position = wdFAN.indexOf('stop'); if (Position > 0) { wdFAN = 0; } else { wdFAN = 5000; //Pseudowert nehmen, da es keine andere Daten gibt } setState(dpDevice+'.CPU.FAN', wdFAN, true); } else { //Normalfall setState(dpDevice+'.CPU.FAN', getState(dpDevice+'.SNMP_Data.FAN').val, true); } } else { setState(dpDevice+'.CPU.Temperatur', 0, true); setState(dpDevice+'.CPU.M1', 0, true); setState(dpDevice+'.CPU.M5', 0, true); setState(dpDevice+'.CPU.M15', 0, true); setState(dpDevice+'.CPU.FAN', 0, true); } } async function SWAP(dpDevice, bOnline=true) { if(bOnline == true) { let cAlloc = getState(dpDevice+'.SNMP_Data.SWAP_Alloc').val; let cTotal = getState(dpDevice+'.SNMP_Data.SWAP').val; let cUsed = getState(dpDevice+'.SNMP_Data.SWAP_Used').val; setState(dpDevice+'.SWAP.Total', cTotal*cAlloc, true); setState(dpDevice+'.SWAP.Used', cUsed*cAlloc, true); setState(dpDevice+'.SWAP.Free', (cTotal-cUsed)*cAlloc, true); setState(dpDevice+'.SWAP.UsedProzent', fRundenM(100-((cTotal-cUsed)/cTotal)*100), true); } else { setState(dpDevice+'.SWAP.Total', 0, true); setState(dpDevice+'.SWAP.Used', 0, true); setState(dpDevice+'.SWAP.Free', 0, true); setState(dpDevice+'.SWAP.UsedProzent', 0, true); } } async function RAM(dpDevice, bOnline=true) { if(bOnline == true) { let cAlloc = getState(dpDevice+'.SNMP_Data.RAM_Alloc').val; let cTotal = getState(dpDevice+'.SNMP_Data.RAM').val; let cAvail = getState(dpDevice+'.SNMP_Data.RAM_Avail').val; let cBuffer = getState(dpDevice+'.SNMP_Data.RAM_Buffer').val; let cCache = getState(dpDevice+'.SNMP_Data.RAM_Cache').val; setState(dpDevice+'.RAM.Total', cTotal*cAlloc, true); setState(dpDevice+'.RAM.Used', (cTotal-cAvail)*cAlloc, true); setState(dpDevice+'.RAM.Puffer', (cBuffer+cCache)*cAlloc, true); setState(dpDevice+'.RAM.Avail', cAvail*cAlloc, true); setState(dpDevice+'.RAM.UsedProzent', fRundenM((cTotal-cAvail)/cTotal*100), true); } else { setState(dpDevice+'.RAM.Total', 0, true); setState(dpDevice+'.RAM.Used', 0, true); setState(dpDevice+'.RAM.Puffer', 0, true); setState(dpDevice+'.RAM.Avail', 0, true); setState(dpDevice+'.RAM.UsedProzent', 0, true); } } async function HDD(dpDevice, sTyp='', dID=0, bOnline=true) { var vTotal=0, vUsed=0, vFree=0, vUsedProzent=0, vDesc=''; if(bOnline == true) { let cAlloc = getState(dpDevice+'.SNMP_Data.'+sTyp+'_Alloc').val; let cTotal = getState(dpDevice+'.SNMP_Data.'+sTyp).val; let cUsed = getState(dpDevice+'.SNMP_Data.'+sTyp+'_Used').val; if(cTotal != 0) { vTotal = cTotal*cAlloc; vUsed = cUsed*cAlloc; vFree = (cTotal-cUsed)*cAlloc; vUsedProzent = fRundenM(100-((cTotal-cUsed)/cTotal)*100); } vDesc = getState(dpDevice+'.SNMP_Data.'+sTyp+'_Descr').val.replace('/srv/dev-disk-by-uuid-','').replace('/mnt/HD/',''); } setState(dpDevice+'.HDD.'+dID+'.Total', vTotal, true); setState(dpDevice+'.HDD.'+dID+'.Used', vUsed, true); setState(dpDevice+'.HDD.'+dID+'.Free', vFree, true); setState(dpDevice+'.HDD.'+dID+'.UsedProzent', vUsedProzent, true); setState(dpDevice+'.HDD.'+dID+'.UUID', vDesc, true); } async function Drucker(dpDevice) { setState(dpDevice+'.Cyan', getState(dpDevice+'.SNMP_Data.Cyan_Stand').val, true); setState(dpDevice+'.Magenta', getState(dpDevice+'.SNMP_Data.Magenta_Stand').val, true); setState(dpDevice+'.Black', getState(dpDevice+'.SNMP_Data.Black_Stand').val, true); setState(dpDevice+'.Yellow', getState(dpDevice+'.SNMP_Data.Yellow_Stand').val, true); setState(dpDevice+'.Bildeinheit', getState(dpDevice+'.SNMP_Data.Bildeinheit_Stand').val, true); setState(dpDevice+'.Transfereinheit', getState(dpDevice+'.SNMP_Data.Transfereinheit_Stand').val, true); setState(dpDevice+'.Fixiereinheit', getState(dpDevice+'.SNMP_Data.Fuser_Stand').val, true); setState(dpDevice+'.Resttonerbox', getState(dpDevice+'.SNMP_Data.WasteToner_Stand').val, true); setState(dpDevice+'.Einzugsrolle', getState(dpDevice+'.SNMP_Data.Tray_Stand').val, true); setState(dpDevice+'.Separationpads', getState(dpDevice+'.SNMP_Data.FrictionPad_Stand').val, true); setState(dpDevice+'.Pages', getState(dpDevice+'.SNMP_Data.Druckvorgänge').val, true); setState(dpDevice+'.Pages_SW', getState(dpDevice+'.SNMP_Data.DruckvorgängeSW').val, true); setState(dpDevice+'.Pages_Color', getState(dpDevice+'.SNMP_Data.DruckvorgängeColor').val, true); setState(dpDevice+'.Seriennummer', getState(dpDevice+'.SNMP_Data.Seriennummer').val, true); } async function Scanner(dpDevice) { setState(dpDevice+'.Pages', getState(dpDevice+'.SNMP_Data.Seiten').val, true); setState(dpDevice+'.Pages_SW', getState(dpDevice+'.SNMP_Data.SeitenSW').val, true); setState(dpDevice+'.Pages_Color', getState(dpDevice+'.SNMP_Data.SeitenColor').val, true); setState(dpDevice+'.Seriennummer', getState(dpDevice+'.SNMP_Data.Seriennummer').val, true); setState(dpDevice+'.Fehler', getState(dpDevice+'.SNMP_Data.Fehler').val, true); }
B E I S P I E L E :
1 Gerät
const CountDevice = 1; aDevice[0] = 'Bezeichnung:IP-Adresse:OIDs (durch Komma getrennt):Datenpunkte (durch Komma getrennt)';
2 Geräte
const CountDevice = 2; aDevice[0] = 'Bezeichnung:IP-Adresse:OIDs (durch Komma getrennt):Datenpunkte (durch Komma getrennt)'; aDevice[1] = 'Bezeichnung:IP-Adresse:OIDs (durch Komma getrennt):Datenpunkte (durch Komma getrennt)';
4 Geräte
const CountDevice = 4; aDevice[0] = 'Bezeichnung:IP-Adresse:OIDs (durch Komma getrennt):Datenpunkte (durch Komma getrennt)'; aDevice[1] = 'Bezeichnung:IP-Adresse:OIDs (durch Komma getrennt):Datenpunkte (durch Komma getrennt)'; aDevice[2] = 'Bezeichnung:IP-Adresse:OIDs (durch Komma getrennt):Datenpunkte (durch Komma getrennt)'; aDevice[3] = 'Bezeichnung:IP-Adresse:OIDs (durch Komma getrennt):Datenpunkte (durch Komma getrennt)';
OID's die es "immer" gibt und überall passen sollten. Hier sind die OID's und Datenpunkte angegeben.
- ohne FAN und nur einer HDD
1.3.6.1.4.1.2021.13.16.2.1.3.1,1.3.6.1.4.1.2021.10.1.3.1,1.3.6.1.4.1.2021.10.1.3.2,1.3.6.1.4.1.2021.10.1.3.3,1.3.6.1.2.1.2.2.1.10.3,1.3.6.1.2.1.2.2.1.16.3,1.3.6.1.2.1.25.2.3.1.5.36,1.3.6.1.2.1.25.2.3.1.6.36,1.3.6.1.2.1.25.2.3.1.4.36,1.3.6.1.2.1.25.2.3.1.5.1,1.3.6.1.2.1.25.2.3.1.6.1,1.3.6.1.2.1.25.2.3.1.4.1,1.3.6.1.2.1.25.2.3.1.6.6,1.3.6.1.2.1.25.2.3.1.6.7,1.3.6.1.2.1.25.2.3.1.5.11,1.3.6.1.2.1.25.2.3.1.5.8,1.3.6.1.2.1.25.2.3.1.5.10,1.3.6.1.2.1.25.2.3.1.6.10,1.3.6.1.2.1.25.2.3.1.4.10:"Temperatur,C1,C5,C15,Net_In,Net_Out,HDD,HDD_Used,HDD_Alloc,RAM,RAM_Used,RAM_Alloc,RAM_Buffer,RAM_Cache,RAM_Avail,RAM_Shared,SWAP,SWAP_Used,SWAP_Alloc
ein Eintrag in der Konfig sieht dann so aus
aDevice[x] = 'Bezeichnung:IP-Adresse:1.3.6.1.4.1.2021.13.16.2.1.3.1,1.3.6.1.4.1.2021.10.1.3.1,1.3.6.1.4.1.2021.10.1.3.2,1.3.6.1.4.1.2021.10.1.3.3,1.3.6.1.2.1.2.2.1.10.3,1.3.6.1.2.1.2.2.1.16.3,1.3.6.1.2.1.25.2.3.1.5.36,1.3.6.1.2.1.25.2.3.1.6.36,1.3.6.1.2.1.25.2.3.1.4.36,1.3.6.1.2.1.25.2.3.1.5.1,1.3.6.1.2.1.25.2.3.1.6.1,1.3.6.1.2.1.25.2.3.1.4.1,1.3.6.1.2.1.25.2.3.1.6.6,1.3.6.1.2.1.25.2.3.1.6.7,1.3.6.1.2.1.25.2.3.1.5.11,1.3.6.1.2.1.25.2.3.1.5.8,1.3.6.1.2.1.25.2.3.1.5.10,1.3.6.1.2.1.25.2.3.1.6.10,1.3.6.1.2.1.25.2.3.1.4.10:"Temperatur,C1,C5,C15,Net_In,Net_Out,HDD,HDD_Used,HDD_Alloc,RAM,RAM_Used,RAM_Alloc,RAM_Buffer,RAM_Cache,RAM_Avail,RAM_Shared,SWAP,SWAP_Used,SWAP_Alloc"';
- mit FAN und nur einer HDD
1.3.6.1.4.1.2021.13.16.2.1.3.1,1.3.6.1.4.1.2021.13.16.3.1.3.2,1.3.6.1.4.1.2021.10.1.3.1,1.3.6.1.4.1.2021.10.1.3.2,1.3.6.1.4.1.2021.10.1.3.3,1.3.6.1.2.1.2.2.1.10.3,1.3.6.1.2.1.2.2.1.16.3,1.3.6.1.2.1.25.2.3.1.5.36,1.3.6.1.2.1.25.2.3.1.6.36,1.3.6.1.2.1.25.2.3.1.4.36,1.3.6.1.2.1.25.2.3.1.5.1,1.3.6.1.2.1.25.2.3.1.6.1,1.3.6.1.2.1.25.2.3.1.4.1,1.3.6.1.2.1.25.2.3.1.6.6,1.3.6.1.2.1.25.2.3.1.6.7,1.3.6.1.2.1.25.2.3.1.5.11,1.3.6.1.2.1.25.2.3.1.5.8,1.3.6.1.2.1.25.2.3.1.5.10,1.3.6.1.2.1.25.2.3.1.6.10,1.3.6.1.2.1.25.2.3.1.4.10:"Temperatur,FAN,C1,C5,C15,Net_In,Net_Out,HDD,HDD_Used,HDD_Alloc,RAM,RAM_Used,RAM_Alloc,RAM_Buffer,RAM_Cache,RAM_Avail,RAM_Shared,SWAP,SWAP_Used,SWAP_Alloc
ein Eintrag in der Konfig sieht dann so aus
aDevice[x] = 'Bezeichnung:IP-Adresse:1.3.6.1.4.1.2021.13.16.2.1.3.1,1.3.6.1.4.1.2021.13.16.3.1.3.2,1.3.6.1.4.1.2021.10.1.3.1,1.3.6.1.4.1.2021.10.1.3.2,1.3.6.1.4.1.2021.10.1.3.3,1.3.6.1.2.1.2.2.1.10.3,1.3.6.1.2.1.2.2.1.16.3,1.3.6.1.2.1.25.2.3.1.5.36,1.3.6.1.2.1.25.2.3.1.6.36,1.3.6.1.2.1.25.2.3.1.4.36,1.3.6.1.2.1.25.2.3.1.5.1,1.3.6.1.2.1.25.2.3.1.6.1,1.3.6.1.2.1.25.2.3.1.4.1,1.3.6.1.2.1.25.2.3.1.6.6,1.3.6.1.2.1.25.2.3.1.6.7,1.3.6.1.2.1.25.2.3.1.5.11,1.3.6.1.2.1.25.2.3.1.5.8,1.3.6.1.2.1.25.2.3.1.5.10,1.3.6.1.2.1.25.2.3.1.6.10,1.3.6.1.2.1.25.2.3.1.4.10:"Temperatur,FAN,C1,C5,C15,Net_In,Net_Out,HDD,HDD_Used,HDD_Alloc,RAM,RAM_Used,RAM_Alloc,RAM_Buffer,RAM_Cache,RAM_Avail,RAM_Shared,SWAP,SWAP_Used,SWAP_Alloc"';
- ohne FAN und 3 weiteren HDD (z.B. Open Media Vault (OMV))
1.3.6.1.4.1.2021.13.16.2.1.3.1,1.3.6.1.4.1.2021.13.16.3.1.3.2,1.3.6.1.4.1.2021.10.1.3.1,1.3.6.1.4.1.2021.10.1.3.2,1.3.6.1.4.1.2021.10.1.3.3,1.3.6.1.2.1.2.2.1.10.2,1.3.6.1.2.1.2.2.1.16.2,1.3.6.1.2.1.25.2.3.1.5.36,1.3.6.1.2.1.25.2.3.1.6.36,1.3.6.1.2.1.25.2.3.1.4.36,1.3.6.1.2.1.25.2.3.1.5.1,1.3.6.1.2.1.25.2.3.1.6.1,1.3.6.1.2.1.25.2.3.1.4.1,1.3.6.1.2.1.25.2.3.1.6.6,1.3.6.1.2.1.25.2.3.1.6.7,1.3.6.1.2.1.25.2.3.1.5.11,1.3.6.1.2.1.25.2.3.1.5.8,1.3.6.1.2.1.25.2.3.1.5.10,1.3.6.1.2.1.25.2.3.1.6.10,1.3.6.1.2.1.25.2.3.1.4.10,1.3.6.1.2.1.25.2.3.1.5.72,1.3.6.1.2.1.25.2.3.1.6.72,1.3.6.1.2.1.25.2.3.1.4.72,1.3.6.1.2.1.25.2.3.1.3.72,1.3.6.1.2.1.25.2.3.1.5.56,1.3.6.1.2.1.25.2.3.1.6.56,1.3.6.1.2.1.25.2.3.1.4.56,1.3.6.1.2.1.25.2.3.1.3.56,1.3.6.1.2.1.25.2.3.1.5.57,1.3.6.1.2.1.25.2.3.1.6.57,1.3.6.1.2.1.25.2.3.1.4.57,1.3.6.1.2.1.25.2.3.1.3.57:"Temperatur,FAN,C1,C5,C15,Net_In,Net_Out,HDD,HDD_Used,HDD_Alloc,RAM,RAM_Used,RAM_Alloc,RAM_Buffer,RAM_Cache,RAM_Avail,RAM_Shared,SWAP,SWAP_Used,SWAP_Alloc,SDA,SDA_Used,SDA_Alloc,SDA_Descr,SDB,SDB_Used,SDB_Alloc,SDB_Descr,SDC,SDC_Used,SDC_Alloc,SDC_Descr
ein Eintrag in der Konfig sieht dann so aus
aDevice[x] = 'PI_OMV:IP-Adresse:1.3.6.1.4.1.2021.13.16.2.1.3.1,1.3.6.1.4.1.2021.13.16.3.1.3.2,1.3.6.1.4.1.2021.10.1.3.1,1.3.6.1.4.1.2021.10.1.3.2,1.3.6.1.4.1.2021.10.1.3.3,1.3.6.1.2.1.2.2.1.10.2,1.3.6.1.2.1.2.2.1.16.2,1.3.6.1.2.1.25.2.3.1.5.36,1.3.6.1.2.1.25.2.3.1.6.36,1.3.6.1.2.1.25.2.3.1.4.36,1.3.6.1.2.1.25.2.3.1.5.1,1.3.6.1.2.1.25.2.3.1.6.1,1.3.6.1.2.1.25.2.3.1.4.1,1.3.6.1.2.1.25.2.3.1.6.6,1.3.6.1.2.1.25.2.3.1.6.7,1.3.6.1.2.1.25.2.3.1.5.11,1.3.6.1.2.1.25.2.3.1.5.8,1.3.6.1.2.1.25.2.3.1.5.10,1.3.6.1.2.1.25.2.3.1.6.10,1.3.6.1.2.1.25.2.3.1.4.10,1.3.6.1.2.1.25.2.3.1.5.72,1.3.6.1.2.1.25.2.3.1.6.72,1.3.6.1.2.1.25.2.3.1.4.72,1.3.6.1.2.1.25.2.3.1.3.72,1.3.6.1.2.1.25.2.3.1.5.56,1.3.6.1.2.1.25.2.3.1.6.56,1.3.6.1.2.1.25.2.3.1.4.56,1.3.6.1.2.1.25.2.3.1.3.56,1.3.6.1.2.1.25.2.3.1.5.57,1.3.6.1.2.1.25.2.3.1.6.57,1.3.6.1.2.1.25.2.3.1.4.57,1.3.6.1.2.1.25.2.3.1.3.57:"Temperatur,FAN,C1,C5,C15,Net_In,Net_Out,HDD,HDD_Used,HDD_Alloc,RAM,RAM_Used,RAM_Alloc,RAM_Buffer,RAM_Cache,RAM_Avail,RAM_Shared,SWAP,SWAP_Used,SWAP_Alloc,SDA,SDA_Used,SDA_Alloc,SDA_Descr,SDB,SDB_Used,SDB_Alloc,SDB_Descr,SDC,SDC_Used,SDC_Alloc,SDC_Descr"';
WICHTIG: Die hier verwendeten OID's funktionieren mit Debian 11, 12 und Ubuntu. Für Windows müssen ganz andere OID's genutzt werden. Dazu z.B. den MIB Browser nutzen.
Ja, das ist erst einmal sehr sehr viel Input. Vielleicht auch einmal mehr durchlesen. Die vielen OID's (Zahlen und Ziffernfolgen) können schon ganz schön verwirrend sein. Aber es lohnt sich.
Die wichtigsten Stellen sind kommentiert. Also viel Spaß und Erfolg bei der Umsetzung. Wenn es Fragen gibt, bitte melden.
Ro75.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
NACHTRAG 28.09.2024: Version 1.0.1Das Skript wurde erweitert. Damit können jetzt auch Scanner und Drucker abgefragt werden. Details bitte den Kommentaren im Konfigurationsbereich entnehmen.
-
@ro75
Werde es mal unter Windows testen. -
@sigi234 sagte in Skript Hardwareinformationen via SNMP:
Werde es mal unter Windows testen.
WICHTIG: Die hier verwendeten OID's funktionieren mit Debian 11, 12 und Ubuntu. Für Windows müssen ganz andere OID's genutzt werden. Dazu z.B. den MIB Browser nutzen.
Ro75.
-
Skript in Version 1.0.1 im ersten Post aktualisiert. Jetzt können auch Drucker und Scanner angefragt werden. Bitte dazu im ersten Post ganz unten "NACHTRAG 28.09.2024: Version 1.0.1" schauen.
Ro75.