foreach ($devs as $dev):
diff --git a/emhttp/plugins/dynamix/include/SmartInfo.php b/emhttp/plugins/dynamix/include/SmartInfo.php
index 7628fd840..5ed632b70 100644
--- a/emhttp/plugins/dynamix/include/SmartInfo.php
+++ b/emhttp/plugins/dynamix/include/SmartInfo.php
@@ -59,9 +59,9 @@ case "attributes":
$events = explode('|',get_value($disk,'smEvents',$numbers));
extract(parse_plugin_cfg('dynamix',true));
$nvme = _var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['cctemp'] : -1;
- $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($nvme => 0 ? $nvme : (_var($display,'max',-1)>=0 ? $display['max'] : 0));
+ $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($nvme>=0 ? $nvme : (_var($display,'max',-1)>=0 ? $display['max'] : 0));
$nvme = _var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['wctemp'] : -1;
- $hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($nvme => 0 ? $nvme : (_var($display,'hot',-1)>=0 ? $display['hot'] : 0));
+ $hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($nvme>=0 ? $nvme : (_var($display,'hot',-1)>=0 ? $display['hot'] : 0));
$top = $_POST['top'] ?? 120;
$empty = true;
exec("smartctl -n standby -A $type ".escapeshellarg("/dev/$port"),$output);
diff --git a/emhttp/plugins/dynamix/include/Wrappers.php b/emhttp/plugins/dynamix/include/Wrappers.php
index be649cd79..8355a2ca2 100644
--- a/emhttp/plugins/dynamix/include/Wrappers.php
+++ b/emhttp/plugins/dynamix/include/Wrappers.php
@@ -114,31 +114,23 @@ function isSubpool($name) {
return in_array($subpool,$subpools) ? $subpool : false;
}
function get_nvme_powerstate($device) {
- global $display;
- $nvme = [];
- $number = _var($display,'number','.,');
- exec("nvme id-ctrl /dev/$device | grep -E '^(ps|[wc]ctemp) '",$rows);
+ $nvme = [];
+ $state = hexdec(my_explode(':',exec("nvme get-feature /dev/$device -f 2"),3)[2]);
+ exec("nvme id-ctrl /dev/$device | grep -E '^ps $state |[wc]ctemp '",$rows);
foreach ($rows as $row) {
if (!$row) continue;
$value = my_explode(':',$row,3);
- $entry = str_replace(' ','',trim($value[0]));
+ $entry = trim($value[0]);
switch ($entry){
case 'wctemp':
case 'cctemp':
$nvme[$entry] = $value[1] - 273; // kelvin -> celsius
break;
- case 'ps0':
- case 'ps1':
- case 'ps2':
- case 'ps3':
- case 'ps4':
- case 'ps5':
- $nvme[$entry] = number_format(strtok($value[2],'W'),2,$number[0]).' W';
+ default:
+ $nvme['power'] = strtok($value[2],'W');
break;
}
}
- $nvme['powerstate'] = hexdec(my_explode(':',exec("nvme get-feature /dev/$device -f 2"),3)[2]);
- $nvme['powerstatevalue'] = _var($nvme,'ps'.$nvme['powerstate']);
return $nvme;
}
// convert strftime to date format
diff --git a/emhttp/plugins/dynamix/nchan/device_list b/emhttp/plugins/dynamix/nchan/device_list
index bbb890d16..4966bd7f9 100755
--- a/emhttp/plugins/dynamix/nchan/device_list
+++ b/emhttp/plugins/dynamix/nchan/device_list
@@ -33,11 +33,16 @@ require_once "$docroot/webGui/include/Translations.php";
$locale_init = $locale;
function initSum() {
- return ['count'=>0, 'temp'=>0, 'fsSize'=>0, 'fsUsed'=>0, 'fsFree'=>0, 'ioReads'=>0, 'ioWrites'=>0, 'numReads'=>0, 'numWrites'=>0, 'numErrors'=>0];
+ return ['count'=>0, 'temp'=>0, 'power'=>0, 'fsSize'=>0, 'fsUsed'=>0, 'fsFree'=>0, 'ioReads'=>0, 'ioWrites'=>0, 'numReads'=>0, 'numWrites'=>0, 'numErrors'=>0];
}
function model($id) {
return substr($id,0,strrpos($id,'_'));
}
+function power($power) {
+ global $display;
+ $number = _var($display,'number','.,');
+ return $power ? ' / '.number_format($power,2,$number[0]).' W' : '';
+}
function device_info(&$disk,$online) {
global $pools, $var, $crypto;
if (!$online || _var($disk,'fsStatus')!='Mounted' || (in_array(_var($disk,'type'),['Parity','Cache']) && (!in_array(_var($disk,'name'),$pools) || isSubpool(_var($disk,'name'))))) {
@@ -115,12 +120,7 @@ function device_desc(&$disk) {
$log = _var($var,'fsState')=='Started'
? ""._('Disk Log Information').""
: "";
- $powerstatevalue = "";
- if (_var($var,'fsState',)=='Started' && _var($disk,'transport')=='nvme') {
- $nvme = get_nvme_powerstate(_var($disk,'device'));
- $powerstatevalue = ' • '._var($nvme,'powerstatevalue','? W');
- }
- return $log."".my_id(_var($disk,'id'))." - $size $unit ("._var($disk,'device').$powerstatevalue.")";
+ return $log."".my_id(_var($disk,'id'))." - $size $unit ("._var($disk,'device').")";
}
function assignment(&$disk) {
global $var, $devs;
@@ -180,6 +180,7 @@ function my_diskio($data) {
}
function array_offline(&$disk, $pool='') {
global $var, $disks;
+ $disk['power'] ??= (_var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['power'] : 0);
$echo = []; $warning = '';
$status = ['DISK_DSBL','DISK_INVALID','DISK_DSBL_NEW','DISK_NEW','DISK_WRONG'];
$text = ""._('All existing data on this device will be OVERWRITTEN when array is Started')."";
@@ -214,7 +215,7 @@ function array_offline(&$disk, $pool='') {
case 'DISK_NEW':
$echo[] = "| ".device_info($disk,false)." | ";
$echo[] = "".assignment($disk)." | ";
- $echo[] = "".my_temp(_var($disk,'temp','*'))." | ";
+ $echo[] = "".my_temp(_var($disk,'temp','*')).power($disk['power'])." | ";
if ($warning) {
$echo[] = "$warning | ";
} else {
@@ -241,6 +242,7 @@ function array_offline(&$disk, $pool='') {
}
function array_online(&$disk, $fstype='') {
global $pools, $sum, $diskio;
+ $disk['power'] ??= (_var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['power'] : 0);
$echo = [];
$data = [0,0];
if (_var($disk,'device')) {
@@ -253,6 +255,7 @@ function array_online(&$disk, $fstype='') {
$sum['count']++;
$sum['temp'] += $disk['temp'];
}
+ $sum['power'] += _var($disk,'power',0);
$sum['numReads'] += _var($disk,'numReads',0);
$sum['numWrites'] += _var($disk,'numWrites',0);
$sum['numErrors'] += _var($disk,'numErrors',0);
@@ -281,7 +284,7 @@ function array_online(&$disk, $fstype='') {
default:
$echo[] = "".device_info($disk,true)." | ";
$echo[] = "".device_desc($disk)." | ";
- $echo[] = "".my_temp(_var($disk,'temp','*'))." | ";
+ $echo[] = "".my_temp(_var($disk,'temp','*')).power($disk['power'])." | ";
$echo[] = "".my_diskio($data[0])."".my_number(_var($disk,'numReads',0))." | ";
$echo[] = "".my_diskio($data[1])."".my_number(_var($disk,'numWrites',0))." | ";
$echo[] = "".my_number(_var($disk,'numErrors',0))." | ";
@@ -293,6 +296,7 @@ function array_online(&$disk, $fstype='') {
}
function show_totals($text,$array,$name) {
global $var, $display, $sum, $locale;
+ $number = _var($display,'number','.,');
$ctrl1 = "onclick=\"toggle_state('Device','$name','down')\"";
$ctrl2 = "onclick=\"toggle_state('Device','$name','up')\"";
$help1 = _('Spin Down').' '._(ucfirst(substr($name,0,-1)));
@@ -301,7 +305,7 @@ function show_totals($text,$array,$name) {
$echo[] = "";
$echo[] = "| $help1$help2 | ";
$echo[] = "$text | ";
- $echo[] = "".($sum['count']>0 ? my_temp(round($sum['temp']/$sum['count'],1)) : '*')." | ";
+ $echo[] = "".($sum['count']>0 ? my_temp(round($sum['temp']/$sum['count'],1)) : '*').power($sum['power'])." | ";
$echo[] = "".my_diskio($sum['ioReads'])."".my_number($sum['numReads'])." | ";
$echo[] = "".my_diskio($sum['ioWrites'])."".my_number($sum['numWrites'])." | ";
$echo[] = "".my_number($sum['numErrors'])." | ";
diff --git a/emhttp/plugins/dynamix/nchan/update_2 b/emhttp/plugins/dynamix/nchan/update_2
index 1a1fa8d9d..fe38056ee 100755
--- a/emhttp/plugins/dynamix/nchan/update_2
+++ b/emhttp/plugins/dynamix/nchan/update_2
@@ -160,9 +160,9 @@ function device_temp(&$disk, &$red, &$orange) {
$spin = strpos(_var($disk,'color'),'blink')===false;
$temp = _var($disk,'temp','*');
$nvme = _var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['cctemp'] : -1;
- $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($nvme => 0 ? $nvme : (_var($display,'max',-1)>=0 ? $display['max'] : 0));
+ $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($nvme>=0 ? $nvme : (_var($display,'max',-1)>=0 ? $display['max'] : 0));
$nvme = _var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['wctemp'] : -1;
- $hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($nvme => 0 ? $nvme : (_var($display,'hot',-1)>=0 ? $display['hot'] : 0));
+ $hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($nvme>=0 ? $nvme : (_var($display,'hot',-1)>=0 ? $display['hot'] : 0));
$top = $display['top'] ?? 120;
$heat = false; $color = 'green';
if (exceed($temp,$max,$top)) {
diff --git a/emhttp/plugins/dynamix/scripts/monitor b/emhttp/plugins/dynamix/scripts/monitor
index 8ed8efbbc..e7e67878e 100755
--- a/emhttp/plugins/dynamix/scripts/monitor
+++ b/emhttp/plugins/dynamix/scripts/monitor
@@ -48,9 +48,9 @@ function check_temp(&$disk,$text,$info) {
$named = no_tilde($name);
$temp = _var($disk,'temp','*');
$nvme = _var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['cctemp'] : -1;
- $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($nvme => 0 ? $nvme : (_var($display,'max',-1)>=0 ? $display['max'] : 0));
+ $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($nvme>=0 ? $nvme : (_var($display,'max',-1)>=0 ? $display['max'] : 0));
$nvme = _var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['wctemp'] : -1;
- $hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($nvme => 0 ? $nvme : (_var($display,'hot',-1)>=0 ? $display['hot'] : 0));
+ $hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($nvme>=0 ? $nvme : (_var($display,'hot',-1)>=0 ? $display['hot'] : 0));
$warn = exceed($temp,$max,$top) ? 'alert' : (exceed($temp,$hot,$top) ? 'warning' : false);
$item = 'temp';
$last = $saved[$item][$named] ?? 0;
diff --git a/emhttp/plugins/dynamix/scripts/statuscheck b/emhttp/plugins/dynamix/scripts/statuscheck
index e54fd7b18..fc7361513 100755
--- a/emhttp/plugins/dynamix/scripts/statuscheck
+++ b/emhttp/plugins/dynamix/scripts/statuscheck
@@ -95,9 +95,9 @@ function my_array(&$disk) {
global $data,$display,$error0,$error1,$error2,$error3;
$name = _var($disk,'name');
$nvme = _var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['cctemp'] : -1;
- $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($nvme => 0 ? $nvme : (_var($display,'max',-1)>=0 ? $display['max'] : 0));
+ $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($nvme>=0 ? $nvme : (_var($display,'max',-1)>=0 ? $display['max'] : 0));
$nvme = _var($disk,'transport')=='nvme' ? get_nvme_powerstate(_var($disk,'device'))['wctemp'] : -1;
- $hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($nvme => 0 ? $nvme : (_var($display,'hot',-1)>=0 ? $display['hot'] : 0));
+ $hot = _var($disk,'hotTemp',-1)>=0 ? $disk['hotTemp'] : ($nvme>=0 ? $nvme : (_var($display,'hot',-1)>=0 ? $display['hot'] : 0));
if (strpos(_var($disk,'status'),'_NP')!==false) return false;
$temp = _var($disk,'temp');
if ($max>0 && $temp>=$max) {