PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ] ); } catch (PDOException $e) { echo "0"; return; } // Tag IDs $eastId = 218; // CANETOT $westId = 342; // WTOTGROUND $totalId = 230; // TotalGround $query = " DECLARE @now DATETIME = GETDATE(); DECLARE @oneHourAgo DATETIME = DATEADD(HOUR, -1, @now); -- Calculate hours remaining until 5 AM -- If before 5 AM, time until 5 AM today -- If after 5 AM, time until 5 AM tomorrow DECLARE @hoursRemaining FLOAT; DECLARE @targetTime DATETIME; IF CAST(@now AS TIME) < '05:00:00' SET @targetTime = CAST(CAST(@now AS DATE) AS DATETIME) + CAST('05:00:00' AS DATETIME) ELSE SET @targetTime = CAST(DATEADD(DAY, 1, CAST(@now AS DATE)) AS DATETIME) + CAST('05:00:00' AS DATETIME) SET @hoursRemaining = DATEDIFF(SECOND, @now, @targetTime) / 3600.0; -- Get latest East value DECLARE @eastLatest FLOAT = ( SELECT TOP 1 Value FROM dbo.archive WHERE ID = :eastId ORDER BY TimeStamp DESC ); -- Get East value from ~60 minutes ago DECLARE @eastOld FLOAT = ( SELECT TOP 1 Value FROM dbo.archive WHERE ID = :eastId2 AND TimeStamp <= @oneHourAgo ORDER BY TimeStamp DESC ); -- Get latest West value DECLARE @westLatest FLOAT = ( SELECT TOP 1 Value FROM dbo.archive WHERE ID = :westId ORDER BY TimeStamp DESC ); -- Get West value from ~60 minutes ago DECLARE @westOld FLOAT = ( SELECT TOP 1 Value FROM dbo.archive WHERE ID = :westId2 AND TimeStamp <= @oneHourAgo ORDER BY TimeStamp DESC ); -- Get current total ground DECLARE @totalGround FLOAT = ( SELECT TOP 1 Value FROM dbo.archive WHERE ID = :totalId ORDER BY TimeStamp DESC ); -- Calculate rates (tons per hour) DECLARE @eastRate FLOAT = COALESCE(@eastLatest, 0) - COALESCE(@eastOld, 0); DECLARE @westRate FLOAT = COALESCE(@westLatest, 0) - COALESCE(@westOld, 0); -- Handle negative rates (mill reset or bad data) IF @eastRate < 0 SET @eastRate = 0; IF @westRate < 0 SET @westRate = 0; -- Calculate projection SELECT ROUND( ((@eastRate + @westRate) * @hoursRemaining) + COALESCE(@totalGround, 0), 0 ) AS millprojected; "; try { $stmt = $pdo->prepare($query); $stmt->execute([ ':eastId' => $eastId, ':eastId2' => $eastId, ':westId' => $westId, ':westId2' => $westId, ':totalId' => $totalId, ]); $result = $stmt->fetch(); $projected = $result ? round($result['millprojected']) : 0; } catch (PDOException $e) { $projected = 0; } $pdo = null; ?>