NEWS
[gelöst] Synology Systeminformationen auslesen und auf VIS darstellen
-
Super! Ich danke Dir schon einmal dafür!
Gesendet von iPad mit Tapatalk
-
Versuch mal so:
tmp1=$(cat /sys/bus/platform/devices/coretemp.0/temp2_input) tmp2=`expr $tmp1 / 1000`
Achte auf die `das sind Rückwärtshochkomma
` richtig
´ falsch
' auch falsch
-
Versuch mal so:
tmp1=$(cat /sys/bus/platform/devices/coretemp.0/temp2_input) tmp2=`expr $tmp1 / 1000`
Achte auf die `das sind Rückwärtshochkomma
` richtig
´ falsch
' auch falsch `
Danke für die ausführliche Erklärung! Ein Linux DAUs wie ich ist dann über die Kleinigkeit gestolpert, dass zwischen dem = und dem `KEIN Leerzeichen sein darf. Hab es zuerst die ganze Zeit mit dem Leerzeichen probiert.
Funktioniert! Ich danke Dir!
-
Super sache
nachdem ich nun meine DS412+ mit dem aktuellen Update versehen habe konnte ich den Script auch testen
Erst VAR anlegen
Dann Script erstellen
Dann Aufgabe erstellt
Nun sind die indos im ioBroker
THX für die Idee
Gruß
Jürgen
-
Danke für die ausführliche Erklärung! Ein Linux DAUs wie ich ist dann über die Kleinigkeit gestolpert, dass zwischen dem = und dem `KEIN Leerzeichen sein darf. Hab es zuerst die ganze Zeit mit dem Leerzeichen probiert.
Funktioniert! Ich danke Dir! `
Stimmt, das ist mir dann hinterher noch eingefallen… die Shells sind da manchmal etwas zickig. Mal MÜSSEN Leerzeichen da sein (vor und nach dem '/' ) und manchmal dürfen KEINE da sein (zwischen Variable und '=' usw.)
Kannst du nochmal zu deinem ersten Beitrag gehen, und dem Betreff ein [gelöst] voranstellen?
-
Sorry, hatte leider keine Zeit das Script zu schicken!
In der jetzigen Version hab ich noch mit UpTime gespielt!
Ich lese es jetzt nicht mehr über uptime aus sonder ich hole mir die Systemsekunden-Uptimezeit
und rechne die in Tage und Stunden um!
#!/bin/sh ### Scriptname: sysinfo.sh ### Kurzbeschreibung: Ermitteln von Systemwerten der Sysnology DS214 und übertragen an ioBroker ### Ersteller: Prinzeisenherz1 (Schneider Johnny) am 14032016 ### ### Script in ein Verzeichnis auf der Synology ablegen. z.B. /volume1/backup/scripte ### ### Script ausfürbar machen: chmod +x /volume1/backup/scripte/sysinfo.sh ### ### Im Aufgabenplaner eine Benutzerdefinierte Aufgabe anlegen ### Dort ausführen als root ### Scriptaufruf: /volume1/backup/scripte/sysinfo.sh ### Timer: täglich alle 5 Minuten ### ######################################################### ### Lokale Variablen anlegen ioBrokerIP="<ip-iobroker:<port>" echo "ip "$ioBrokerIP URL_set_Temp="http://"$ioBrokerIP"/set/javascript.0.Synology.Temp?value=" URL_set_MemTotal="http://"$ioBrokerIP"/set/javascript.0.Synology.MemTotal?value=" URL_set_MemFree="http://"$ioBrokerIP"/set/javascript.0.Synology.MemFree?value=" URL_set_MemUsed="http://"$ioBrokerIP"/set/javascript.0.Synology.MemUsed?value=" URL_set_MemFreePercent="http://"$ioBrokerIP"/set/javascript.0.Synology.MemFreePercent?value=" URL_set_MemUsedPercent="http://"$ioBrokerIP"/set/javascript.0.Synology.MemUsedPercent?value=" URL_set_Uptime_day="http://"$ioBrokerIP"/set/javascript.0.Synology.UptimeDay?value=" URL_set_Uptime_hour="http://"$ioBrokerIP"/set/javascript.0.Synology.UptimeHour?value=" ### CPU Temperatur ermitteln und an ioBroker übertragen tmp1=$(cat /sys/bus/platform/devices/axp-temp.0/temp1_input) ### Gesamtspeicherplatz volume1 in Gigabyte ermitteln und an ioBroker übertragen tmp2=$(df|awk '/volume1$/{printf($2/1024/1024)}') ### Freier Speicherplatz volume1 in Gigabyte ermitteln und an ioBroker übertragen tmp3=$(df|awk '/volume1$/{printf($4/1024/1024)}') ### Belegter Speicherplatz volume1 in Gigabyte ermitteln und ioBroker übertragen tmp4=$(df|awk '/volume1$/{printf($3/1024/1024)}') ### Freier Speicherplatz volume1 in Prozent ermitteln und an ioBroker übertragen tmp5=$(df|awk '/volume1$/{printf($4/$2*100)}') ### Belegter Speicherplatz volume1 in Prozent ermitteln und an ioBroker übertragen tmp6=$(df|awk '/volume1$/{printf($3/$2*100)}') ### UpTime in Tage und Stunden ermitteln und an ioBroker übertragen #tmp7=$(uptime | awk '{printf($3)}') tmp7=$(cat /proc/uptime | awk '{printf"%.0f\n", $1}') ############################################################################################## days=$(($tmp7 / 86400 )) hours=$((($tmp7 / 3600) - (days * 24))) ############################################################################################## ####### Sende CPU-Temperatur an ioBroker url_tmp1=$URL_set_Temp$tmp1 echo "$url_tmp1" curl -s $url_tmp1 > /dev/null 2>&1 ################################################################################################ ####### Sende Gesamtspeicherplatz in Gigabyte an ioBroker url_tmp2=$URL_set_MemTotal$tmp2 echo "$url_tmp2" curl -s $url_tmp2 > /dev/null 2>&1 ################################################################################################ ####### Sende freien Speicherplatz in Gigabyte an ioBroker url_tmp3=$URL_set_MemFree$tmp3 echo "$url_tmp3" curl -s $url_tmp3 > /dev/null 2>&1 ################################################################################################ ####### Sende belegter Speicherplatz in Gigabyte an ioBroker url_tmp4=$URL_set_MemUsed$tmp4 echo "$url_tmp4" curl -s $url_tmp4 > /dev/null 2>&1 ################################################################################################ ####### Sende freien Speicherplatz in Prozent an ioBroker url_tmp5=$URL_set_MemFreePercent$tmp5 echo "$url_tmp5" curl -s $url_tmp5 > /dev/null 2>&1 ################################################################################################ ####### Sende belegter Speicherplatz in Prozent an ioBroker url_tmp6=$URL_set_MemUsedPercent$tmp6 echo "$url_tmp6" curl -s $url_tmp6 > /dev/null 2>&1 ################################################################################################ ####### Sende UpTime an ioBroker url_days=$URL_set_Uptime_day$days echo "$url_days" curl -s $url_days > /dev/null 2>&1 ################################################################################################ url_hours=$URL_set_Uptime_hour$hours echo "$url_hours" curl -s $url_hours > /dev/null 2>&1 ################################################################################################</ip-iobroker:<port>
Gruß
Johnny
-
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