# Testplan — Markarbejde (fanen Marker), version 1.28.0.0 (+ guider v1.31/v1.32) Stor test-session. Kør testene i rækkefølge: de første bygger opsætningen, de senere bygger på den. Hver test har **Gør**, **Forvent** og **Log** (linjer i `log.txt`, der beviser at det virkede). Loglinjer begynder altid med `ADSmartPickup: F`. Kryds af undervejs. Skriv resultatet (OK / FEJL + hvad der skete) ud for hver test, så retter vi i samme rækkefølge. --- ## 0. Forberedelse - [ ] **0.1 Version.** Log: `Available mod: … (Version: 1.28.0.0) FS25_ADSmartPickup`. - [ ] **0.2 Fanen Marker åbner.** ESC → Smart Pickup → fanen **Marker**. Forvent: "Marker indlæses …" i få sekunder, derefter én række pr. ejet mark (også korn-, roe- og bare marker, ikke kun græs). Afgrøde-kolonnen viser afgrøden eller "bar jord". - [ ] **0.3 F-markører.** Marker uden `F`-markør står med `!` foran marknummeret og "! mangler markør F…". Lav markører til de marker, der skal testes. - [ ] **0.4 Markflåden.** Nederst: alle maskiner med slåmaskine, vender, river, læssevogn, høster, aflæsningsvogn, kultivator, plov, såmaskine, tromle, strigle/sprøjte, gødnings-/kalkspreder, stubhakker — med rolle og bredde. Tjek: - [ ] Høstere viser "N afgrøder". - [ ] Såmaskiner viser "frø ok" eller "!! tom for frø". - [ ] Strigle viser "strigle (småt ukrudt)", ukrudtssprøjte viser "sprøjte". - [ ] En **tom** sprøjte/spreder vises ikke (den har ingen rolle før den har fyld på). - [ ] Maskiner i et Smart Pickup-flow kan godt ses, men sendes aldrig ud. - [ ] **0.5 Bredder.** BiG M 450 viser **40,8 m** (Courseplays egen bredde), læssevognene 40,8 m. ## 1. Etape 1 genbekræftet (græs → ensilage) Rest fra 25/9: slåning og opsamlingsstart virkede; afslutningen blev aldrig set. - [ ] **1.1 Afslutning af opsamling.** Mark 22 (eller en anden lille græsmark) på Manuel + Ensilage, BiG M + én Boss Alpin med flueben → **Start nu**. - Forvent: slåmaskine → F22 → Courseplay slår → hjem. Læssevogn → F22 → Courseplay samler op med **slåmaskinens kursus** → AutoDrive tømmer ved fuld → tilbage → færdig → rest til lager → parkering. Marken står **Færdig**, og der kommer en grøn besked "F22 er færdig". - Log: `mower … sendt til F22`, `Courseplay startet (mower)`, `mowing -> collecting`, `læssevogn … aflæsser i `, `Courseplay startet (collector, mower-kursus kopieret)`, `collector … færdig`, `collecting -> done`. - [ ] **1.2 Gæringssilo.** Ensilage-læs går til nærmeste **gæringssilo** (FermentingSilo/GrassSilageSilo), ikke en Farma-silo. Log: `aflæsser i ` eller `ingen gæringssilo kan tage græsset (…)`. - [ ] **1.3 Sidde i maskinen.** Sæt dig i slåmaskinen mens Courseplay kører, og stig ud igen. Forvent: den slippes IKKE (ingen `frigivet`-linje). Kør selv > 3 km/t uden CP → `frigivet — spilleren kører det`. - [ ] **1.4 Sovende køretøj.** Parkerede maskiner kører af sted med det samme ved udsendelse, uden at du skal sætte dig ind. ## 2. Hø og river - [ ] **2.1 Hø uden river.** Plan = **Hø**, Riv = Nej. Slå → **Vendes** (venderen i sin egen bredde) → Samles op (læssevogn på slåkurset, ≥ 40,8 m) → hø-silo (kun almindelig silo, aldrig gæringssilo). Log: `mowing -> tedding`, `Courseplay startet (tedder)`, `tedding -> collecting`. - [ ] **2.2 Smal læssevogn uden river.** En læssevogn under 40,8 m → status "læssevogn for smal: … — sæt Riv til eller brug en bredere". - [ ] **2.3 Riv (midterrive).** Riv = Ja. Log: `river lægger skåret 0.x m fra sin kursuslinje`, derefter `Courseplay startet (collector, rake-kursus kopieret)`. Læssevognen rammer skårene. - [ ] **2.4 Sideriver.** Med en river der lægger skåret til siden: log viser fx `3.2 m`, og `skår ligger 3.2 m til … -> læssevognens forskydning …`. **Tjek at vognen kører OVER skåret.** Kører den ved siden af (forkert side), så skriv det ned — så vender jeg fortegnet. - [ ] **2.5 Riv til ensilage.** Plan = Ensilage + Riv = Ja: Slå → Rives → Samles op. ## 3. Høst (korn, raps, majs …) - [ ] **3.1 Høst.** En moden kornmark, Manuel, høster med passende skærebord + én aflæsningsvogn (traktor + tipvogn/overlæssevogn) med flueben → **Start nu**. - Forvent: høster → F-markør → Courseplay høster. Aflæsningsvognen sendes ud når høsteren arbejder, følger den (Courseplays combine-unloader) og kører fulde læs til siloen. - Log: `harvester … sendt`, `Courseplay startet (harvester)`, `unloader … sendt`, `aflæsningsvogn … følger høsteren -> `. - [ ] **3.2 Afslutning.** Høsten færdig → `harvesting -> `, `aflæsningsvogn … stoppes — høsten er færdig`, evt. `kører rest-læs … til lager`, parkering. - [ ] **3.3 Forkert skærebord.** Høster der ikke kan tage afgrøden → status "ingen høster i markflåden kan tage opgaven (afgrøde/frø/ukrudt)". Ingen udsendelse. - [ ] **3.4 Flere aflæsningsvogne.** "Aflæsningsvogne under høst" = 2 → to vogne sendes (én ad gangen). - [ ] **3.6 Halm samles op.** Halm efter høst = *Samles op til silo*. Mejetærskeren lægger skår (Courseplay-indstilling halmskår = til), derefter `harvesting -> strawCollecting`, en læssevogn kører **høsterens kursus** (`harvester-kursus kopieret`) og kører halmen til en silo der tager STRAW. - [ ] **3.7 Halm til baller.** Halm = *Presses til baller*: `-> baling` (ballepresser på høsterens kursus) → `-> baleCollecting` (ballesamler/Universal Autoload, `Courseplay startet (ballesamler)`), fulde læs til ballelager (`ballesamler … kører fulde læs til …`). - [ ] **3.8 Halm hakkes.** Halm = *Hakkes*: mejetærskeren lægger IKKE skår (Courseplay halmskår = fra). - [ ] **3.5 Regn.** Når det regner: høst/slå/vend/riv sendes ikke ud, status "venter på tørvejr". Kørende maskiner fortsætter. ## 4. Roer - [ ] **4.1 Roehøst.** Roemark (sukkerroer), roeoptager (Ropa) + aflæsningsvogn → som 3.1, men med roer. Log viser `harvester 'Ropa …'`. Roerne går til nærmeste silo/lager der tager SUGARBEET (brug **Tving lager** hvis de skal et bestemt sted hen, fx roeknuseren). ## 5. Efter høst: klargøring og såning Sæt på en kornmark før høst: Efter høst → Stubbehakning Nej, Jordbehandling **Auto**, **Så bagefter** Ja, Afgrøde "Samme som høstet", Tromle Ja. Kalk Ja. - [ ] **5.1 Kæde.** Efter høsten fortsætter marken selv: (kalk hvis jorden trænger) → pløj eller kultivér → så → tromle → **Færdig**. Log: `harvesting -> cultivating`, `cultivating -> sowing` … - [ ] **5.2 Auto-jordbehandling.** Står "Jorden trænger til: pløjning" under marken → plov sendes. Ellers kultivator. - [ ] **5.3 Såning.** Såmaskinen sættes til afgrøden (`setSeedIndex`), og den rigtige afgrøde spirer. - [ ] **5.4 Ude af såperioden.** Afgrøde der ikke kan sås nu → status " kan ikke sås i denne periode", ingen udsendelse. - [ ] **5.5 Tom for frø / påfyldning.** Såmaskine med lidt frø. Moden leder efter en læssestation med frø på lager og en AutoDrive-markør ved triggeren (fx en silo/big-bag-station med SEEDS). - Findes den: log `… fyldes op med SEEDS ved af AutoDrive når den er tom`. Når den er tom midt på marken, kører AutoDrive derhen, fylder op, kører tilbage, og Courseplay fortsætter. - Findes den ikke: log `ingen påfyldning af SEEDS med AutoDrive-markør fundet …`. Når den er tom: rød besked `'…' er tom for SEEDS — fyld op, så fortsætter marken`, og marken går IKKE videre. - [ ] **5.6 Bar mark alene.** Vælg en bar mark (stub/pløjet) → **Start nu** → kun klargøring/såning. ## 6. Pleje mens afgrøden vokser - [ ] **6.1 Behov vises.** En voksende mark viser "Jorden trænger til: gødning, ukrudt …" og status "— trænger til Gødes". Manuel: intet sker før **Start nu**. - [ ] **6.2 Gødning.** Start nu (eller Auto) → gødningsspreder/-sprøjte med fyld sendes → `pleje: fertilizing` → `fertilizing -> idle`. Højst 2 gange pr. vækstcyklus. - [ ] **6.3 Ukrudt.** Høstafgrøde med tæt ukrudt → strigle (småt ukrudt) eller ukrudtssprøjte (stort ukrudt, > 4). Græs ukrudtsbehandles ikke. - [ ] **6.4 Kalk.** Jord der trænger til kalk → kalkspreder. - [ ] **6.5 Påfyldning.** Sprøjte/spreder der løber tør → AutoDrive fylder op og kører tilbage. - [ ] **6.6 Tom sprøjte/spreder (v1.29.2).** Tom sættes i gang → log `er tom — fyldes med X ved og kører så til F` → AutoDrive (LOAD) fylder op og kører til marken → Courseplay starter med fyld. Ingen påfyldning med AD-markør → sendes IKKE ud; marken viser "er tom for X … fyld den op". Sikkerhedsnet: Courseplay startes aldrig med tom tank ("er stadig tom … ved marken"). - [ ] **6.7 Forkert vare (v1.28.8).** Spreder med kalk sendes til gødskning kun hvis ingen tom/gødet spreder findes → log `tømt for N l LIME (skal bruges til fertilizer)` → fyldes med gødning. ## 7. Multi-maskine (Courseplay multi-tool) - [ ] **7.1 To slåmaskiner.** "Maskiner pr. trin" = 2 på en græsmark med to BiG M med flueben. Forvent: begge sendes samtidig, den ene laver kurset (`bane -1`), den anden kopierer det (`bane 1`) og de kører i konvoj. Log: `… sendt … bane -1`, `… bane 1`, `Courseplay startet (mower, bane -1)`, `Courseplay startet (mower, multi-kursus kopieret, bane 1)`. - [ ] **7.2 For få maskiner.** 3 pr. trin men kun 2 ledige → status "multi-tool: slåmaskine — kun 2 af 3 ledige". - [ ] **7.3 Læssevogne på multi-kursus.** Efter 7.1 sendes 2 læssevogne, én pr. bane. ## 9. Vælg og glem (afgrøde på marken) - [ ] **9.1 Kornmark → hvede.** En mark med byg der vokser: vælg *Afgrøde på marken* = Hvede. Linjen siger "Byg får lov at vokse færdig og høstes; derefter klargøres og tilsås med Hvede". Kørsel skjules (auto). Når byggen er moden: høst → (halm) → klargøring → såning af **hvede** (ikke byg). Log: `mål-afgrøde: WHEAT`, `starter (harvest: harvesting)`, `sowing`. - [ ] **9.2 Bar mark.** Bar mark med mål = Hvede: starter selv klargøring + såning, når det er hvede-såtid. Uden for såtid: status "venter på såtid for Hvede". - [ ] **9.3 Græs → græs.** Græsmark med mål = Græs: slås og samles op hver gang, ingen pløjning/såning. - [ ] **9.4 Græs → hvede.** Græsmark med mål = Hvede: slås og samles op én gang, derefter klargøring (jordbehandling-valget vises) og såning af hvede. - [ ] **9.5 Hele året.** Lad en mark med mål køre en hel sæson uden at røre den: vækst → pleje → høst → klargøring → såning → ... uden at hænge og uden dobbelt-såning. - [ ] **9.6 Alle ledige maskiner.** Markflåde: *Brug alle ledige maskiner* = Ja (standard): maskiner uden flueben sendes også ud. = Nej: kun maskiner med flueben. Maskiner du selv kører, maskiner i flows og maskiner AutoDrive/Courseplay allerede kører, bruges aldrig. - [ ] **9.7 Fjern målet.** Vælg *Ingen — planlæg selv*: marken går tilbage til Manuel. ## 8. Robusthed - [ ] **8.1 Genindlæsning midt i et trin.** Gem og genstart under fx opsamling → marken fortsætter på samme trin, sæt sendes ud igen, slåkurset hentes fra slåmaskinen. - [ ] **8.2 Stop mark.** **Stop mark** midt i høst → alle maskiner på marken stopper; høst står **Klar** igen, pleje/klargøring står **Venter**. - [ ] **8.3 Ingen vej.** Mark hvis F-markør ikke er forbundet → status "… nåede ikke F…" / "intet lager: … AutoDrive finder ingen rute …" og nyt forsøg efter 5 min. - [ ] **8.4 Beskeder.** Grøn besked når en mark/pleje er færdig; rød besked ved fejl (hver kun én gang i træk). - [ ] **8.5 Ydelse.** Ingen mærkbar lag med fanen åben og mange marker (én mark scannes pr. sekund). ## 10. Guiden "Opsæt mark" (v1.31) - [ ] **10.1 Oversigt.** Klik F22 i tabellen. Forvent: resumé-linjer (Afgrøde, …, Lager) med "[Ret]", hele status, markør. Ingen lang detaljeliste og ingen markflåde nederst. Knapper: Start nu, Opsæt mark, Markflåde. - [ ] **10.2 Guiden fra bunden.** Opsæt mark → "Trin 1 af N — Afgrøde". Klik Næste gennem alle trin uden at scrolle. Tællingen passer med de viste trin (græs: ingen Klargøring; bar mark: ingen Pleje/Lager). - [ ] **10.3 Valg gemmes.** Vælg fx Hø + Riv, 2 ad gangen, Lager: Vælg selv + en silo → Oversigt viser valgene → **Kør automatisk**. Forvent: tabellens Plan "Hø + riv (x2)", Kørsel "Auto". Log: `F22 guide gemt: mode=auto …`. - [ ] **10.4 Annullér.** Åbn guiden, skift afgrøde, Annullér → intet ændret. Samme med ESC (menuen lukkes). - [ ] **10.5 Ret én linje.** Klik "Lager: …" i oversigten → "Ret: Lager"; skift → **Gem** → tilbage i oversigten med ændringen; Kørsel (Auto/Manuel) uændret. Tilbage i et Ret-trin fortryder. - [ ] **10.6 Ret fra Oversigt-trinnet.** I guidens sidste trin: klik en linje → ret → **OK** → tilbage på Oversigt. - [ ] **10.7 Mål-afgrøde skifter trin.** Kornmark: vælg Græs som afgrøde → trinnet "Afgrødens valg" viser Ensilage/Hø; tællingen ændres. På Oversigt kun **Kør automatisk** (ingen "Gem uden at starte"). - [ ] **10.8 Faste maskiner.** Maskiner → Faste = Ja → sæt flueben ved 2 maskiner → gem. Åbn en anden mark: de 2 vises ikke; linje "2 maskiner er faste på andre marker (F22)". Log: `guide gemt … faste=…`. - [ ] **10.9 Marksilo.** Mark med silo inden for 150 m: Lager-trinnet spørger "Brug marksiloen?". Ja → resumé "Marksilo". - [ ] **10.10 Uden valgt mark.** Ingen mark valgt → Opsæt mark → trin "Mark" med listen; klik en mark → Afgrøde. Næste uden valgt mark giver "Vælg en mark først". - [ ] **10.11 Markflåde.** Knappen Markflåde viser flåden (flueben, "fast på F22"); klik et flueben gemmes; **Til marker** går tilbage. - [ ] **10.12 Klik routes.** Alle Ja/Nej, valg og flueben i guiden reagerer (ingen "GUI-fejl" i statuslinjen/log). ## 11. Guiden "Opsæt flow" (v1.32) - [ ] **11.1 Flows-fanen.** Tavlen øverst; valgt flow (">") har resumé-linjer med "[Ret]" og Status. Ingen lang detaljeliste og ingen faste felter (Run, Wait-pulje …). Knapper: Start flow, Opsæt flow, Nyt flow, Slet flow. - [ ] **11.2 Nyt flow.** Nyt flow → "Trin 1 af 8 — Navn" → *Skift navn …* → skriv navn → Næste gennem Retning (Ud fra bygning), Fra (en fabrik), Varer (sæt en vare på Lager → trinnet Lager dukker op, tællingen bliver 9), Regler, Vent ved, Traktorer (flueben) → Oversigt → **Start flow**. Forvent: flowet findes, kører, log `run '…': …` med kind/products/storeBuildingIds. - [ ] **11.3 Annullér nyt flow.** Nyt flow → Annullér (eller ESC) → intet nyt flow i tavlen. - [ ] **11.4 Ret én linje.** Klik "Traktorer: …" → "Ret: Traktorer" → sæt flueben → **Gem** → tilbage; traktoren er i flowet. - [ ] **11.5 Omdøb.** Klik "Navn: …" → tekstfeltet åbner → nyt navn står i tavlen. - [ ] **11.6 Andre flows skjult.** Traktor i et andet flow vises ikke i trinnet Traktorer; linje "N traktorer kører i andre flows". - [ ] **11.7 Forsyning.** Opsæt et forsyningsflow: Til = stald, Varer = Vælg selv → varerne stalden tager vises; Regler viser Ture og "Kør hjem fra Wait under". - [ ] **11.8 Nyt flow fra Oversigt-fanen** hopper til Flows med guiden åben. - [ ] **11.9 Klik routes.** Alle valg (også pr. vare-politik) reagerer; ingen "GUI-fejl". --- ## 12. Genbrug af Courseplay-kurser (v1.34) Log-linjer at kigge efter (`ADSmartPickup: F …`): `nyt kursus beregnes til '' ()`, `kursus genbrugt ('', m) — ingen ny beregning`, `kursus kopieret fra '' til ''`, `markens form er ændret — N gemt(e) kursus(er) glemt`. Registret står i `ADSmartPickup_fields.xml` under ``. - [ ] **12.1 Første gang = ny beregning.** Stor mark (Dakota 16x) → kultivator sendes ud → log `nyt kursus beregnes … (intet kursus gemt)` → CP starter; `` står i filen efter gem. - [ ] **12.2 Genbrug.** Samme maskine til samme mark igen (næste pleje/klargøring, eller efter "Stop" og start) → log `kursus genbrugt` → CP kører UDEN beregnings-hak og kører hele marken fra start (ikke kun sidste stykke). ⚠ Usikkert: accepterer CP 8.1 at jobbet startes på det eksisterende kursus uden `onClickGenerateFieldWorkCourse`? (validate kræver kun `hasCpCourse`). Tegn på fejl: `Courseplay: …no course…`, eller maskinen kører ingenting. - [ ] **12.3 Efter genstart.** Gem, genindlæs, vent de 2 min → samme maskine til samme mark → `kursus genbrugt` (CP har selv gemt kurset i CpAssignedCourses.xml; antal punkter matcher registret). - [ ] **12.4 Kopi fra anden maskine.** En anden maskine med samme CP-bredde til samme mark → `kursus kopieret fra 'A'` → den kører kurset (ikke A's rest). ⚠ Usikkert: kopieret kursus + lane/vin som i dag med `cpCopyCourse`. - [ ] **12.5 Ny bredde.** Skift CP-bredden i HUD'en (eller en anden maskine med anden bredde) → `nyt kursus beregnes … (ny bredde)`. - [ ] **12.6 Spilleren laver selv kursus i CP's HUD** på maskinen → næste udsendelse genbruger det IKKE (antal punkter passer ikke) → kopi fra en anden maskine eller `… (kurset på maskinen er ændret)`. - [ ] **12.7 Ændret mark.** Lav marken om (kort-redigering/mark-tilkøb der ændrer omridset) → efter scanning, eller når marken gemmes i "Opsæt mark", log `markens form er ændret — N … glemt` → næste start beregner nyt og gemmer det. - [ ] **12.8 Multi-tool.** 2 sæt på samme mark: lederen genbruger kun et kursus lavet til 2 sæt/samme bane; følgeren kopierer stadig lederens kursus (log `…, multi-kursus kopieret, bane N`), og begge kører hver sin bane. - [ ] **12.9 Vinmark.** Sprøjte (skip 1) og harve (skip 0) på samme vinmark må ikke genbruge hinandens kursus (vin-indstillinger indgår i nøglen); høsteren (offset 0) heller ikke. --- ## Kendte usikkerheder (første gang i spillet) | Område | Hvad der er gættet | Tegn på fejl | |---|---|---| | Vækstfase | `getFieldDataAtWorldPosition` anden returværdi = vækststadie | Høstet stub vises som voksende, eller moden mark som bar | | Høsterens afgrøder | `spec_cutter.fruitTypes`/`fruitTypeIndices` | Høster vises med "0 afgrøder" | | Combine-unloader | stationsvalg ud fra silovalget | `ingen aflæsningsstation Courseplay kan bruge` | | Multi-tool | `multiTools` + `laneOffset` + `Course:setPosition` | Begge maskiner kører samme bane | | Sideriver | fortegn på forskydningen | Læssevognen kører ved siden af skåret | | Påfyldning | AutoDrive LOAD til den læssestation moden fandt (AutoDrives eget automatiske mål er slået fra i AutoDrive) | Sættet står ved påfyldningen og læsser ikke, eller kører ikke tilbage | | Ukrudt | `weedSystem`-værdi ≥ 2 = tæt | Ukrudtsbehandling uden ukrudt, eller aldrig | | Nysået som "bar" | nysået afgrøde læses som voksende | Marken står "Færdig" efter såning (ingen dobbelt-såning, men ingen næste høst-start før den er moden) | | Halm-valg i guiden | `fruitType.hasWindrow/windrowName` = afgrøder med halm | Halm-valget mangler ved hvede eller vises ved majs | | Ballesamler | Courseplays BALE_FINDER + AutoDrive til ballelager | Ballesamleren starter ikke, eller kører ikke fulde læs væk | | Kursus-genbrug (v1.34) | CP-job startes på maskinens eksisterende kursus uden ny beregning | `Courseplay: no course`, eller maskinen starter midt/sidst i kurset | - [ ] **Høsterens rest (v1.32.2).** Modet høster en mark med aflæsningsvogne → ved høstens slutning stoppes vognene; høsteren med korn i tanken → log `'Mejetærsker' kører rest-læs (N l) til lager` → AutoDrive tømmer den ved lageret → parkering. Kunne AD ikke tømme den: besked "har stadig korn i tanken … tøm den". ⚠ Usikkert: kan AutoDrive aflæsse en mejetærskers tank (røret) ved en silo?