feat(oversigt): 'Stop alt og parkér' — flows, markarbejde og marksilo-lån stoppes, køretøjer til AD-parkering (manuelle høstere nævnes), pause der gemmes; 'Start alle' ophæver pausen og starter traktorerne én ad gangen hvert 10. sekund (v1.42.0.0)

This commit is contained in:
2026-09-27 15:20:41 +02:00
parent 9348443f61
commit 9c1c87b8dd
12 changed files with 173 additions and 10 deletions
+50
View File
@@ -1153,6 +1153,56 @@ function ADRunsController.queueStartAll(adEnv)
return summary
end
-- Stop alt og parkér (Oversigt): flows, markarbejde og marksilo-lån stoppes, køretøjerne sendes til deres
-- AD-parkeringspunkt, og moden sættes på pause (gemmes), så intet starter igen før "Start alle".
-- Høstere med manuel transport parkeres ikke (må ikke køre på vejen med skærebord). Returnerer
-- {stopped, parked, noPark = {navne}, manual = {navne}}.
function ADRunsController.stopAllAndPark(adEnv)
local summary = {stopped = 0, parked = 0, noPark = {}, manual = {}}
ADRunsController.clearStartQueue()
local toPark, seen = {}, {}
local vehiclesById = getFarmVehiclesById(adEnv)
for _, run in ipairs(ADRunsController.store.runs) do
for _, vehicleId in ipairs(run.vehicleIds) do
local vehicle = vehiclesById[vehicleId]
if vehicle ~= nil and not seen[vehicle] then
seen[vehicle] = true
if isVehicleActive(vehicle) then
stopVehicle(vehicle)
summary.stopped = summary.stopped + 1
end
table.insert(toPark, vehicle)
end
end
ADRunsController.runningRuns[run.id] = nil
end
if ADFieldWork ~= nil and ADFieldWork.stopAllAssignments ~= nil then
for _, stopped in ipairs(ADFieldWork.stopAllAssignments(adEnv) or {}) do
summary.stopped = summary.stopped + 1
if stopped.manual then
table.insert(summary.manual, tostring(ADRuns.vehicleLabel(stopped.vehicle)))
elseif not seen[stopped.vehicle] then
seen[stopped.vehicle] = true
table.insert(toPark, stopped.vehicle)
end
end
end
if ADFieldSilos ~= nil and ADFieldSilos.stopAll ~= nil then pcall(ADFieldSilos.stopAll, adEnv) end
if ADFieldJobs ~= nil and ADFieldJobs.setPaused ~= nil then ADFieldJobs.setPaused(true) end
for _, vehicle in ipairs(toPark) do
local park = ADFieldWork ~= nil and ADFieldWork.parkMarkerId ~= nil and ADFieldWork.parkMarkerId(adEnv, vehicle) or nil
if park ~= nil then
local ok = pcall(ADFieldWork.startAd, adEnv, vehicle, adEnv.AutoDrive.MODE_DRIVETO, park, nil)
if ok then summary.parked = summary.parked + 1 end
else
table.insert(summary.noPark, tostring(ADRuns.vehicleLabel(vehicle)))
end
end
Logging.info(ADRunsController.LOG_PREFIX .. "Stop alt og parkér: %d stoppet, %d til parkering, %d uden parkeringspunkt, %d høstere hentes manuelt — pause",
summary.stopped, summary.parked, #summary.noPark, #summary.manual)
return summary
end
-- Starter næste traktor i køen, når der er gået STAGGER_MS siden forrige.
function ADRunsController.processStartQueue(adEnv, dt)
if #ADRunsController.startQueue == 0 then return end