CMXX - Initial ML training
This commit is contained in:
@@ -2239,24 +2239,36 @@ $messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
// ML data preparations
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
function traintotalMeasurement($messages){
|
||||
function traintotalMeasurement(){
|
||||
|
||||
//total measurement internal array
|
||||
$total_measurement = [];
|
||||
include dirname(__FILE__,2).'/settings/settings.php';
|
||||
|
||||
foreach ($messages as $message){
|
||||
//total measurement internal array
|
||||
$total_measurement = [];
|
||||
|
||||
//Connect to DB
|
||||
$pdo = dbConnect($dbname);
|
||||
|
||||
//GET DATA
|
||||
$sql = 'SELECT h.rowID, h.description,h.equipmentid,p.productcode,e.hw_version FROM history h JOIN equipment e ON h.equipmentid = e.rowID JOIN products p ON e.productrowid = p.rowID where type="Maintenance_Test" and description like "%doubletestvalues%"';
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute();
|
||||
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
foreach ($messages as $message){
|
||||
//Cleanup input array
|
||||
$dataset = json_decode($message['description'],true);
|
||||
$dataset = $dataset["doubletestvalues"];
|
||||
foreach ($dataset as $measure){
|
||||
//Filter out correct measurements
|
||||
if ($measure['pass'] === true){
|
||||
$measurementid = $message['equipmentid'].'-'.$message['rowID'];
|
||||
$total_measurement[$measure['name']][$measurementid] = $measure['measure'];
|
||||
$hw_version = (!empty($message['hw_version']))? $message['hw_version'] : 'blank';
|
||||
$measurementid = $message['rowID'];
|
||||
$total_measurement[$message['productcode']][$hw_version][$measure['name']][$measurementid] = $measure['measure'];
|
||||
}
|
||||
}
|
||||
}
|
||||
return $total_measurement;
|
||||
return $total_measurement;
|
||||
}
|
||||
|
||||
function statisticalAnalyses($total_measurement){
|
||||
@@ -2265,20 +2277,24 @@ function statisticalAnalyses($total_measurement){
|
||||
$total_results = [];
|
||||
|
||||
//STATISTICAL ANALYSES INTERNAL ARRAY
|
||||
foreach ($total_measurement as $key => $value){
|
||||
$average = $total_results[$key]['average'] = average($value);
|
||||
$median = $total_results[$key]['median'] = calculateMedian($value);
|
||||
$stdev = $total_results[$key]['stdev'] = standDeviation($value);
|
||||
$total_results[$key]['n'] = count($value);
|
||||
foreach ($total_measurement as $productcode => $versions){
|
||||
foreach ($versions as $version => $ver){
|
||||
|
||||
//GET STDEV -/+
|
||||
$total_results[$key]['stdev-1'] = $average - $stdev;
|
||||
$total_results[$key]['stdev+1'] = $average + $stdev;
|
||||
$total_results[$key]['stdev-2'] = $average - (2*$stdev);
|
||||
$total_results[$key]['stdev+2'] = $average + (2*$stdev);
|
||||
$total_results[$key]['stdev-3'] = $average - (3*$stdev);
|
||||
$total_results[$key]['stdev+3'] = $average + (3*$stdev);
|
||||
}
|
||||
foreach ($ver as $measurement => $value){
|
||||
$average = $total_results[$productcode][$version][$measurement]['average'] = average($value);
|
||||
$median = $total_results[$productcode][$version][$measurement]['median'] = calculateMedian($value);
|
||||
$stdev = $total_results[$productcode][$version][$measurement]['stdev'] = standDeviation($value);
|
||||
$total_results[$productcode][$version][$measurement]['n'] = count($value);
|
||||
//GET STDEV -/+
|
||||
$total_results[$productcode][$version][$measurement]['stdev-1'] = $average - $stdev;
|
||||
$total_results[$productcode][$version][$measurement]['stdev+1'] = $average + $stdev;
|
||||
$total_results[$productcode][$version][$measurement]['stdev-2'] = $average - (2*$stdev);
|
||||
$total_results[$productcode][$version][$measurement]['stdev+2'] = $average + (2*$stdev);
|
||||
$total_results[$productcode][$version][$measurement]['stdev-3'] = $average - (3*$stdev);
|
||||
$total_results[$productcode][$version][$measurement]['stdev+3'] = $average + (3*$stdev);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $total_results;
|
||||
}
|
||||
@@ -2429,4 +2445,178 @@ foreach ($messages as $message){
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// store measurement data into product_version ++++++++++
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
function storeMeasurementProduct($total_results, $token){
|
||||
|
||||
include dirname(__FILE__,2).'/settings/settings.php';
|
||||
|
||||
$pdo = dbConnect($dbname);
|
||||
|
||||
//Check if product version exists (else create) => store related measurement
|
||||
foreach ($total_results as $products => $product){
|
||||
|
||||
//Product level
|
||||
foreach ($product as $versions => $version){
|
||||
|
||||
//Version level
|
||||
//Check version exist
|
||||
$sql = 'SELECT p.*, pv.rowID as versionID, pv.productrowid as productID FROM products p JOIN products_versions pv ON p.rowID = pv.productrowid WHERE p.productcode = ? and version = ?;';
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$versions = ($versions != 'blank')? $versions : '';
|
||||
$stmt->execute([$products,$versions]);
|
||||
$output = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
//Prep data for api call
|
||||
$api_url = '/v2/products_versions/';
|
||||
$measurement = json_encode($version,JSON_UNESCAPED_UNICODE);
|
||||
|
||||
if (!empty($output)){
|
||||
//Update version with latest measurement
|
||||
$data = json_encode(array("rowID" => $output[0]['versionID'], "productrowid" => $output[0]['productID'], "status" => 1, "version" => $versions, "measurement" => $measurement), JSON_UNESCAPED_UNICODE);
|
||||
ioApi($api_url,$data,$token);
|
||||
}
|
||||
else {
|
||||
//Insert new version
|
||||
|
||||
//GET PRODUCT ID
|
||||
$sql = 'SELECT * FROM products WHERE productcode = ?';
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute([$products]);
|
||||
$output = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
//CALL API
|
||||
$data = json_encode(array("productrowid" => $output[0]['rowID'], "status" => 1, "version" => $versions , "measurement" => $measurement), JSON_UNESCAPED_UNICODE);
|
||||
ioApi($api_url,$data,$token);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// store measurement data into equipment data ++++++++++
|
||||
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
function storeMeasurementEquipment($serialnumber){
|
||||
|
||||
include dirname(__FILE__,2).'/settings/settings.php';
|
||||
|
||||
//Connect to DB
|
||||
$pdo = dbConnect($dbname);
|
||||
|
||||
//CHECK FOR SERIALNUMBER PROVIDED
|
||||
$clause = (!empty($serialnumber) || $serialnumber !='')? 'e.serialnumber = "'.$serialnumber.'" AND': '';
|
||||
|
||||
//GET DATA
|
||||
$sql = 'SELECT h.rowID, h.description,h.equipmentid,p.productcode,e.hw_version FROM history h JOIN equipment e ON h.equipmentid = e.rowID JOIN products p ON e.productrowid = p.rowID where '.$clause.' type="Maintenance_Test" and description like "%doubletestvalues%"';
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute();
|
||||
$messages = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
$tests[] ='';
|
||||
foreach ($messages as $message){
|
||||
$dataset = json_decode($message['description'],true);
|
||||
$dataset = $dataset["doubletestvalues"];
|
||||
foreach ($dataset as $measure){
|
||||
|
||||
//Filter out correct measurements
|
||||
if ($measure['pass'] === true){
|
||||
$measurementid = $message['productcode'].'||'.$message['hw_version'].'||'.$message['equipmentid'].'||'.$message['rowID'];
|
||||
$tests[$measurementid] [$measure['name']]= $measure['measure'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//COMPARISON -- CHECK DEVIATIONS FROM STANDARD
|
||||
//LOOP over all test results
|
||||
foreach ($tests as $test => $test_values){
|
||||
|
||||
//GET the productcode and version from Test result
|
||||
if (str_contains($test,'||')){
|
||||
|
||||
$identification = explode('||',$test);
|
||||
|
||||
//GET RELATED PRODUCT DATA
|
||||
$sql = 'SELECT pv.measurement FROM products_versions pv JOIN products p ON pv.productrowid = p.rowID WHERE p.productcode = ? AND pv.version = ?';
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute([$identification[0],$identification[1]]);
|
||||
$product_measurements = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
$product_measurements = $product_measurements[0]['measurement'];
|
||||
|
||||
if (!empty($product_measurements)){
|
||||
//Only run when there is a product version found
|
||||
$product_measurements = json_decode($product_measurements,true);
|
||||
|
||||
$equipment_watchlist[] = '';
|
||||
|
||||
//Filter out non array or non objects
|
||||
if (is_object($test_values) || is_array($test_values)){
|
||||
//get individual test_mesurements
|
||||
foreach($test_values as $test_measurement => $measured_value){
|
||||
//Loop over the related product measurements
|
||||
foreach($product_measurements as $product_measurement => $product_measured_values){
|
||||
//Compare measured test with product measured test
|
||||
if ($test_measurement == $product_measurement){
|
||||
//Get the measured value from test
|
||||
|
||||
if (($measured_value <= $product_measured_values['stdev-3']) && ($measured_value >= $product_measured_values['stdev+3'])){
|
||||
$equipment_watchlist[$test][] = array(
|
||||
"measurement" => $test_measurement,
|
||||
"value" => $measured_value,
|
||||
"deviation" => 3
|
||||
);
|
||||
}
|
||||
elseif ((($measured_value <= $product_measured_values['stdev-2']) && ($measured_value >= $product_measured_values['stdev-3'])) || (($measured_value >= $product_measured_values['stdev+2']) && ($measured_value <= $product_measured_values['stdev+3']))){
|
||||
$equipment_watchlist[$test][] = array(
|
||||
"measurement" => $test_measurement,
|
||||
"value" => $measured_value,
|
||||
"deviation" => 2
|
||||
);
|
||||
}
|
||||
elseif ((($measured_value <= $product_measured_values['stdev-1']) && ($measured_value >= $product_measured_values['stdev-2'])) || (($measured_value >= $product_measured_values['stdev+1']) && ($measured_value <= $product_measured_values['stdev+2']))){
|
||||
$equipment_watchlist[$test][] = array(
|
||||
"measurement" => $test_measurement,
|
||||
"value" => $measured_value,
|
||||
"deviation" => 1
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//STORE RESULTS IN EQUIPMENT DATA
|
||||
foreach ($equipment_watchlist as $equipment => $data){
|
||||
//GET the equipmentid and historyid from watchlist
|
||||
if (str_contains($equipment,'||')){
|
||||
$identification = explode('||',$equipment);
|
||||
//json_encode array
|
||||
$data = json_encode($data,JSON_UNESCAPED_UNICODE);
|
||||
|
||||
//Check if record exists
|
||||
$sql = 'SELECT * FROM equipment_data WHERE equipmentid = ? and historyid =?';
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute([$identification[2],$identification[3]]);
|
||||
$equipment_data = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
if (!empty($equipment_data)){
|
||||
//EXIST UPDATE
|
||||
$sql = 'UPDATE equipment_data SET measurement = ? WHERE equipmentid = ? and historyid =?';
|
||||
}
|
||||
else {
|
||||
//EXIST INSERT
|
||||
$sql = 'INSERT INTO equipment_data (measurement, equipmentid, historyid) VALUES (?,?,?)';
|
||||
}
|
||||
|
||||
//EXECUTE QUERY
|
||||
$stmt = $pdo->prepare($sql);
|
||||
$stmt->execute([$data, $identification[2],$identification[3]]);
|
||||
$equipment_data = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user