Subversion Repositories ALCASAR

Rev

Rev 3179 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log

Rev 3179 Rev 3287
Line 13... Line 13...
13
 * @link      http://phpsysinfo.sourceforge.net
13
 * @link      http://phpsysinfo.sourceforge.net
14
 */
14
 */
15
class LMSensors extends Sensors
15
class LMSensors extends Sensors
16
{
16
{
17
    /**
17
    /**
18
     * content to parse
18
     * array of values
19
     *
19
     *
20
     * @var array
20
     * @var array
21
     */
21
     */
22
    private $_lines = array();
22
    private $_values = array();
23
 
23
 
24
    /**
24
    /**
25
     * fill the private content var through command or data access
25
     * fill the private content var through command or data access
26
     */
26
     */
27
    public function __construct()
27
    public function __construct()
Line 40... Line 40...
40
        default:
40
        default:
41
            $this->error->addConfigError('__construct()', '[sensor_lmsensors] ACCESS');
41
            $this->error->addConfigError('__construct()', '[sensor_lmsensors] ACCESS');
42
        }
42
        }
43
 
43
 
44
        if (trim($lines) !== "") {
44
        if (trim($lines) !== "") {
-
 
45
            $lines = str_replace("\r\n", "\n", $lines);
45
            $lines = str_replace(":\n", ":", $lines);
46
            $lines = str_replace(":\n", ":", $lines);
46
            $lines = str_replace("\n\n", "\n", $lines);
47
            $lines = str_replace("\n\n", "\n", $lines);
-
 
48
            $lines = preg_replace("/\n\s+\(/m", " (", $lines);
47
            $this->_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY);
49
            $_lines = preg_split("/\n/", $lines, -1, PREG_SPLIT_NO_EMPTY);
-
 
50
 
-
 
51
            $applearray1 = array(
-
 
52
                              "A" => "Ambient",
-
 
53
                              "B" => "Battery",
-
 
54
                              "C" => "CPU",
-
 
55
                              "G" => "GPU",
-
 
56
                              "H" => "Harddisk Bay",
-
 
57
                              "h" => "Heatpipe",
-
 
58
                              "L" => "LCD",
-
 
59
                              "M" => "Memory",
-
 
60
                              "m" => "Memory Contr.",
-
 
61
                              "N" => "Northbridge",
-
 
62
                              "O" => "Optical Drive",
-
 
63
                              "p" => "Power supply",
-
 
64
                              "S" => "Slot",
-
 
65
                              "s" => "Slot",
-
 
66
                              "W" => "Airport"
-
 
67
                       );
-
 
68
            $applearray3 = array(
-
 
69
                              "H" => "Heatsink",
-
 
70
                              "P" => "Proximity",
-
 
71
                              "D" => "Die"
-
 
72
                           );
-
 
73
 
-
 
74
            $tmpvalue=array();
-
 
75
            $applesmc = false;
-
 
76
            $sname = '';
-
 
77
            foreach ($_lines as $line) {
-
 
78
                if ((trim($line) !== "") && (strpos($line, ':') === false)) {
-
 
79
                    if (sizeof($tmpvalue)>0) {
-
 
80
                        $this->_values[] = $tmpvalue;
-
 
81
                        $tmpvalue = array();
-
 
82
                    }
-
 
83
                    $sname = trim($line);
-
 
84
                    $applesmc =  ($sname === "applesmc-isa-0300");
-
 
85
                    if (preg_match('/^([^-]+)-/', $sname, $snamebuf)) {
-
 
86
                        $sname = $snamebuf[1];
-
 
87
                    } else {
-
 
88
                        $sname = '';
-
 
89
                    }
-
 
90
                } else {
-
 
91
                    if (preg_match("/^(.+):(.+)$/", trim($line), $data) && ($data[1]!=="Adapter")) {
-
 
92
                        if ($applesmc && (strlen($data[1]) == 4) && ($data[1][0] == "T")) {
-
 
93
                            if (isset($applearray1[$data[1][1]])) $data[1] .= " ".$applearray1[$data[1][1]];
-
 
94
                            if (isset($applearray3[$data[1][3]])) $data[1] .= " ".$applearray3[$data[1][3]];
-
 
95
                        }
-
 
96
 
-
 
97
                        $arrtemp=array();
-
 
98
                        if ($sname !== "" ) {
-
 
99
                            $arrtemp["name"] = $data[1]." (".$sname.")";
-
 
100
                        } else {
-
 
101
                            $arrtemp["name"] = $data[1];
-
 
102
                        }
-
 
103
                        if (preg_match("/^([^\(]+)\s+\(/", $data[2], $tmp) || preg_match("/^(.+)\s+ALARM$/", $data[2], $tmp)) {
-
 
104
                            if (($tmp[1] = trim($tmp[1])) == "") {
-
 
105
                                $arrtemp["value"] = "ALARM";
-
 
106
                            } else {
-
 
107
                                $arrtemp["value"] = $tmp[1];
-
 
108
                            }
-
 
109
                            if (preg_match("/\s(ALARM)\s*$/", $data[2]) || preg_match("/\s(ALARM)\s+\(/", $data[2]) || preg_match("/\s(ALARM)\s+sensor\s+=/", $data[2])) {
-
 
110
                                $arrtemp["alarm"]="ALARM";
-
 
111
                            }
-
 
112
 
-
 
113
                            if (preg_match_all("/\(([^\)]+\s+=\s+[^\)]+)\)/", $data[2], $tmp2)) foreach ($tmp2[1] as $tmp3) {
-
 
114
                                    $arrtmp3 = preg_split('/,/', $tmp3);
-
 
115
                                foreach ($arrtmp3 as $tmp4) if (preg_match("/^(\S+)\s+=\s+(.*)$/", trim($tmp4), $tmp5)) {
-
 
116
                                    $arrtemp[$tmp5[1]]=trim($tmp5[2]);
-
 
117
                                }
-
 
118
                            }
-
 
119
                        } else {
-
 
120
                            $arrtemp["value"] = trim($data[2]);
-
 
121
                        }
-
 
122
                        $tmpvalue[] = $arrtemp;
-
 
123
                    }
-
 
124
                }
-
 
125
            }
-
 
126
            if (sizeof($tmpvalue)>0) $this->_values[] = $tmpvalue;
48
        }
127
        }
49
    }
128
    }
50
 
129
 
51
    /**
130
    /**
52
     * get temperature information
131
     * get temperature information
53
     *
132
     *
54
     * @return void
133
     * @return void
55
     */
134
     */
56
    private function _temperature()
135
    private function _temperature()
57
    {
136
    {
58
        $applesmc = false;
-
 
59
        $sname = '';
-
 
60
        foreach ($this->_lines as $line) {
137
        foreach ($this->_values as $sensors) foreach ($sensors as $sensor){
61
            if ((trim($line) !== "") && (strpos($line, ':') === false)) {
-
 
62
                //$applesmc = preg_match("/^applesmc-/", $line);
-
 
63
                $sname = trim($line);
138
            if (isset($sensor["value"])) {
64
                $applesmc =  ($sname === "applesmc-isa-0300");
-
 
65
                if (preg_match('/^([^-]+)-/', $sname, $snamebuf)) {
-
 
66
                    $sname = ' ('.$snamebuf[1].')';
-
 
67
                } else {
-
 
68
                    $sname = '';
139
                $limit = "";
69
                }
-
 
70
            }
-
 
71
            $data = array();
-
 
72
            if (preg_match("/^(.+):(.+)[^\w\r\n\t]C\s*\((.+)=(.+)[^\w\r\n\t]C,(.+)=(.+)[^\w\r\n\t]C\)(.*)\)/", $line, $data)) {
-
 
73
                ;
-
 
74
            } elseif (preg_match("/^(.+):(.+)[^\w\r\n\t]C\s*\((.+)=(.+)[^\w\r\n\t]C,(.+)=(.+)[^\w\r\n\t]C\)(.*)/", $line, $data)) {
-
 
75
                ;
-
 
76
            } elseif (preg_match("/^(.+):(.+)[^\w\r\n\t]C\s*\((.+)=(.+)[^\w\r\n\t]C\)(.*)/", $line, $data)) {
-
 
77
                ;
-
 
78
            } elseif (preg_match("/^(.+):\s*(FAULT)\s*\((.+)=(.+)[^\w\r\n\t]C,(.+)=(.+)[^\w\r\n\t]C\)(.*)\)/", $line, $data)) {
-
 
79
                ;
-
 
80
            } elseif (preg_match("/^(.+):\s*(FAULT)\s*\((.+)=(.+)[^\w\r\n\t]C,(.+)=(.+)[^\w\r\n\t]C\)(.*)/", $line, $data)) {
-
 
81
                ;
-
 
82
            } elseif (preg_match("/^(.+):\s*(FAULT)\s*\((.+)=(.+)[^\w\r\n\t]C\)(.*)/", $line, $data)) {
-
 
83
                ;
-
 
84
            } elseif (preg_match("/^(.+):(.+)[^\w\r\n\t]C\s*\(/", $line, $data)) {
140
                if (preg_match("/^\+?(-?[\d\.]+)[^\w\r\n\t]+C$/", $sensor["value"], $tmpbuf) || 
85
                ;
-
 
86
            } elseif (preg_match("/^(.+):(.+)[^\w\r\n\t]C\s+\D+/", $line, $data)) {
141
                   ((isset($sensor[$limit="crit"]) || isset($sensor[$limit="high"]) || isset($sensor[$limit="hyst"])) && preg_match("/^\+?(-?[\d\.]+)[^\w\r\n\t]+C$/", $sensor[$limit]))) {
87
                ;
-
 
88
            } else {
142
                    $dev = new SensorDevice();
89
                preg_match("/^(.+):(.+)[^\w\r\n\t]C\r?$/", $line, $data);
143
                    $dev->setName($sensor["name"]);
90
            }
-
 
91
            if (count($data)>2) {
144
                    if ($limit != "") {
92
                foreach ($data as $key=>$value) {
145
                        $dev->setValue($sensor["value"]);
93
                    if (preg_match("/^\+?(-?[0-9\.]+).?$/", trim($value), $newvalue)) {
-
 
94
                        $data[$key] = floatval($newvalue[1]);
146
                        $dev->setEvent("FAULT");
95
                    } else {
147
                    } else {
96
                        $data[$key] = trim($value);
-
 
97
                    }
-
 
98
                }
-
 
99
                if ($applesmc && (strlen($data[1]) == 4)) {
-
 
100
                    if ($data[1][0] == "T") {
-
 
101
                        if ($data[1][1] == "A") {
148
                        if ($tmpbuf[1] == -110.8) {
102
                            $data[1] = $data[1] . " Ambient";
-
 
103
                        } elseif ($data[1][1] == "B") {
-
 
104
                            $data[1] = $data[1] . " Battery";
-
 
105
                        } elseif ($data[1][1] == "C") {
-
 
106
                            $data[1] = $data[1] . " CPU";
149
                            $dev->setValue("FAULT");
107
                        } elseif ($data[1][1] == "G") {
-
 
108
                            $data[1] = $data[1] . " GPU";
150
                            $dev->setEvent("FAULT");
109
                        } elseif ($data[1][1] == "H") {
-
 
110
                            $data[1] = $data[1] . " Harddisk Bay";
-
 
111
                        } elseif ($data[1][1] == "h") {
-
 
112
                            $data[1] = $data[1] . " Heatpipe";
-
 
113
                        } elseif ($data[1][1] == "L") {
151
                        } else {
114
                            $data[1] = $data[1] . " LCD";
152
                            $dev->setValue(floatval($tmpbuf[1]));
115
                        } elseif ($data[1][1] == "M") {
-
 
116
                            $data[1] = $data[1] . " Memory";
-
 
117
                        } elseif ($data[1][1] == "m") {
-
 
118
                            $data[1] = $data[1] . " Memory Contr.";
153
                            if (isset($sensor["alarm"])) $dev->setEvent("ALARM");
119
                        } elseif ($data[1][1] == "N") {
-
 
120
                            $data[1] = $data[1] . " Northbridge";
-
 
121
                        } elseif ($data[1][1] == "O") {
-
 
122
                            $data[1] = $data[1] . " Optical Drive";
-
 
123
                        } elseif ($data[1][1] == "p") {
-
 
124
                            $data[1] = $data[1] . " Power supply";
-
 
125
                        } elseif ($data[1][1] == "S") {
-
 
126
                            $data[1] = $data[1] . " Slot";
-
 
127
                        } elseif ($data[1][1] == "s") {
-
 
128
                            $data[1] = $data[1] . " Slot";
-
 
129
                        } elseif ($data[1][1] == "W") {
-
 
130
                            $data[1] = $data[1] . " Airport";
-
 
131
                        }
154
                        }
-
 
155
                    }
132
 
156
 
133
                        if ($data[1][3] == "H") {
-
 
134
                            $data[1] = $data[1] . " Heatsink";
157
                    if (isset($sensor[$limit="crit"]) && preg_match("/^\+?(-?[\d\.]+)[^\w\r\n\t]+C$/", $sensor[$limit], $tmpbuf) && (($tmpbuf[1]=floatval($tmpbuf[1])) > 0)) {
135
                        } elseif ($data[1][3] == "P") {
158
                        $dev->setMax(floatval($tmpbuf[1]));
136
                            $data[1] = $data[1] . " Proximity";
159
                    } elseif (isset($sensor[$limit="high"]) && preg_match("/^\+?(-?[\d\.]+)[^\w\r\n\t]+C$/", $sensor[$limit], $tmpbuf) && (($tmpbuf[1]=floatval($tmpbuf[1])) > 0) && ($tmpbuf[1]<65261.8)) {
137
                        } elseif ($data[1][3] == "D") {
160
                        $dev->setMax(floatval($tmpbuf[1]));
138
                            $data[1] = $data[1] . " Die";
-
 
139
                        }
-
 
140
                    }
161
                    }
141
                }
-
 
142
 
162
 
143
                $dev = new SensorDevice();
-
 
144
                $dev->setName($data[1].$sname);
-
 
145
                $dev->setValue($data[2]);
-
 
146
                if (isset($data[6]) && $data[2] <= $data[6]) {
-
 
147
                    $dev->setMax(max($data[4], $data[6]));
-
 
148
                } elseif (isset($data[4]) && $data[2] <= $data[4]) {
-
 
149
                    $dev->setMax($data[4]);
163
                    $this->mbinfo->setMbTemp($dev);
150
                }
-
 
151
                if (preg_match("/\s(ALARM)\s*$/", $line, $evbuf) || preg_match("/\s(ALARM)\s+sensor\s+=/", $line, $evbuf) ||  (($evbuf[1] = $dev->getValue()) === 'FAULT')) {
-
 
152
                    $dev->setEvent($evbuf[1]);
-
 
153
                }
164
                }
154
                $this->mbinfo->setMbTemp($dev);
-
 
155
            }
165
            }
156
        }
166
        }
157
    }
167
    }
158
 
168
 
159
    /**
169
    /**
Line 161... Line 171...
161
     *
171
     *
162
     * @return void
172
     * @return void
163
     */
173
     */
164
    private function _fans()
174
    private function _fans()
165
    {
175
    {
166
        $sname = '';
-
 
167
        foreach ($this->_lines as $line) {
176
        foreach ($this->_values as $sensors) foreach ($sensors as $sensor){
168
            if ((trim($line) !== "") && (strpos($line, ':') === false)) {
-
 
169
                $sname = trim($line);
177
            if (isset($sensor["value"])) {
170
                if (preg_match('/^([^-]+)-/', $sname, $snamebuf)) {
-
 
171
                    $sname = ' ('.$snamebuf[1].')';
-
 
172
                } else {
-
 
173
                    $sname = '';
178
                $limit = "";
174
                }
-
 
175
            }
-
 
176
            $data = array();
-
 
177
            if (preg_match("/^(.+):(.+) RPM\s*\((.+)=(.+) RPM,(.+)=(.+)\)(.*)\)/", $line, $data)) {
-
 
178
                ;
-
 
179
            } elseif (preg_match("/^(.+):(.+) RPM\s*\((.+)=(.+) RPM,(.+)=(.+)\)(.*)/", $line, $data)) {
-
 
180
                ;
-
 
181
            } elseif (preg_match("/^(.+):(.+) RPM\s*\((.+)=(.+) RPM\)(.*)/", $line, $data)) {
-
 
182
                ;
-
 
183
            } elseif (preg_match("/^(.+):\s*(FAULT)\s*\((.+)=(.+) RPM,(.+)=(.+)\)(.*)\)/", $line, $data)) {
-
 
184
                ;
-
 
185
            } elseif (preg_match("/^(.+):\s*(FAULT)\s*\((.+)=(.+) RPM,(.+)=(.+)\)(.*)/", $line, $data)) {
-
 
186
                ;
-
 
187
            } elseif (preg_match("/^(.+):\s*(FAULT)\s*\((.+)=(.+) RPM\)(.*)/", $line, $data)) {
-
 
188
                ;
-
 
189
            } elseif (preg_match("/^(.+):(.+) RPM\s*\(/", $line, $data)) {
179
                if (preg_match("/^(\d+) RPM$/", $sensor["value"], $tmpbuf) ||
190
                ;
-
 
191
            } elseif (preg_match("/^(.+):(.+) RPM\s+\D+/", $line, $data)) {
180
                   ((isset($sensor[$limit="min"]) || isset($sensor[$limit="max"])) && preg_match("/^(\d+) RPM$/", $sensor[$limit]))) {
192
                ;
-
 
193
            } else {
181
                    $dev = new SensorDevice();
194
                preg_match("/^(.+):(.+) RPM\r?$/", $line, $data);
182
                    $dev->setName($sensor["name"]);
195
            }
-
 
196
            if (count($data)>2) {
183
                    if ($limit != "") {
197
                 foreach ($data as $key=>$value) {
184
                        $dev->setValue($sensor["value"]);
198
                    if (preg_match("/^\+?(-?[0-9\.]+).?$/", trim($value), $newvalue)) {
-
 
199
                        $data[$key] = floatval($newvalue[1]);
185
                        $dev->setEvent("FAULT");
200
                    } else {
186
                    } else {
201
                        $data[$key] = trim($value);
187
                        $dev->setValue($tmpbuf[1]);
202
                    }
188
                    }
-
 
189
                    if (isset($sensor["alarm"])) $dev->setEvent("ALARM");
-
 
190
 
-
 
191
                    if (isset($sensor[$limit="min"]) && preg_match("/^(\d+) RPM$/", $sensor[$limit], $tmpbuf) && ($tmpbuf[1] > 0)) {
-
 
192
                        $dev->setMin($tmpbuf[1]);
-
 
193
                    }
-
 
194
 
-
 
195
                    $this->mbinfo->setMbFan($dev);
203
                }
196
                }
204
                $dev = new SensorDevice();
-
 
205
                $dev->setName($data[1].$sname);
-
 
206
                $dev->setValue(trim($data[2]));
-
 
207
                if (isset($data[4])) {
-
 
208
                    $dev->setMin(trim($data[4]));
-
 
209
                }
-
 
210
                if (preg_match("/\s(ALARM)\s*$/", $line, $evbuf) || (($evbuf[1] = $dev->getValue()) === 'FAULT')) {
-
 
211
                    $dev->setEvent($evbuf[1]);
-
 
212
                }
-
 
213
                $this->mbinfo->setMbFan($dev);
-
 
214
            }
197
            }
215
        }
198
        }
216
    }
199
    }
217
 
200
 
-
 
201
 
218
    /**
202
    /**
219
     * get voltage information
203
     * get voltage information
220
     *
204
     *
221
     * @return void
205
     * @return void
222
     */
206
     */
223
    private function _voltage()
207
    private function _voltage()
224
    {
208
    {
225
        $sname = '';
-
 
226
        foreach ($this->_lines as $line) {
209
        foreach ($this->_values as $sensors) foreach ($sensors as $sensor){
227
            if ((trim($line) !== "") && (strpos($line, ':') === false)) {
-
 
228
                $sname = trim($line);
210
            if (isset($sensor["value"])) {
229
                if (preg_match('/^([^-]+)-/', $sname, $snamebuf)) {
-
 
230
                    $sname = ' ('.$snamebuf[1].')';
-
 
231
                } else {
-
 
232
                    $sname = '';
211
                $limit = "";
233
                }
-
 
234
            }
-
 
235
            $data = array();
-
 
236
            if (preg_match("/^(.+):(.+) (m?)V\s*\((.+)=(.+) V,(.+)=(.+) V\)(.*)\)/", $line, $data)) {
-
 
237
                ;
-
 
238
            } elseif (preg_match("/^(.+):(.+) (m?)V\s*\((.+)=(.+) V,(.+)=(.+) V\)(.*)/", $line, $data)) {
-
 
239
                ;
-
 
240
            } elseif (preg_match("/^(.+):\s*(FAULT)()\s*\((.+)=(.+) V,(.+)=(.+) V\)(.*)\)/", $line, $data)) {
-
 
241
                ;
-
 
242
            } elseif (preg_match("/^(.+):\s*(FAULT)()\s*\((.+)=(.+) V,(.+)=(.+) V\)(.*)/", $line, $data)) {
-
 
243
                ;
-
 
244
            } elseif (preg_match("/^(.+):\s*(.+) (m?)V\s*()()\((.+)=(.+) V\)(.*)/", $line, $data)) {
-
 
245
                ;
-
 
246
            } elseif (preg_match("/^(.+):(.+) (m?)V\s*\(/", $line, $data)) {
212
                if (preg_match("/^\+?(-?[\d\.]+) (m?)V$/", $sensor["value"], $tmpbuf) ||
247
                ;
-
 
248
            } elseif (preg_match("/^(.+):(.+) (m?)V\s+\D+/", $line, $data)) {
213
                   ((isset($sensor[$limit="min"]) || isset($sensor[$limit="max"])) && preg_match("/^\+?(-?[\d\.]+) (m?)V$/", $sensor[$limit]))) {
249
                ;
-
 
250
            } else {
214
                    $dev = new SensorDevice();
251
                preg_match("/^(.+):(.+) (m?)V\r?$/", $line, $data);
215
                    $dev->setName($sensor["name"]);
252
            }
-
 
253
 
-
 
254
            if (count($data)>2) {
216
                    if ($limit != "") {
255
                foreach ($data as $key=>$value) {
217
                        $dev->setValue($sensor["value"]);
256
                    if (preg_match("/^\+?(-?[0-9\.]+)$/", trim($value), $newvalue)) {
-
 
257
                        $data[$key] = floatval($newvalue[1]);
218
                        $dev->setEvent("FAULT");
258
                    } else {
219
                    } else {
259
                        $data[$key] = trim($value);
220
                        if ($tmpbuf[2] == "m") { 
-
 
221
                            $dev->setValue(floatval($tmpbuf[1])/1000);
-
 
222
                        } else {
-
 
223
                            $dev->setValue(floatval($tmpbuf[1]));
-
 
224
                        }
260
                    }
225
                    }
-
 
226
                    if (isset($sensor["alarm"])) $dev->setEvent("ALARM");
-
 
227
 
-
 
228
                    if (isset($sensor[$limit="min"]) && preg_match("/^\+?(-?[\d\.]+) (m?)V$/", $sensor[$limit], $tmpbuf)) {
-
 
229
                        $dev->setMin(floatval($tmpbuf[1]));
-
 
230
                    }
-
 
231
 
-
 
232
                    if (isset($sensor[$limit="max"]) && preg_match("/^\+?(-?[\d\.]+) (m?)V$/", $sensor[$limit], $tmpbuf)) {
-
 
233
                       $dev->setMax(floatval($tmpbuf[1]));
-
 
234
                    }
-
 
235
 
-
 
236
                    $this->mbinfo->setMbVolt($dev);
261
                }
237
                }
262
                $dev = new SensorDevice();
-
 
263
                $dev->setName($data[1].$sname);
-
 
264
                if (isset($data[3]) && ($data[3]==='m') && is_float($data[2])) {
-
 
265
                    $dev->setValue($data[2]/1000);
-
 
266
                } else {
-
 
267
                    $dev->setValue($data[2]);
-
 
268
                }
-
 
269
                if (isset($data[5]) && ($data[5]!=='')) {
-
 
270
                    $dev->setMin($data[5]);
-
 
271
                }
-
 
272
                if (isset($data[7])) {
-
 
273
                    $dev->setMax($data[7]);
-
 
274
                }
-
 
275
                if (preg_match("/\s(ALARM)\s*$/", $line, $evbuf) || (($evbuf[1] = $dev->getValue()) === 'FAULT')) {
-
 
276
                    $dev->setEvent($evbuf[1]);
-
 
277
                }
-
 
278
                $this->mbinfo->setMbVolt($dev);
-
 
279
            }
238
            }
280
        }
239
        }
281
    }
240
    }
282
 
241
 
283
    /**
242
    /**
Line 285... Line 244...
285
     *
244
     *
286
     * @return void
245
     * @return void
287
     */
246
     */
288
    private function _power()
247
    private function _power()
289
    {
248
    {
290
        $sname = '';
-
 
291
        foreach ($this->_lines as $line) {
249
        foreach ($this->_values as $sensors) foreach ($sensors as $sensor){
292
            if ((trim($line) !== "") && (strpos($line, ':') === false)) {
-
 
293
                $sname = trim($line);
250
            if (isset($sensor["value"])) {
294
                if (preg_match('/^([^-]+)-/', $sname, $snamebuf)) {
-
 
295
                    $sname = ' ('.$snamebuf[1].')';
-
 
296
                } else {
-
 
297
                    $sname = '';
251
                $limit = "";
298
                }
-
 
299
            }
-
 
300
            $data = array();
-
 
301
/* not tested yet
-
 
302
            if (preg_match("/^(.+):(.+) W\s*\((.+)=(.+) W,(.+)=(.+) W\)(.*)\)/", $line, $data)) {
-
 
303
                ;
-
 
304
            } elseif (preg_match("/^(.+):(.+) W\s*\((.+)=(.+) W,(.+)=(.+) W\)(.*)/", $line, $data)) {
-
 
305
                ;
-
 
306
            } elseif (preg_match("/^(.+):\s*(FAULT)\s*\((.+)=(.+) W,(.+)=(.+) W\)(.*)\)/", $line, $data)) {
-
 
307
                ;
-
 
308
            } elseif (preg_match("/^(.+):\s*(FAULT)\s*\((.+)=(.+) W,(.+)=(.+) W\)(.*)/", $line, $data)) {
-
 
309
                ;
-
 
310
            } else
-
 
311
*/
-
 
312
            if (preg_match("/^(.+):(.+) W\s*\((.+)=(.+) W\)(.*)/", $line, $data)) {
-
 
313
                ;
-
 
314
            } elseif (preg_match("/^(.+):\s*(FAULT)\s*\((.+)=(.+) W\)(.*)/", $line, $data)) {
-
 
315
                ;
-
 
316
            } elseif (preg_match("/^(.+):(.+) W\s*\(/", $line, $data)) {
252
                if (preg_match("/^\+?(-?[\d\.]+) W$/", $sensor["value"], $tmpbuf) ||
317
                ;
-
 
318
            } elseif (preg_match("/^(.+):(.+) W\s+\D+/", $line, $data)) {
253
                   (isset($sensor[$limit="crit"]) && preg_match("/^\+?(-?[\d\.]+) W$/", $sensor[$limit]))) {
319
                ;
-
 
320
            } else {
254
                    $dev = new SensorDevice();
321
                preg_match("/^(.+):(.+) W\r?$/", $line, $data);
255
                    $dev->setName($sensor["name"]);
322
            }
-
 
323
            if (count($data)>2) {
256
                    if ($limit != "") {
324
                foreach ($data as $key=>$value) {
257
                        $dev->setValue($sensor["value"]);
325
                    if (preg_match("/^\+?(-?[0-9\.]+).?$/", trim($value), $newvalue)) {
-
 
326
                        $data[$key] = floatval($newvalue[1]);
258
                        $dev->setEvent("FAULT");
327
                    } else {
259
                    } else {
328
                        $data[$key] = trim($value);
260
                        $dev->setValue(floatval($tmpbuf[1]));
329
                    }
261
                    }
-
 
262
                    if (isset($sensor["alarm"])) $dev->setEvent("ALARM");
-
 
263
 
-
 
264
                    if (isset($sensor[$limit="crit"]) && preg_match("/^\+?(-?[\d\.]+) W$/", $sensor[$limit], $tmpbuf)) {
-
 
265
                       $dev->setMax(floatval($tmpbuf[1]));
-
 
266
                    }
-
 
267
 
-
 
268
                    $this->mbinfo->setMbPower($dev);
330
                }
269
                }
331
                $dev = new SensorDevice();
-
 
332
                $dev->setName($data[1].$sname);
-
 
333
                $dev->setValue($data[2]);
-
 
334
 
-
 
335
/* not tested yet
-
 
336
                if (isset($data[6]) && $data[2] <= $data[6]) {
-
 
337
                    $dev->setMax(max($data[4], $data[6]));
-
 
338
                } else
-
 
339
*/
-
 
340
                if (isset($data[4]) && $data[2] <= $data[4]) {
-
 
341
                    $dev->setMax($data[4]);
-
 
342
                }
-
 
343
                if (preg_match("/\s(ALARM)\s*$/", $line, $evbuf) || (($evbuf[1] = $dev->getValue()) === 'FAULT')) {
-
 
344
                    $dev->setEvent($evbuf[1]);
-
 
345
                }
-
 
346
                $this->mbinfo->setMbPower($dev);
-
 
347
            }
270
            }
348
        }
271
        }
349
    }
272
    }
350
 
273
 
-
 
274
 
351
    /**
275
    /**
352
     * get current information
276
     * get current information
353
     *
277
     *
354
     * @return void
278
     * @return void
355
     */
279
     */
356
    private function _current()
280
    private function _current()
357
    {
281
    {
358
        $sname = '';
-
 
359
        foreach ($this->_lines as $line) {
282
        foreach ($this->_values as $sensors) foreach ($sensors as $sensor){
360
            if ((trim($line) !== "") && (strpos($line, ':') === false)) {
-
 
361
                $sname = trim($line);
283
            if (isset($sensor["value"])) {
362
                if (preg_match('/^([^-]+)-/', $sname, $snamebuf)) {
-
 
363
                    $sname = ' ('.$snamebuf[1].')';
-
 
364
                } else {
-
 
365
                    $sname = '';
284
                $limit = "";
366
                }
-
 
367
            }
-
 
368
            $data = array();
-
 
369
            if (preg_match("/^(.+):(.+) A\s*\((.+)=(.+) A,(.+)=(.+) A\)(.*)\)/", $line, $data)) {
-
 
370
                ;
-
 
371
            } elseif (preg_match("/^(.+):(.+) A\s*\((.+)=(.+) A,(.+)=(.+) A\)(.*)/", $line, $data)) {
-
 
372
                ;
-
 
373
            } elseif (preg_match("/^(.+):\s*(FAULT)\s*\((.+)=(.+) A,(.+)=(.+) A\)(.*)\)/", $line, $data)) {
-
 
374
                ;
-
 
375
            } elseif (preg_match("/^(.+):\s*(FAULT)\s*\((.+)=(.+) A,(.+)=(.+) A\)(.*)/", $line, $data)) {
-
 
376
                ;
-
 
377
            } elseif (preg_match("/^(.+):(.+) A\s*\(/", $line, $data)) {
285
                if (preg_match("/^\+?(-?[\d\.]+) A$/", $sensor["value"], $tmpbuf) ||
378
                ;
-
 
379
            } elseif (preg_match("/^(.+):(.+) A\s+\D+/", $line, $data)) {
286
                   (isset($sensor[$limit="crit"]) && preg_match("/^\+?(-?[\d\.]+) A$/", $sensor[$limit]))) {
380
                ;
-
 
381
            } else {
287
                    $dev = new SensorDevice();
382
                preg_match("/^(.+):(.+) A\r?$/", $line, $data);
288
                    $dev->setName($sensor["name"]);
383
            }
-
 
384
            if (count($data)>2) {
289
                    if ($limit != "") {
385
                foreach ($data as $key=>$value) {
290
                        $dev->setValue($sensor["value"]);
386
                    if (preg_match("/^\+?([0-9\.]+).?$/", trim($value), $newvalue)) {
-
 
387
                        $data[$key] = trim($newvalue[1]);
291
                        $dev->setEvent("FAULT");
388
                    } else {
292
                    } else {
389
                        $data[$key] = trim($value);
293
                        $dev->setValue(floatval($tmpbuf[1]));
390
                    }
294
                    }
-
 
295
                    if (isset($sensor["alarm"])) $dev->setEvent("ALARM");
-
 
296
 
-
 
297
                    if (isset($sensor[$limit="min"]) && preg_match("/^\+?(-?[\d\.]+) A$/", $sensor[$limit], $tmpbuf)) {
-
 
298
                       $dev->setMin(floatval($tmpbuf[1]));
-
 
299
                    }
-
 
300
 
-
 
301
                    if (isset($sensor[$limit="max"]) && preg_match("/^\+?(-?[\d\.]+) A$/", $sensor[$limit], $tmpbuf)) {
-
 
302
                       $dev->setMax(floatval($tmpbuf[1]));
-
 
303
                    }
-
 
304
 
-
 
305
                    $this->mbinfo->setMbCurrent($dev);
391
                }
306
                }
392
                $dev = new SensorDevice();
-
 
393
                $dev->setName($data[1].$sname);
-
 
394
                $dev->setValue($data[2]);
-
 
395
                if (isset($data[4])) {
-
 
396
                    $dev->setMin($data[4]);
-
 
397
                }
-
 
398
                if (isset($data[6])) {
-
 
399
                    $dev->setMax($data[6]);
-
 
400
                }
-
 
401
                if (preg_match("/\s(ALARM)\s*$/", $line, $evbuf) || (($evbuf[1] = $dev->getValue()) === 'FAULT')) {
-
 
402
                    $dev->setEvent($evbuf[1]);
-
 
403
                }
-
 
404
                $this->mbinfo->setMbCurrent($dev);
-
 
405
            }
307
            }
406
        }
308
        }
407
    }
309
    }
408
 
310
 
409
    /**
311
    /**
Line 411... Line 313...
411
     *
313
     *
412
     * @return void
314
     * @return void
413
     */
315
     */
414
    private function _other()
316
    private function _other()
415
    {
317
    {
416
        $sname = '';
-
 
417
        foreach ($this->_lines as $line) {
318
        foreach ($this->_values as $sensors) foreach ($sensors as $sensor){
418
            if ((trim($line) !== "") && (strpos($line, ':') === false)) {
-
 
419
                $sname = trim($line);
319
            if (isset($sensor["value"])) {
420
                if (preg_match('/^([^-]+)-/', $sname, $snamebuf)) {
320
                if ((preg_match("/^[^\-\+\d]/", $sensor["value"]) || preg_match("/^\d+$/", $sensor["value"])) && ($sensor["value"] !== 'failed') &&
421
                    $sname = ' ('.$snamebuf[1].')';
-
 
422
                } else {
-
 
423
                    $sname = '';
-
 
424
                }
-
 
425
            }
-
 
426
            $data = array();
-
 
427
            preg_match("/^(.+):\s*([^\-\+\d\s].+)\r?$/", $line, $data);
-
 
428
            if ((count($data)>2) && ($data[1]!=="Adapter") && !preg_match("/^FAULT/", $data[2])) {
321
                    !isset($sensor[$limit="min"]) && !isset($sensor[$limit="max"]) && !isset($sensor[$limit="crit"]) && !isset($sensor[$limit="high"]) && !isset($sensor[$limit="hyst"])) {
429
                $dev = new SensorDevice();
322
                    $dev = new SensorDevice();
430
                $dev->setName($data[1].$sname);
323
                    $dev->setName($sensor["name"]);
431
                if (preg_match("/(.*\s*)ALARM\s*$/", $data[2], $aldata)) {
-
 
432
                    $dev->setEvent("Alarm");
324
                    $dev->setValue($sensor["value"]);
433
                    if ((count($aldata)>1) && trim($aldata[1]!=="")) {
325
                    if (isset($sensor["alarm"])) $dev->setEvent("ALARM");
434
                        $dev->setValue(trim($aldata[1]));
-
 
435
                    } else {
-
 
436
                        $dev->setValue($data[2]);
-
 
437
                    }
-
 
438
                } else {
-
 
-
 
326
 
439
                    $dev->setValue($data[2]);
327
                    $this->mbinfo->setMbOther($dev);
440
                }
328
                }
441
                $this->mbinfo->setMbOther($dev);
-
 
442
            }
329
            }
443
        }
330
        }
444
    }
331
    }
445
 
332
 
446
    /**
333
    /**
Line 451... Line 338...
451
     * @return void
338
     * @return void
452
     */
339
     */
453
    public function build()
340
    public function build()
454
    {
341
    {
455
        $this->_temperature();
342
        $this->_temperature();
456
        $this->_voltage();
-
 
457
        $this->_fans();
343
        $this->_fans();
-
 
344
        $this->_voltage();
458
        $this->_power();
345
        $this->_power();
459
        $this->_current();
346
        $this->_current();
460
        $this->_other();
347
        $this->_other();
461
    }
348
    }
462
}
349
}