NEWS
[gelöst] Synology Systeminformationen auslesen und auf VIS darstellen
-
Hallo,
ich bin gerade dabei eine neue, umfangreichere Version des Scripts für meine Synology zu schreiben. Dabei überarbeite ich auch die CPUTemp. Allerdings hat meine DS1515+ 4 Cores und dementsprechend 4 CoreTemps. Jetzt möchte ich gern im ShellScript aus den 4 Werten immer den größten auswählen und an ioBroker übergeben. Hat jemand eine Idee ob und wie ich das im ShellScript machen kann? Ich denke mal ein Array mit den verschiedenen Temps ist ein guter Einstieg… Und dann? Kann man da irgendwie mit IF die Werte gegeneinander prüfen??
Falls das nicht geht, könnte ich ja noch die einzelnen Weter an ioBroker geben und den Weg über ein Javascript gehen. Aber wenn ich das vermeiden kann...
Danke schon mal vorab.
MfG,
André
-
Hallo andre,
beim Shell-Skript kann ich dir nicht helfen. Aber in Javascript ist die Rückgabe des höchsten Wertes einfach.
Als Vorbereitung überträgst du nach dem obigen Muster einfach alle Temperaturen an vier ioBroker Variablen (diese eben auch vorher anlegen).
Dann kannst du eine fünfte Variable anlegen (maxTemp) und die vier Werte sehr leicht vergleichen.
Wenn es nicht darauf ankommt zu wissen, welcher Kern die höchste Temperatur hat, kannst du http://www.w3schools.com/jsref/jsref_max.asp nutzen.
Das Skript überwacht die vier Temperatur-Datenpunkte. Ändert sich mindestens einer, wird der Maximalwert in die Variable TempMax geschrieben.
var idTemp1 = 'javascript.0.Synology.Temp1, var idTemp2 = 'javascript.0.Synology.Temp2, var idTemp3 = 'javascript.0.Synology.Temp3, var idTemp4 = 'javascript.0.Synology.Temp4, var idTempMax = 'javascript.0.Synology.TempMax, on({id: /\.Synology.Temp1|\.Synology.Temp2|\.Synology.Temp3|\.Synology.Temp4$/, change: 'ne' }, function(obj) { var max = Math.max(getState(idTemp1).val, getState(idTemp2).val, getState(idTemp3).val, getState(idTemp4).val); setState(idTempMax, max); });
Gruß
Pix
-
@pix:Wenn es nicht darauf ankommt zu wissen, welcher Kern die höchste Temperatur hat, kannst du http://www.w3schools.com/jsref/jsref_max.asp nutzen.
Das Skript überwacht die vier Temperatur-Datenpunkte. Ändert sich mindestens einer, wird der Maximalwert in die Variable TempMax geschrieben. `
Hallo Pix,
Danke für den Tipp mit math.max(). Das kannte ich noch nicht.
Aber wie gesagt würde ich die Umsetzung in Javascript am liebsten umgehen. Vielleicht findet sich ja noch jemand der eine Möglichkeit im Shell-Skript kennt.
In meiner aktuellen "Development Version" des Shell-Skripts übergebe ich jetzt erstenmal alle CoreTemp Werte plus den Wert von Core1 als CPUTempMax. Mal sehen ob ich es schaffe das Script heute Abend mal zu veröffentlichen.
MfG, André
Gesendet mit Tapatalk.
-
Mal sehen ob ich es schaffe das Script heute Abend mal zu veröffentlichen. `
Besser spät als nie. Habe das Script mal ein wenig überarbeitet und erweitert, so dass es jetzt auch auf meiner DS1515+ läuft.
Im Kopf des ShellScripts habe ich das Javascript zum Anlegen der notwendigen States als Kommentar eingefügt. Auf der Synology läuft das Script bei mir jede Minute (über den Aufgabenplaner).
Achtung! Das Script hat eine Laufzeit von 15 Sekunden, da ich mir für die CPU-Usage 15 Sekunden lang, einmal pro Sekunde, Werte mit top generiere um dann einen Mittelwert zu errechnen. Wer möchte kann an der entsprechenden Stelle "CPUUsage=$(top -b -n15 […]" beim Parameter "-n" die 15 auch gegen eine 3 ersetzen. Das sollte auch noch ganz gute Werte geben.
Hier nun also mein systeminfo_iobroker.sh
#/bin/bash # Scriptname: sysinfo_iobroker.sh - Ermitteln von Systemwerten der Sysnology DS1515+ und übergeben an ioBroker # Version 1.0 - 05.08.2016 # ##### JavaScript für ioBroker zum Anlegen der States ##### # #// Anlegen der States für Synology-Script # #function CreateSynologyStates(){ # createState("javascript.0.synology.CPUTemp1", {name: "CPU-Temp Core 1", unit: "°C"}); # createState("javascript.0.synology.CPUTemp2", {name: "CPU-Temp Core 2", unit: "°C"}); # createState("javascript.0.synology.CPUTemp3", {name: "CPU-Temp Core 3", unit: "°C"}); # createState("javascript.0.synology.CPUTemp4", {name: "CPU-Temp Core 4", unit: "°C"}); # createState("javascript.0.synology.CPUTempMax", {name: "CPU-Temp Max Core 1-4", unit: "°C"}); # createState("javascript.0.synology.CPUUsage", {name: "CPU-Usage", unit: "%"}); # createState("javascript.0.synology.CPULoad", {name: "CPU-Load Average (1,5,15 Minuten)"}); # createState("javascript.0.synology.MemTotalGB", {name: "Memory Total", unit: "GB"}); # createState("javascript.0.synology.MemFreeGB", {name: "Memory Free", unit: "GB"}); # createState("javascript.0.synology.MemUsedGB", {name: "Memory Used", unit: "GB"}); # createState("javascript.0.synology.MemFreePercent", {name: "Memory Free", unit: "%"}); # createState("javascript.0.synology.MemUsedPercent", {name: "Memory Used", unit: "%"}); # createState("javascript.0.synology.HDDTemp1", {name: "HDD-Temp 1", unit: "°C"}); # createState("javascript.0.synology.HDDTemp2", {name: "HDD-Temp 2", unit: "°C"}); # createState("javascript.0.synology.HDDTemp3", {name: "HDD-Temp 3", unit: "°C"}); # createState("javascript.0.synology.HDDTemp4", {name: "HDD-Temp 4", unit: "°C"}); # createState("javascript.0.synology.HDDTemp5", {name: "HDD-Temp 5", unit: "°C"}); # createState("javascript.0.synology.StorageTotalTB", {name: "Storage Total", unit: "TB"}); # createState("javascript.0.synology.StorageFreeTB", {name: "Storage Free", unit: "TB"}); # createState("javascript.0.synology.StorageUsedTB", {name: "Storage Used", unit: "TB"}); # createState("javascript.0.synology.StorageFreePercent", {name: "Storage Free", unit: "%"}); # createState("javascript.0.synology.StorageUsedPercent", {name: "Storage Used", unit: "%"}); # createState("javascript.0.synology.UptimeDays", {name: "Uptime Days", unit: "Tage"}); # createState("javascript.0.synology.UptimeHours", {name: "Uptime Hours", unit: "Stunden"}); # createState("javascript.0.synology.UptimeMinutes", {name: "Storage Minutes", unit: "Minuten"}); # createState("javascript.0.synology.DSMVersion", {name: "DSM Version"}); # createState("javascript.0.synology.Timestamp", {name: "Timestamp Data Update"}); #} # #CreateSynologyStates(); # ##### JavaScritp ENDE ##### ##### Lokale Variablen anlegen ##### ioBrokerSetURL="http://[IOBROKERIP]:[WEBPORT]/set/javascript.0.synology." # URL zum Setzen der Werte in ioBroker URL_set_CPUTemp1="${ioBrokerSetURL}CPUTemp1?value=" URL_set_CPUTemp2="${ioBrokerSetURL}CPUTemp2?value=" URL_set_CPUTemp3="${ioBrokerSetURL}CPUTemp3?value=" URL_set_CPUTemp4="${ioBrokerSetURL}CPUTemp4?value=" URL_set_CPUTempMax="${ioBrokerSetURL}CPUTempMax?value=" # Bisher fehlt mir die Möglichkeit zur Ermittlung der Max-Temp im Shell Script, daher aktuelle durch JavaScript ermittelt URL_set_CPUUsage="${ioBrokerSetURL}CPUUsage?value=" URL_set_CPULoad="${ioBrokerSetURL}CPULoad?value=" URL_set_MemTotalGB="${ioBrokerSetURL}MemTotalGB?value=" URL_set_MemFreeGB="${ioBrokerSetURL}MemFreeGB?value=" URL_set_MemUsedGB="${ioBrokerSetURL}MemUsedGB?value=" URL_set_MemFreePercent="${ioBrokerSetURL}MemFreePercent?value=" URL_set_MemUsedPercent="${ioBrokerSetURL}MemUsedPercent?value=" URL_set_HDDTemp1="${ioBrokerSetURL}HDDTemp1?value=" URL_set_HDDTemp2="${ioBrokerSetURL}HDDTemp2?value=" URL_set_HDDTemp3="${ioBrokerSetURL}HDDTemp3?value=" URL_set_HDDTemp4="${ioBrokerSetURL}HDDTemp4?value=" URL_set_HDDTemp5="${ioBrokerSetURL}HDDTemp5?value=" URL_set_StorageTotalTB="${ioBrokerSetURL}StorageTotalTB?value=" URL_set_StorageFreeTB="${ioBrokerSetURL}StorageFreeTB?value=" URL_set_StorageUsedTB="${ioBrokerSetURL}StorageUsedTB?value=" URL_set_StorageFreePercent="${ioBrokerSetURL}StorageFreePercent?value=" URL_set_StorageUsedPercent="${ioBrokerSetURL}StorageUsedPercent?value=" URL_set_UptimeDays="${ioBrokerSetURL}UptimeDays?value=" URL_set_UptimeHours="${ioBrokerSetURL}UptimeHours?value=" URL_set_UptimeMinutes="${ioBrokerSetURL}UptimeMinutes?value=" URL_set_DSMVersion="${ioBrokerSetURL}DSMVersion?value=" URL_set_Timestamp="${ioBrokerSetURL}Timestamp?value=" ##### Ermitteln und Setzen der Werte ##### # CPU-Temperatur CPUTemp1=$(cat /sys/bus/platform/devices/coretemp.0/temp2_input | awk '{print $1/1000}') CPUTemp2=$(cat /sys/bus/platform/devices/coretemp.0/temp3_input | awk '{print $1/1000}') CPUTemp3=$(cat /sys/bus/platform/devices/coretemp.0/temp4_input | awk '{print $1/1000}') CPUTemp4=$(cat /sys/bus/platform/devices/coretemp.0/temp5_input | awk '{print $1/1000}') url_CPUTemp1=$URL_set_CPUTemp1$CPUTemp1 echo "$url_CPUTemp1" curl -s $url_CPUTemp1 > /dev/null 2>&1 url_CPUTemp2=$URL_set_CPUTemp2$CPUTemp2 echo "$url_CPUTemp2" curl -s $url_CPUTemp2 > /dev/null 2>&1 url_CPUTemp3=$URL_set_CPUTemp3$CPUTemp3 echo "$url_CPUTemp3" curl -s $url_CPUTemp3 > /dev/null 2>&1 url_CPUTemp4=$URL_set_CPUTemp4$CPUTemp4 echo "$url_CPUTemp4" curl -s $url_CPUTemp4 > /dev/null 2>&1 # CPU-Usage CPUUsage=$(top -b -n15 -p 1 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' -v prefix="$prefix" '{ split($1, vs, ","); v=vs[length(vs)]; sub("%", "", v); printf "%s%.1f\n", prefix, 100 - v }') url_CPUUsage=$URL_set_CPUUsage$CPUUsage echo "$url_CPUUsage" curl -s $url_CPUUsage > /dev/null 2>&1 # CPU-Load-Average CPULoad=$(uptime | awk -F'[a-z]:' '{ print $2}' | sed 's/ /%20/g') url_CPULoad=$URL_set_CPULoad$CPULoad echo "$url_CPULoad" curl -s $url_CPULoad > /dev/null 2>&1 # Memory Total in Gigabyte MemTotalGB=$(free | grep Mem | awk '{printf "%.1f\n", $2/1024/1024}') url_MemTotalGB=$URL_set_MemTotalGB$MemTotalGB echo "$url_MemTotalGB" curl -s $url_MemTotalGB > /dev/null 2>&1 # Memory Free in Gigabyte MemFreeGB=$(free | grep Mem | awk '{printf "%.1f\n", ($4+$6)/1024/1024}') url_MemFreeGB=$URL_set_MemFreeGB$MemFreeGB echo "$url_MemFreeGB" curl -s $url_MemFreeGB > /dev/null 2>&1 # Memory Used in Gigabyte MemUsedGB=$(free | grep Mem | awk '{printf "%.1f\n", $3/1024/1024}') url_MemUsedGB=$URL_set_MemUsedGB$MemUsedGB echo "$url_MemUsedGB" curl -s $url_MemUsedGB > /dev/null 2>&1 # Memory Free in Prozent MemFreePercent=$(free | grep Mem | awk '{printf "%.1f\n", ($4+$6)/$2 * 100.0}') url_MemFreePercent=$URL_set_MemFreePercent$MemFreePercent echo "$url_MemFreePercent" curl -s $url_MemFreePercent > /dev/null 2>&1 # Memory Used in Prozent MemUsedPercent=$(free | grep Mem | awk '{printf "%.1f\n", $3/$2 * 100.0}') url_MemUsedPercent=$URL_set_MemUsedPercent$MemUsedPercent echo "$url_MemUsedPercent" curl -s $url_MemUsedPercent > /dev/null 2>&1 # HDD-Temperaturen in Celsius HDDTemp1=$(smartctl -A /dev/sda -d ata | grep Temperature_Celsius | awk '{print $10}') url_HDDTemp1=$URL_set_HDDTemp1$HDDTemp1 echo "$url_HDDTemp1" curl -s $url_HDDTemp1 > /dev/null 2>&1 HDDTemp2=$(smartctl -A /dev/sda -d ata | grep Temperature_Celsius | awk '{print $10}') url_HDDTemp2=$URL_set_HDDTemp2$HDDTemp2 echo "$url_HDDTemp2" curl -s $url_HDDTemp2 > /dev/null 2>&1 HDDTemp3=$(smartctl -A /dev/sda -d ata | grep Temperature_Celsius | awk '{print $10}') url_HDDTemp3=$URL_set_HDDTemp3$HDDTemp3 echo "$url_HDDTemp3" curl -s $url_HDDTemp3 > /dev/null 2>&1 HDDTemp4=$(smartctl -A /dev/sda -d ata | grep Temperature_Celsius | awk '{print $10}') url_HDDTemp4=$URL_set_HDDTemp4$HDDTemp4 echo "$url_HDDTemp4" curl -s $url_HDDTemp4 > /dev/null 2>&1 HDDTemp5=$(smartctl -A /dev/sda -d ata | grep Temperature_Celsius | awk '{print $10}') url_HDDTemp5=$URL_set_HDDTemp5$HDDTemp5 echo "$url_HDDTemp5" curl -s $url_HDDTemp5 > /dev/null 2>&1 # Storage-Total Volume 1 in TB StorageTotalTB=$(df|awk '/volume1$/{printf "%.2f\n", ($2/1024/1024/1024)}') url_StorageTotalTB=$URL_set_StorageTotalTB$StorageTotalTB echo "$url_StorageTotalTB" curl -s $url_StorageTotalTB > /dev/null 2>&1 # Storage-Free Volume 1 in TB StorageFreeTB=$(df|awk '/volume1$/{printf "%.2f\n", ($4/1024/1024/1024)}') url_StorageFreeTB=$URL_set_StorageFreeTB$StorageFreeTB echo "$url_StorageFreeTB" curl -s $url_StorageFreeTB > /dev/null 2>&1 # Storage-Used Volume 1 in TB StorageUsedTB=$(df|awk '/volume1$/{printf "%.2f\n", ($3/1024/1024/1024)}') url_StorageUsedTB=$URL_set_StorageUsedTB$StorageUsedTB echo "$url_StorageUsedTB" curl -s $url_StorageUsedTB > /dev/null 2>&1 # Storage-Free Volume 1 in Prozent StorageFreePercent=$(df|awk '/volume1$/{printf "%.1f\n", ($4/$2*100)}') url_StorageFreePercent=$URL_set_StorageFreePercent$StorageFreePercent echo "$url_StorageFreePercent" curl -s $url_StorageFreePercent > /dev/null 2>&1 # Storage-Used Volume 1 in Prozent StorageUsedPercent=$(df|awk '/volume1$/{printf "%.1f\n", ($3/$2*100)}') url_StorageUsedPercent=$URL_set_StorageUsedPercent$StorageUsedPercent echo "$url_StorageUsedPercent" curl -s $url_StorageUsedPercent > /dev/null 2>&1 # Uptime unterteilt in "volle Tage und Stunden" UptimeSecs=$(cat /proc/uptime | awk '{printf"%.0f\n", $1}') UptimeDays=$(($UptimeSecs/86400)) UptimeHours=$((($UptimeSecs/3600)-($UptimeDays*24))) UptimeMinutes=$((($UptimeSecs/60)-($UptimeDays*24*60)-($UptimeHours*60))) url_UptimeDays=$URL_set_UptimeDays$UptimeDays echo "$url_UptimeDays" curl -s $url_UptimeDays > /dev/null 2>&1 url_UptimeHours=$URL_set_UptimeHours$UptimeHours echo "$url_UptimeHours" curl -s $url_UptimeHours > /dev/null 2>&1 url_UptimeMinutes=$URL_set_UptimeMinutes$UptimeMinutes echo "$url_UptimeMinutes" curl -s $url_UptimeMinutes > /dev/null 2>&1 # DSM-Version Version=$(more /etc.defaults/VERSION | grep productversion | awk -F '=' '{print $2}' | sed 's/"//g') BuildNumber=$(more /etc.defaults/VERSION | grep buildnumber | awk -F '=' '{print $2}' | sed 's/"//g') FixNumber=$(more /etc.defaults/VERSION | grep smallfixnumber | awk -F '=' '{print $2}' | sed 's/"//g') DSMVersion=$Version"-"$BuildNumber"%20Update%20"$FixNumber url_DSMVersion=$URL_set_DSMVersion$DSMVersion echo "$url_DSMVersion" curl -s $url_DSMVersion > /dev/null 2>&1 # Timestamp für letztes Update der Werte TimestampDay=$(date +%Y-%m-%d) TimestampTime=$(date +%H:%M:%S) Timestamp=$TimestampDay"%20"$TimestampTime url_Timestamp=$URL_set_Timestamp$Timestamp echo "$url_Timestamp" curl -s $url_Timestamp > /dev/null 2>&1 exit 0
Damit das Ganze funktioniert muss die Zeile | ioBrokerSetURL="http://[IOBROKERIP]:[WEBPORT]/set/javascript.0.synology." | entsprechend angepasst werden. Außerdem muss im web-Adapter die SIMPLE API aktiviert sein.
Wenn alles gut läuft, sollte es anschließend im ioBroker etwa so aussehen:
MfG,André
-
Hallo nochmal,
ich habe gerade mein Systeminfo-Script auch in einer Raspberry Pi 2 Version zum Laufen gebracht…
Besteht eventuell Interesse daran?
MfG, André
Gesendet mit Tapatalk.
-
Klar… immer her damit [emoji12][emoji6] irgendeiner braucht es immer…. Auch wenn es nur Anschauungsmaterial ist
Gruß
Adrian
Gesendet von meinem iPhone mit Tapatalk
-
Hallo nochmal,
ich habe gerade mein Systeminfo-Script auch in einer Raspberry Pi 2 Version zum Laufen gebracht…
Besteht eventuell Interesse daran?
MfG, André . `
Hi Andre,
könntest du mir das Script zur Verfügung stellen?
Danke
-
Ihr kennt den rpi Adapter? Der sollte Daten in der Art für Raspberry und auch andere bereitstellen und schon tun
-
Hallo,
Habe das Script mal laufen lassen.Es wird auch ausgführt und anscheinend auch Werte ausgelesen,bloß die
werden nicht in Iobroker geschrieben. Sieht auch alles ein wenig komisch aus.
! cat: /sys/bus/platform/devices/coretemp.0/temp2_input: No such file or directory
! cat: /sys/bus/platform/devices/coretemp.0/temp3_input: No such file or directory
! cat: /sys/bus/platform/devices/coretemp.0/temp4_input: No such file or directory
! cat: /sys/bus/platform/devices/coretemp.0/temp5_input: No such file or directory
! http://192.168.178.44:8087/set/javascri … mp1?value=
! : ambiguous redirect 1
! http://192.168.178.44:8087/set/javascri ... mp2?value=
! : ambiguous redirect 1
! http://192.168.178.44:8087/set/javascri ... mp3?value=
! : ambiguous redirect 1
! http://192.168.178.44:8087/set/javascri ... mp4?value=
! : ambiguous redirect 1
! top: inappropriate '3'
! Usage:
! top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]
! http://192.168.178.44:8087/set/javascri … age?value=
! : ambiguous redirect 1
! %201.36,%201.29,%201.25087/set/javascript.0.synology.CPULoad?value=
! : ambiguous redirect 1
! 0.5p://192.168.178.44:8087/set/javascript.0.synology.MemTotalGB?value=
! : ambiguous redirect: 1
! 0.4p://192.168.178.44:8087/set/javascript.0.synology.MemFreeGB?value=
! : ambiguous redirect: 1
! 0.1p://192.168.178.44:8087/set/javascript.0.synology.MemUsedGB?value=
! : ambiguous redirect: 1
! 78.6://192.168.178.44:8087/set/javascript.0.synology.MemFreePercent?value=
! : ambiguous redirect: 1
! 21.4://192.168.178.44:8087/set/javascript.0.synology.MemUsedPercent?value=
! : ambiguous redirect: 1
! 36tp://192.168.178.44:8087/set/javascript.0.synology.HDDTemp1?value=
! : ambiguous redirect: 1
! 36tp://192.168.178.44:8087/set/javascript.0.synology.HDDTemp2?value=
! : ambiguous redirect: 1
! 36tp://192.168.178.44:8087/set/javascript.0.synology.HDDTemp3?value=
! : ambiguous redirect: 1
! 36tp://192.168.178.44:8087/set/javascript.0.synology.HDDTemp4?value=
! : ambiguous redirect: 1
! 36tp://192.168.178.44:8087/set/javascript.0.synology.HDDTemp5?value=
! : ambiguous redirect: 1
! 2.68://192.168.178.44:8087/set/javascript.0.synology.StorageTotalTB?value=
! : ambiguous redirect: 1
! 0.13://192.168.178.44:8087/set/javascript.0.synology.StorageFreeTB?value=
! : ambiguous redirect: 1
! 2.55://192.168.178.44:8087/set/javascript.0.synology.StorageUsedTB?value=
! : ambiguous redirect: 1
! 4.8p://192.168.178.44:8087/set/javascript.0.synology.StorageFreePercent?value=
! : ambiguous redirect: 1
! 95.2://192.168.178.44:8087/set/javascript.0.synology.StorageUsedPercent?value=
! : ambiguous redirect: 1
! /86400")syntax error: invalid arithmetic operator (error token is "
! /3600)-(*24)")syntax error: invalid arithmetic operator (error token is "
! /60)-(2460)-(*60)")syntax error: invalid arithmetic operator (error token is "
! http://192.168.178.44:8087/set/javascri … ays?value=
! : ambiguous redirect: 1
! http://192.168.178.44:8087/set/javascri ... urs?value=
! : ambiguous redirect: 1Habe die mal ein paar Werte rot markiert,die stimmen auch.Viellecht liegt es auch an der DS.Habe eine DS114.
Aber das Script weiter oben macht das gleiche.
Einer ne Idee?? Vielleicht mache ich ja auch was falsch
Mfg
Sven
-
Mal sehen ob ich es schaffe das Script heute Abend mal zu veröffentlichen. `
Besser spät als nie. Habe das Script mal ein wenig überarbeitet und erweitert, so dass es jetzt auch auf meiner DS1515+ läuft.
Im Kopf des ShellScripts habe ich das Javascript zum Anlegen der notwendigen States als Kommentar eingefügt. Auf der Synology läuft das Script bei mir jede Minute (über den Aufgabenplaner).
Achtung! Das Script hat eine Laufzeit von 15 Sekunden, da ich mir für die CPU-Usage 15 Sekunden lang, einmal pro Sekunde, Werte mit top generiere um dann einen Mittelwert zu errechnen. Wer möchte kann an der entsprechenden Stelle "CPUUsage=$(top -b -n15 […]" beim Parameter "-n" die 15 auch gegen eine 3 ersetzen. Das sollte auch noch ganz gute Werte geben.
Hier nun also mein systeminfo_iobroker.sh
! ````
#!/bin/bashScriptname: sysinfo_iobroker.sh - Ermitteln von Systemwerten der Sysnology DS1515+ und übergeben an ioBroker
Version 1.0 - 05.08.2016
JavaScript für ioBroker zum Anlegen der States
#// Anlegen der States für Synology-Script
#function CreateSynologyStates(){
createState("javascript.0.synology.CPUTemp1", {name: "CPU-Temp Core 1", unit: "°C"});
createState("javascript.0.synology.CPUTemp2", {name: "CPU-Temp Core 2", unit: "°C"});
createState("javascript.0.synology.CPUTemp3", {name: "CPU-Temp Core 3", unit: "°C"});
createState("javascript.0.synology.CPUTemp4", {name: "CPU-Temp Core 4", unit: "°C"});
createState("javascript.0.synology.CPUTempMax", {name: "CPU-Temp Max Core 1-4", unit: "°C"});
createState("javascript.0.synology.CPUUsage", {name: "CPU-Usage", unit: "%"});
createState("javascript.0.synology.CPULoad", {name: "CPU-Load Average (1,5,15 Minuten)"});
createState("javascript.0.synology.MemTotalGB", {name: "Memory Total", unit: "GB"});
createState("javascript.0.synology.MemFreeGB", {name: "Memory Free", unit: "GB"});
createState("javascript.0.synology.MemUsedGB", {name: "Memory Used", unit: "GB"});
createState("javascript.0.synology.MemFreePercent", {name: "Memory Free", unit: "%"});
createState("javascript.0.synology.MemUsedPercent", {name: "Memory Used", unit: "%"});
createState("javascript.0.synology.HDDTemp1", {name: "HDD-Temp 1", unit: "°C"});
createState("javascript.0.synology.HDDTemp2", {name: "HDD-Temp 2", unit: "°C"});
createState("javascript.0.synology.HDDTemp3", {name: "HDD-Temp 3", unit: "°C"});
createState("javascript.0.synology.HDDTemp4", {name: "HDD-Temp 4", unit: "°C"});
createState("javascript.0.synology.HDDTemp5", {name: "HDD-Temp 5", unit: "°C"});
createState("javascript.0.synology.StorageTotalTB", {name: "Storage Total", unit: "TB"});
createState("javascript.0.synology.StorageFreeTB", {name: "Storage Free", unit: "TB"});
createState("javascript.0.synology.StorageUsedTB", {name: "Storage Used", unit: "TB"});
createState("javascript.0.synology.StorageFreePercent", {name: "Storage Free", unit: "%"});
createState("javascript.0.synology.StorageUsedPercent", {name: "Storage Used", unit: "%"});
createState("javascript.0.synology.UptimeDays", {name: "Uptime Days", unit: "Tage"});
createState("javascript.0.synology.UptimeHours", {name: "Uptime Hours", unit: "Stunden"});
createState("javascript.0.synology.UptimeMinutes", {name: "Storage Minutes", unit: "Minuten"});
createState("javascript.0.synology.DSMVersion", {name: "DSM Version"});
createState("javascript.0.synology.Timestamp", {name: "Timestamp Data Update"});
#}
#CreateSynologyStates();
JavaScritp ENDE
! ##### Lokale Variablen anlegen #####
! ioBrokerSetURL="http://[IOBROKERIP]:[WEBPORT]/set/javascript.0.synology." # URL zum Setzen der Werte in ioBroker
! URL_set_CPUTemp1="${ioBrokerSetURL}CPUTemp1?value="
URL_set_CPUTemp2="${ioBrokerSetURL}CPUTemp2?value="
URL_set_CPUTemp3="${ioBrokerSetURL}CPUTemp3?value="
URL_set_CPUTemp4="${ioBrokerSetURL}CPUTemp4?value="URL_set_CPUTempMax="${ioBrokerSetURL}CPUTempMax?value=" # Bisher fehlt mir die Möglichkeit zur Ermittlung der Max-Temp im Shell Script, daher aktuelle durch JavaScript ermittelt
URL_set_CPUUsage="${ioBrokerSetURL}CPUUsage?value="
URL_set_CPULoad="${ioBrokerSetURL}CPULoad?value="! URL_set_MemTotalGB="${ioBrokerSetURL}MemTotalGB?value="
URL_set_MemFreeGB="${ioBrokerSetURL}MemFreeGB?value="
URL_set_MemUsedGB="${ioBrokerSetURL}MemUsedGB?value="
URL_set_MemFreePercent="${ioBrokerSetURL}MemFreePercent?value="
URL_set_MemUsedPercent="${ioBrokerSetURL}MemUsedPercent?value="
! URL_set_HDDTemp1="${ioBrokerSetURL}HDDTemp1?value="
URL_set_HDDTemp2="${ioBrokerSetURL}HDDTemp2?value="
URL_set_HDDTemp3="${ioBrokerSetURL}HDDTemp3?value="
URL_set_HDDTemp4="${ioBrokerSetURL}HDDTemp4?value="
URL_set_HDDTemp5="${ioBrokerSetURL}HDDTemp5?value="
! URL_set_StorageTotalTB="${ioBrokerSetURL}StorageTotalTB?value="
URL_set_StorageFreeTB="${ioBrokerSetURL}StorageFreeTB?value="
URL_set_StorageUsedTB="${ioBrokerSetURL}StorageUsedTB?value="
URL_set_StorageFreePercent="${ioBrokerSetURL}StorageFreePercent?value="
URL_set_StorageUsedPercent="${ioBrokerSetURL}StorageUsedPercent?value="
! URL_set_UptimeDays="${ioBrokerSetURL}UptimeDays?value="
URL_set_UptimeHours="${ioBrokerSetURL}UptimeHours?value="
URL_set_UptimeMinutes="${ioBrokerSetURL}UptimeMinutes?value="
! URL_set_DSMVersion="${ioBrokerSetURL}DSMVersion?value="
URL_set_Timestamp="${ioBrokerSetURL}Timestamp?value="
! ##### Ermitteln und Setzen der Werte #####
! # CPU-Temperatur
! CPUTemp1=$(cat /sys/bus/platform/devices/coretemp.0/temp2_input | awk '{print $1/1000}')
CPUTemp2=$(cat /sys/bus/platform/devices/coretemp.0/temp3_input | awk '{print $1/1000}')
CPUTemp3=$(cat /sys/bus/platform/devices/coretemp.0/temp4_input | awk '{print $1/1000}')
CPUTemp4=$(cat /sys/bus/platform/devices/coretemp.0/temp5_input | awk '{print $1/1000}')
! url_CPUTemp1=$URL_set_CPUTemp1$CPUTemp1
echo "$url_CPUTemp1"
curl -s $url_CPUTemp1 > /dev/null 2>&1
! url_CPUTemp2=$URL_set_CPUTemp2$CPUTemp2
echo "$url_CPUTemp2"
curl -s $url_CPUTemp2 > /dev/null 2>&1
! url_CPUTemp3=$URL_set_CPUTemp3$CPUTemp3
echo "$url_CPUTemp3"
curl -s $url_CPUTemp3 > /dev/null 2>&1
! url_CPUTemp4=$URL_set_CPUTemp4$CPUTemp4
echo "$url_CPUTemp4"
curl -s $url_CPUTemp4 > /dev/null 2>&1
! # CPU-Usage
! CPUUsage=$(top -b -n15 -p 1 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' -v prefix="$prefix" '{ split($1, vs, ","); v=vs[length(vs)]; sub("%", "", v); printf "%s%.1f\n", prefix, 100 - v }')
! url_CPUUsage=$URL_set_CPUUsage$CPUUsage
echo "$url_CPUUsage"
curl -s $url_CPUUsage > /dev/null 2>&1
! # CPU-Load-Average
! CPULoad=$(uptime | awk -F'[a-z]:' '{ print $2}' | sed 's/ /%20/g')
! url_CPULoad=$URL_set_CPULoad$CPULoad
echo "$url_CPULoad"
curl -s $url_CPULoad > /dev/null 2>&1
! # Memory Total in Gigabyte
! MemTotalGB=$(free | grep Mem | awk '{printf "%.1f\n", $2/1024/1024}')
! url_MemTotalGB=$URL_set_MemTotalGB$MemTotalGB
echo "$url_MemTotalGB"
curl -s $url_MemTotalGB > /dev/null 2>&1
! # Memory Free in Gigabyte
! MemFreeGB=$(free | grep Mem | awk '{printf "%.1f\n", ($4+$6)/1024/1024}')
! url_MemFreeGB=$URL_set_MemFreeGB$MemFreeGB
echo "$url_MemFreeGB"
curl -s $url_MemFreeGB > /dev/null 2>&1
! # Memory Used in Gigabyte
! MemUsedGB=$(free | grep Mem | awk '{printf "%.1f\n", $3/1024/1024}')
! url_MemUsedGB=$URL_set_MemUsedGB$MemUsedGB
echo "$url_MemUsedGB"
curl -s $url_MemUsedGB > /dev/null 2>&1
! # Memory Free in Prozent
! MemFreePercent=$(free | grep Mem | awk '{printf "%.1f\n", ($4+$6)/$2 * 100.0}')
! url_MemFreePercent=$URL_set_MemFreePercent$MemFreePercent
echo "$url_MemFreePercent"
curl -s $url_MemFreePercent > /dev/null 2>&1
! # Memory Used in Prozent
! MemUsedPercent=$(free | grep Mem | awk '{printf "%.1f\n", $3/$2 * 100.0}')
! url_MemUsedPercent=$URL_set_MemUsedPercent$MemUsedPercent
echo "$url_MemUsedPercent"
curl -s $url_MemUsedPercent > /dev/null 2>&1
! # HDD-Temperaturen in Celsius
! HDDTemp1=$(smartctl -A /dev/sda -d ata | grep Temperature_Celsius | awk '{print $10}')
! url_HDDTemp1=$URL_set_HDDTemp1$HDDTemp1
echo "$url_HDDTemp1"
curl -s $url_HDDTemp1 > /dev/null 2>&1
! HDDTemp2=$(smartctl -A /dev/sda -d ata | grep Temperature_Celsius | awk '{print $10}')
! url_HDDTemp2=$URL_set_HDDTemp2$HDDTemp2
echo "$url_HDDTemp2"
curl -s $url_HDDTemp2 > /dev/null 2>&1
! HDDTemp3=$(smartctl -A /dev/sda -d ata | grep Temperature_Celsius | awk '{print $10}')
! url_HDDTemp3=$URL_set_HDDTemp3$HDDTemp3
echo "$url_HDDTemp3"
curl -s $url_HDDTemp3 > /dev/null 2>&1
! HDDTemp4=$(smartctl -A /dev/sda -d ata | grep Temperature_Celsius | awk '{print $10}')
! url_HDDTemp4=$URL_set_HDDTemp4$HDDTemp4
echo "$url_HDDTemp4"
curl -s $url_HDDTemp4 > /dev/null 2>&1
! HDDTemp5=$(smartctl -A /dev/sda -d ata | grep Temperature_Celsius | awk '{print $10}')
! url_HDDTemp5=$URL_set_HDDTemp5$HDDTemp5
echo "$url_HDDTemp5"
curl -s $url_HDDTemp5 > /dev/null 2>&1
! # Storage-Total Volume 1 in TB
! StorageTotalTB=$(df|awk '/volume1$/{printf "%.2f\n", ($2/1024/1024/1024)}')
! url_StorageTotalTB=$URL_set_StorageTotalTB$StorageTotalTB
echo "$url_StorageTotalTB"
curl -s $url_StorageTotalTB > /dev/null 2>&1
! # Storage-Free Volume 1 in TB
! StorageFreeTB=$(df|awk '/volume1$/{printf "%.2f\n", ($4/1024/1024/1024)}')
! url_StorageFreeTB=$URL_set_StorageFreeTB$StorageFreeTB
echo "$url_StorageFreeTB"
curl -s $url_StorageFreeTB > /dev/null 2>&1
! # Storage-Used Volume 1 in TB
! StorageUsedTB=$(df|awk '/volume1$/{printf "%.2f\n", ($3/1024/1024/1024)}')
! url_StorageUsedTB=$URL_set_StorageUsedTB$StorageUsedTB
echo "$url_StorageUsedTB"
curl -s $url_StorageUsedTB > /dev/null 2>&1
! # Storage-Free Volume 1 in Prozent
! StorageFreePercent=$(df|awk '/volume1$/{printf "%.1f\n", ($4/$2100)}')
! url_StorageFreePercent=$URL_set_StorageFreePercent$StorageFreePercent
echo "$url_StorageFreePercent"
curl -s $url_StorageFreePercent > /dev/null 2>&1
! # Storage-Used Volume 1 in Prozent
! StorageUsedPercent=$(df|awk '/volume1$/{printf "%.1f\n", ($3/$2100)}')
! url_StorageUsedPercent=$URL_set_StorageUsedPercent$StorageUsedPercent
echo "$url_StorageUsedPercent"
curl -s $url_StorageUsedPercent > /dev/null 2>&1
! # Uptime unterteilt in "volle Tage und Stunden"
! UptimeSecs=$(cat /proc/uptime | awk '{printf"%.0f\n", $1}')
UptimeDays=$(($UptimeSecs/86400))
UptimeHours=$((($UptimeSecs/3600)-($UptimeDays24)))
UptimeMinutes=$((($UptimeSecs/60)-($UptimeDays2460)-($UptimeHours60)))
! url_UptimeDays=$URL_set_UptimeDays$UptimeDays
echo "$url_UptimeDays"
curl -s $url_UptimeDays > /dev/null 2>&1
! url_UptimeHours=$URL_set_UptimeHours$UptimeHours
echo "$url_UptimeHours"
curl -s $url_UptimeHours > /dev/null 2>&1
! url_UptimeMinutes=$URL_set_UptimeMinutes$UptimeMinutes
echo "$url_UptimeMinutes"
curl -s $url_UptimeMinutes > /dev/null 2>&1
! # DSM-Version
! Version=$(more /etc.defaults/VERSION | grep productversion | awk -F '=' '{print $2}' | sed 's/"//g')
BuildNumber=$(more /etc.defaults/VERSION | grep buildnumber | awk -F '=' '{print $2}' | sed 's/"//g')
FixNumber=$(more /etc.defaults/VERSION | grep smallfixnumber | awk -F '=' '{print $2}' | sed 's/"//g')
! DSMVersion=$Version"-"$BuildNumber"%20Update%20"$FixNumber
! url_DSMVersion=$URL_set_DSMVersion$DSMVersion
echo "$url_DSMVersion"
curl -s $url_DSMVersion > /dev/null 2>&1
! # Timestamp für letztes Update der Werte
! TimestampDay=$(date +%Y-%m-%d)
TimestampTime=$(date +%H:%M:%S)
! Timestamp=$TimestampDay"%20"$TimestampTime
! url_Timestamp=$URL_set_Timestamp$Timestamp
echo "$url_Timestamp"
curl -s $url_Timestamp > /dev/null 2>&1
! exit 0
! ````
Damit das Ganze funktioniert muss die Zeile | ioBrokerSetURL="http://[IOBROKERIP]:[WEBPORT]/set/javascript.0.synology." | entsprechend angepasst werden. Außerdem muss im web-Adapter die SIMPLE API aktiviert sein.Wenn alles gut läuft, sollte es anschließend im ioBroker etwa so aussehen:
SynologyStates.PNG
MfG,
André `
Ich habe Teile dieses Scriptes jetzt auch verwendet - vielen Dank für die Arbeit!
Und ich nehme mal an, dass ich nicht der erste bin, dem auffällt, dass bei allen Platten immer die selbe Temperatur angezeigt wird. Aber da es hier noch nicht angesprochen wurde …
Im Script wird immer nur "sda" abgefragt. Die Platten heißen aber: sda, sdb, sdc, sdd, usw.
Dann werden auch unterschiedliche Temperaturen angezeigt
Gruß
Thomas
-
Ich versuche mich jetzt auch daran. Von der Synology kommt die Fehlermeldung wenn ich das Script ausführen lasse:
Standardausgabe/Fehler: sh: /volume1/homes/systeminfo_iobroker.sh: /bin/bash^M: bad interpreter: No such file or directory
Unter Eigenschaften der sh-Datei wird mir das gleiche Verzeichnis angezeigt: /volume1/homes/systeminfo_iobroker.sh
Jemand eine Idee?
Erstellt habe ich unter Windows mit dem Editor. txt habe ich gegen sh ausgetausch. Geht das so?
-
UNIX-Scripte am besten nie mit Windowseditor erstellen da die das Zeilenende anders formatieren.
Nimm am besten Notepad++
Das ist kostenlos.
Gruß
Johnny
-
UNIX-Scripte am besten nie mit Windowseditor erstellen da die das Zeilenende anders formatieren.
Nimm am besten Notepad++
Das ist kostenlos.
Gruß
Johnny `
mit notepad++ hat sich nichts geändert.Welchen Port muss ich denn einstellen im Script?
admin.0 hat bei mir 8081 mit https… zum Testen hab ich es jetzt auf http und Port im Router geschlossen.
web.1 hat Port 8083 mit http für vis local
web.2 hat Port 443 mit https für vis extern
-
mit notepad++ hat sich nichts geändert. `
in deinem letzten post ist im Code ein ^MDies ist ein Windows Zeilenumbruch.
Bei notepad++ musst du unten rechts nachsehen ob da Windows oder UNIX steht.
Wenn da noch Windows steht musst du den Editor auf UNIX umstellen.
Gruß
Rainer
-
Hab genau das gleiche Problem
sh: /volume1/homes/Andy/IobrokerState/sysinfo_iobroker.sh: /bin/bash^M: bad interpreter: No such file or directory
Sowieso Notepad und der steht auch auf Unix
OT: @lobomau:
Wiso hab ich eigentlich immer die gleichen Fehler wie du, egal welches Thema :?:
-
mit notepad++ hat sich nichts geändert. `
in deinem letzten post ist im Code ein ^MDies ist ein Windows Zeilenumbruch.
Bei notepad++ musst du unten rechts nachsehen ob da Windows oder UNIX steht.
Wenn da noch Windows steht musst du den Editor auf UNIX umstellen.
Gruß
Rainer `
Danke, ein Fehler weniger. Es kommt jetzt keine Email mehr von der Synology, dass ein Fehler aufgetreten ist.Aber die Werte werden nicht gefüllt.
Im Script stelle ich doch den Port 8081 ein also den mit dem ich auf die admin-Seite vom ioBroker komme, richtig?
In der Synology habe ich im Aufgabenplaner admin als Benutzer genommen, der darf alles.
Schließlich habe ich nur eine DS215j.
Kann es an einer dieser Dinge liegen?
-
Hab genau das gleiche Problem
sh: /volume1/homes/Andy/IobrokerState/sysinfo_iobroker.sh: /bin/bash^M: bad interpreter: No such file or directory
Sowieso Notepad und der steht auch auf Unix
OT: @lobomau:
Wiso hab ich eigentlich immer die gleichen Fehler wie du, egal welches Thema :?: `
Die Umstellung auf UNIX war bei mir erfolgreich. Habe es extra nochmal zurück ausprobiert und auf Windows gestellt, da kam der selbe Fehler wieder. -
Was müsste ich im Script anpassen, damit der CPULoad nicht in einer einzelnen Zeile sondern pro Wert 1 Min, 5 Min und 15Min gesetzt werden?
Besten Dank für die Hilfe.
-
Was müsste ich im Script anpassen, damit der CPULoad nicht in einer einzelnen Zeile sondern pro Wert 1 Min, 5 Min und 15Min gesetzt werden?
Besten Dank für die Hilfe. `
Ist dir bekannt das für Synology ein eigene adapter gibts?
-
Ist dir bekannt das für Synology ein eigene adapter gibts? `
Welchen man nicht benutzen sollte da dieser nach max 5 Tagen den Synology aufhängt wegen memory leaks!
Siehe thread zu dem Synology adapter
Sent from my iPhone using Tapatalk