Integrasjoner / ERP / Odoo
Guide til Odoo-integrasjon for produksjonsplanlegging med SkyPlanner APS
Denne guiden viser Odoo-partnere, utviklere og IT-ansvarlige hvordan de kobler Odoo Manufacturing til SkyPlanner APS. Les om gevinstene og hva Plan-knappen i Odoo allerede gjør på siden om produksjonsplanlegging i Odoo og i Har Odoo produksjonsplanlegging som tar hensyn til faktisk maskin- og bemanningskapasitet?.
Odoo er fortsatt det autoritative systemet for produkter, stykklister, operasjoner, tilvirkningsordrer, lager og kostnadsberegning. SkyPlanner bruker disse dataene til å lage produksjonsplanen med Arcturus-motoren. Integrasjonen med Odoo går begge veier:
- Tilvirkningsordrer, produksjonsordrer, operasjoner i stykklistene, arbeidssentre og innkjøpsordrer hentes inn.
- Planlagt start og slutt samt arbeidssentre skrives tilbake til
mrp.workorder. - Fremdrift og registrert tid sendes tilbake som Time Logs i Odoo.
- SkyPlanner sender planendringer via webhooks så snart de skjer.
Under oppstarten setter SkyPlanner-teamet opp integrasjonen via Odoos standard eksterne API, tilpasset versjonen, driftsmiljøet og tilpasningene deres. Teamet gir også støtte etter produksjonssetting. Denne guiden er for partnere og utviklere som vil delta, eller selv bygge på SkyPlanners dokumenterte REST API (API-referanse). Håndtering av produkter, materialer og innkjøpsordrer er beskrevet i den offentlige SkyPlanner-dokumentasjonen.
Før dere begynner: sjekk Odoo-abonnement og driftsmiljø
Finn først ut hvilken Odoo-løsning kunden bruker. Det avgjør fremgangsmåten.
| Oppsett | Eksternt API | Egendefinerte moduler | Praktisk fremgangsmåte |
|---|---|---|---|
| Odoo Online, One App Free eller Standard | Nei | Nei | CSV/XLSX, eller bytt til Custom-abonnementet |
| Odoo Online, Custom-abonnement | Ja | Nei | Eksternt API |
| Odoo.sh (Custom-abonnement) | Ja | Ja | Eksternt API, valgfri modul |
| Lokal drift, Community eller Enterprise | Ja | Ja | Eksternt API, valgfri modul |
Odoos API-dokumentasjon oppgir at ekstern API-tilgang er «only available on Custom Odoo pricing plans» (bare tilgjengelig med Odoo-abonnementet Custom), ikke med One App Free eller Standard. På prissiden beskrives Standard som driftet på Odoo Online «without custom modules» (uten egendefinerte moduler). Avklar dette i kartleggingen, ikke halvveis i utviklingen.
Integrasjonsmuligheter i Odoo
| Alternativ | Versjoner | Autentisering | Rolle i en integrasjon for produksjonsplanlegging |
|---|---|---|---|
Eksternt JSON-2-API: POST /json/2/<model>/<method> | Nytt i 19.0 | API-nøkkel i Authorization: bearer <key>, valgfritt X-Odoo-Database-hode | Standard for nye integrasjoner: search_read for lesing, write for tilbakeskriving av datoer |
Ekstern XML-RPC / JSON-RPC: /xmlrpc/2, /jsonrpc, tjenestene common, object | Til og med 19.0; planlagt fjernet | common.authenticate med brukernavn og passord eller API-nøkkel, deretter execute_kw | Påkrevd for kunder på 16.0 til 18.0 |
| Egendefinerte kontrollere i en modul | Alle | Per rute, f.eks. auth='bearer' | Samlede nyttelaster: en MO med tilhørende produksjonsordrer i ett kall |
| Automatiseringsregler: «Send Webhook Notification» | Dokumentert fra 17.0 | Utgående POST til en URL | Sender data når MO-er og produksjonsordrer opprettes eller redigeres |
| Import av poster (CSV, XLSX) og eksport | Alle | Brukerøkt | Data til utprøving og engangsinnlasting av grunndata |
Planlegg for utfasing allerede nå. Odoo har planlagt å fjerne XML-RPC og JSON-RPC i Odoo 22 (høsten 2028) og Odoo Online 21.1 (vinteren 2027). Bygg på JSON-2 for 19.0, og isoler RPC-kallene bak én adapter for eldre databaser. Da krever en oppgradering bare én endring. Egendefinerte kontrollere med @route(type='jsonrpc') berøres ikke av utfasingen.
Autentisering
Opprett en egen integrasjonsbruker med lesetilgang til Manufacturing og Inventory og skrivetilgang til produksjonsordrer. Generer nøkkelen under Preferences > Account Security > New API Key. I 19.0 er nøkler gyldige i maksimalt tre måneder, så mellomvaren må håndtere nøkkelrotasjon og varsle ved autentiseringsfeil. Uten dette vil en utløpt nøkkel stoppe synkroniseringen uten at det blir oppdaget. På SkyPlanner-siden bruker REST API-et JWT, så mellomvaren må ha begge settene med påloggingsopplysninger.
Hvert JSON-2-kall kjører i sin egen SQL-transaksjon. En skriveoperasjon fordelt over flere kall er derfor ikke atomisk. Skriv én produksjonsordre om gangen, og logg hvert resultat.
Hendelser
Odoo sender endringer gjennom automatiseringsregler. En regel på mrp.production eller mrp.workorder med utløseren On create and edit og handlingen «Send Webhook Notification» sender en POST med de valgte feltene til en URL. Opprett regelen i Studio, eller fra skjemaet Automation Rules i utviklermodus. Kombiner regelen med en tidsstyrt search_read-spørring på write_date for å fange opp importer og alt regelen ikke fanget opp. I motsatt retning sender SkyPlanner-webhooker endringer i plan og status idet de skjer.
Feltnavn varierer mellom versjoner. I 19.0 viser hver database sine modeller, felt og metoder på /doc. I eldre versjoner bruker du fields_get. Bruk dette som grunnlag for mappingen, ikke hukommelsen.
Datakobling: fra Odoo til SkyPlanner
| Odoo-modell | SkyPlanner-objekt | Retning | Hyppighet |
|---|---|---|---|
product.product / product.template (default_code, uom_id, qty_available) | Produkt eller materiale | Odoo → SkyPlanner | Førstegangsinnlasting, deretter daglig eller ved endring |
mrp.bom (product_tmpl_id, product_qty, produce_delay), mrp.bom.line (product_id, product_qty, operation_id), mrp.bom.byproduct | Produktstruktur med flere nivåer, materialbehov per prosesstrinn | Odoo → SkyPlanner | Ved endring |
mrp.routing.workcenter (fanen Operations: workcenter_id, sequence, time_mode, time_cycle_manual, blocked_by_operation_ids) | Prosesstrinn med rekkefølge og kjøretid | Odoo → SkyPlanner | Ved endring |
mrp.workcenter (resource_calendar_id, time_efficiency, time_start, time_stop, alternative_workcenter_ids) | Arbeidsstasjon, effektivitet, klargjøring og opprydding, alternative arbeidsstasjoner | Odoo → SkyPlanner, deretter vedlikehold i SkyPlanner | Førstegangsinnlasting |
mrp.workcenter.capacity (capacity) | Antall enheter per syklus, produktspesifikke tider for klargjøring og opprydding | Odoo → SkyPlanner | Førstegangsinnlasting |
resource.calendar, resource.calendar.attendance, resource.calendar.leaves | Skift og fravær | Odoo → SkyPlanner | Førstegangsinnlasting, fravær ved endring |
mrp.production (product_id, product_qty, date_deadline, priority, state, workorder_ids) | Ordre med leveringsfrist og prioritet | Odoo → SkyPlanner | Webhook ved bekreftelse, i tillegg til periodiske spørringer |
mrp.workorder (operation_id, workcenter_id, duration_expected, state) | Jobb på en arbeidsstasjon | Odoo → SkyPlanner | Webhook, i tillegg til periodiske spørringer |
stock.quant, stock.move (lagerbevegelser for komponenter) | Lagerbeholdning og materialbehov for materialstyrt produksjonsplanlegging | Odoo → SkyPlanner | Tidsstyrt, f.eks. med 15 til 60 minutters mellomrom |
purchase.order (partner_id, state), purchase.order.line (product_id, product_qty, date_planned, qty_received) | Innkjøpsordrer og innkommende materialer, tilgjengelige på forventet leveringsdato | Odoo → SkyPlanner | Webhook når en innkjøpsordre bekreftes eller redigeres, i tillegg til samme tidsstyrte spørring |
| Planlagt start, slutt og arbeidsstasjon | mrp.workorder.date_start, date_finished, workcenter_id | SkyPlanner → Odoo | Ved planendring, via SkyPlanner-webhook |
| Mobile Confirmations, tidsregistreringer | mrp.workcenter.productivity (Time Logs: workcenter_id, workorder_id, date_start, date_end, loss_id) | SkyPlanner → Odoo | Ved hver bekreftelse |
| Produsert mengde, fullført operasjon | qty_producing på produksjonsordren, deretter button_finish; button_mark_done på MO-en | SkyPlanner → Odoo, eller registreres i Odoo Shop Floor | Ved hver bekreftelse |
Integrasjonsmønstre
Grunndata først.
Last inn arbeidssentre og kalendere først, deretter produkter, stykklister og operasjoner som refererer til arbeidssentrene. I prøveperioden på 30 dager lastes de samme listene inn som CSV-eksporter. Odoos verktøy for import og eksport fungerer i alle listevisninger.
Synkronisering av ordrer.
Hent inn MO-er med status confirmed og progress, sammen med tilhørende produksjonsordrer. Utelat MO-er i utkaststatus, eller behandle dem som foreløpig etterspørsel. Delsammenstillinger med egen stykklistestruktur kan komme inn som separate underordnede MO-er, og Odoo planlegger hver MO for seg. Knytt dem til underprodukter i SkyPlanner, slik at delsammenstillingene blir ferdige før produksjonen av hovedproduktet starter.
Tilbakeskriving av produksjonsplanen.
Når planen endres, utløser en SkyPlanner-webhook integrasjonen. Den kaller ORM-metoden write på hver berørte mrp.workorder. I Odoo 19.0 innebærer det én JSON-2-forespørsel per produksjonsordre:
« POST /json/2/mrp.workorder/write Authorization: bearer <api-key> {"ids": [4711], "vals": {"date_start": "2026-11-03 06:00:00", "date_finished": "2026-11-03 09:30:00", "workcenter_id": 7}} «
JSON-2 tar imot alle metodeargumenter med navn, i tillegg til ids og context. Dermed blir write(vals) til nøkkelen vals. I 16.0 til 18.0 kjøres samme kall som execute_kw(db, uid, key, 'mrp.workorder', 'write', [[4711], vals]) over XML-RPC eller JSON-RPC. I 16.0 er nøklene date_planned_start og date_planned_finished. Dato og klokkeslett sendes i UTC. Følg noen få regler for korrekt tilbakeskriving:
- Send begge datoene i samme kall.
- Ta bare med
workcenter_idnår motoren har valgt en alternativ maskin. - Skriv bare til planleggingsfelter, aldri til mengder eller stykklister.
Når datoene skrives tilbake, flyttes Odoos egen reservasjon av arbeidssenteret. Dermed viser planleggingsvisningene i Odoo planen fra SkyPlanner.
Fra produksjonsgulvet tilbake til Odoo. Operatørene registrerer arbeid i SkyPlanner Mobile Confirmations. For hver bekreftelse kaller integrasjonen create på mrp.workcenter.productivity (JSON-2: POST /json/2/mrp.workcenter.productivity/create med vals_list). Den fyller ut workorder_id, workcenter_id, date_start, date_end og en loss_id av typen Productive. Arbeidstid og kostnader føres dermed i Odoo.
Når en operasjon er fullført, setter integrasjonen produsert mengde og kaller button_finish på produksjonsordren. Etter den siste produksjonsordren er MO-en klar for button_mark_done. Hver bekreftelse overføres én gang, og ID-en til Odoo-posten lagres sammen med tidsregistreringen i SkyPlanner. Dermed oppretter et nytt forsøk med samme webhook aldri en ekstra Time Log.
Fabrikker som bruker Enterprise Shop Floor-appen, gjør dette i motsatt retning: SkyPlanner leser statusen på produksjonsordren og qty_produced, og Autopilot planlegger automatisk på nytt når produksjonen endres.
Dataeierskap. Skriv ned reglene før produksjonssetting:
| Data | Eier |
|---|---|
| Produkter, stykklister, operasjoner, mengder, MO-status | Odoo |
| Rekkefølge på produksjonsordrer, start- og sluttider, valg av arbeidssenter | SkyPlanner |
| Matrise for omstillingstider, krav til verktøy og operatører, alternative ressurser | SkyPlanner |
| Arbeidssenterkalendere og Time Off | Ett system, valgt under avklaringen |
| Time Logs, lager og kostnadsberegning | Odoo, med innmeldinger fra SkyPlanner |
Planleggerne slutter å bruke Plan og Unplan i Odoo på tilvirkningsordrer som SkyPlanner planlegger. Ellers legger Odoo inn egne tidsreservasjoner som overskriver datoene fra SkyPlanner.
Typiske prosjektfaser
Implementeringen fullføres normalt i løpet av noen uker etter at oppstarten er i gang. Før det kjøres den gratis prøveperioden på 30 dager med CSV-eksporter av deres egne Odoo-data. Selve prosjektet omfatter:
- Mapping av grunndata: Odoo-modeller og -felt per versjon (sjekk
/docellerfields_get), måleenheter og hvilket system som vedlikeholder kalendere og Time Off. - Opprydding: arbeidssenterkalendere, Setup Time og Cleanup Time, og varigheter satt til Fixed i stedet for Computed for operasjonene i stykklistene.
- Første innlasting: produkter, arbeidssentre med kalendere, stykklister og tilhørende operasjoner.
- Synkronisering av ordrer og innkjøpsordrer: bekreftede og påbegynte MO-er med tilhørende produksjonsordrer, samt linjer i
purchase.ordermed forventede ankomstdatoer. - Tilbakeskriving av planen: datoer og arbeidssentre på
mrp.workorder, med rotasjon av API-nøkler på Odoo-siden. - Innmeldinger fra produksjonsgulvet: Time Logs og ferdigmeldinger for produksjonsordrer tilbake til Odoo.
- Testing parallelt med gjeldende plan, deretter produksjonssetting.
Fallgruver i Odoo
- Datofelt har fått nye navn. Til og med 16.0 inneholdt
date_planned_startogdate_planned_finishedde planlagte tidspunktene, mensdate_start/date_finishedinneholdt de faktiske. Fra 17.0 erdate_startogdate_finishedde planlagte tidspunktene. En mapping kopiert fra et 16.0-prosjekt leser faktiske tidspunkter som planlagte i 17+ uten å varsle om det. - Datoene på produksjonsordren er reservasjoner. I 19.0 beregnes
date_startogdate_finishedpåmrp.workorderfra enresource.calendar.leaves-post (leave_id) i arbeidssenterets kalender. Når datoene på produksjonsordren skrives, oppdateres denne reservasjonen. Skriv aldri direkte til fraværstabellen. - Påbegynte produksjonsordrer blokkerer Unplan. Odoo nekter å fjerne en MO fra planen når meldingen «Some work orders have already started» (noen produksjonsordrer er allerede startet) vises. Hopp over produksjonsordrer med status
progressellerdoneved tilbakeskriving, og flytt bare dem som ikke er startet. - Varighetene endrer seg. Operasjoner satt til Computed henter varigheten fra de siste produksjonsordrene (10 som standard), justert med Time Efficiency. Sett dem til Fixed i prøveperioden, eller aksepter at inngangsdataene endrer seg. Operasjonene ligger på hver enkelt stykkliste, uten felles grunndata for produksjonsruter. Derfor må hver stykkliste ryddes opp i separat.
- Feil i kalenderne. Hvert arbeidssenter trenger en arbeidstidskalender. Odoos egen planlegger søker opptil 700 dager fremover og stopper deretter med meldingen «Impossible to plan the workorder» (kan ikke planlegge produksjonsordren). Rett opp kalenderne før første innlasting.
- Måleenheter.
mrp.bom.linehar sin egenproduct_uom_id, som kan avvike fra produktets lagerenhet. Regn om enhetene før du kontrollerer materialtilgjengeligheten.
Hvem setter opp Odoo-integrasjonen?
Hver fabrikk bruker Odoo på sin måte, med egne operasjoner i stykklistene, arbeidssenterkalendere, alternative arbeidssentre og egendefinerte moduler. SkyPlanner-teamet har kompetansen som trengs for å koble dataene riktig for nettopp dette oppsettet.
- SkyPlanner-teamet setter opp integrasjonen for deres Odoo-oppsett under oppstarten og gir støtte etter produksjonssetting. Integrasjonen bruker SkyPlanners REST API og webhooks samt Odoos JSON-2- eller RPC-API. Dette er standard fremgangsmåte.
- Odoo-partneren deres kan delta. Partneren kjenner oppsettet og de egendefinerte modulene deres og kan bygge på det samme dokumenterte REST API-et. API-et leser og skriver ordrer, produkter, materialer, prosesstrinn og tidsregistreringer, med JWT-autentisering og Swagger/OpenAPI-dokumentasjon.
- Deres egne utviklere kan gjøre det samme, vanligvis med en liten mellomvare ved siden av Odoo, eller som en modul på Odoo.sh eller i et lokalt driftsmiljø. En API-nøkkel er nok til å komme i gang (integrasjonsveiledning), og SkyPlanner-teamet hjelper til ved behov.
Den samme modellen er i produksjon med andre ERP-systemer. Hos Laboratory & Allied bygde det interne IT-teamet i stor grad SAP Business One-integrasjonen selv, med hjelp fra SkyPlanner. UTU bruker SkyPlanner sammen med ERP-systemet NetSuite.
Hvorfor integrasjonen lønner seg
Det er tilbakeskrivingen som gjør integrasjonen nyttig i hverdagen. Når den er i drift:
- Odoo-produksjonsordrene får konkrete tidspunkter. Arcturus AI-motoren setter alle åpne MO-er i rekkefølge på sekunder. Tidspunktene og de valgte arbeidsstasjonene skrives til
mrp.workorder, der de vises i Odoos planleggingsvisninger. - Ingen omplanlegging for hånd. Autopilot justerer planen automatisk når produksjonen endrer seg, og webhooken sender de nye datoene til Odoo.
- Tilbakemeldinger direkte fra produksjonsgulvet. Operatørene registrerer arbeid på telefon eller nettbrett med Mobile Confirmations, Production Timer og Quick Log Mode. Time Logs sendes til Odoo for lagerføring og kostnadsberegning. Planlegging og utførelse håndteres i ett verktøy, både med Community og Enterprise.
- Planen tar hensyn til begrensninger Odoo ikke håndterer. En omstillingsmatrise angir rekkefølgeavhengige omstillinger for hvert produktpar. Verktøy er begrensede ressurser som deles mellom maskiner, og en jobb kan kreve flere operatører samtidig. Motoren velger alternative maskiner eller medarbeidere når førstevalget ikke er tilgjengelig. Tidspunktene som skrives tilbake til
mrp.workorder, tar hensyn til alle disse begrensningene. - Materialtilgangen styrer planen. Lagerbeholdning og åpne innkjøpsordrer i Odoo danner grunnlaget for materialstyrt planlegging. Bestilte komponenter regnes som tilgjengelige på innkjøpsordrens leveringsdato, og lagerbeholdningen oppdateres når innkjøpsordren merkes som Delivered. Hver jobb kontrolleres mot det som finnes på lager, og det som er på vei.
Dere kan vurdere produksjonsplanen før noe integrasjonsarbeid starter. Start en gratis prøveperiode på 30 dager med CSV-eksporter, og se deres egne Odoo-produksjonsordrer i Gantt-diagrammet, med opptil 20 arbeidsstasjoner og uten kredittkort. Prisen er fra 199 € per måned med 5 arbeidsstasjoner inkludert. Abonnementet faktureres månedlig og kan sies opp når som helst. Dere får et pristilbud på integrasjonen sammen med abonnementet før oppstart, basert på prosessen og behovene deres. Dermed kjenner dere totalkostnaden før dere starter. Se funksjoner og kunder, eller bestill en demo.
Produsenter om SkyPlanner
2 hspart hver uke
«SkyPlanner har tatt produksjonsplanleggingen vår fra Excel-regneark til produksjonsoptimalisering i sanntid.»
Kalle Kalliomäki, spesialist på forsyningskjeder
UTU · Elektriske tavler og koblingsanlegg
Produksjonsplanleggingen sparer 2 arbeidstimer hver uke, og en ny jobbkø når produksjonslinjen på sekunder.
+90%produksjonseffektivitet
«Effektiviteten i produksjonen har økt med 90%.»
Abdul Rucyinga, IT-sjef
Laboratory & Allied · Legemiddelproduksjon
Produksjonseffektiviteten har økt med 90%, og det tar under 30 minutter å lage en optimalisert plan for tre måneder som dekker alle arbeidsstasjonene.
1 000-visav produksjonsordrer planlegges automatisk
«Vi har kontroll på produksjonen på en helt annen måte, og forståelsen vår av kapasiteten er på et helt annet nivå.»
Hannu Ryynänen, administrerende direktør
Mamec · Industrielle miksere, pumper og høyteknologisk kontraktsproduksjon
Tusenvis av produksjonsordrer planlegges automatisk, og hele organisasjonen har oversikt over produksjonen i sanntid.
99,2%leveringspålitelighet
«SkyPlanner har gitt oss oversikten vi trenger for å identifisere flaskehalser, og gjort produksjonsstyringen mer oversiktlig.»
Toni Tuori, produksjonssjef
Piristeel · Taksikring og takrennesystemer
Leveringspåliteligheten nådde 99,2% i år, og produksjonsplanleggingen sparer opptil fire timers arbeidstid per dag.
Ofte stilte spørsmål
Fungerer integrasjonen på Odoo Online?
Ja, med Custom-abonnementet, via det eksterne API-et. One App Free og Standard har ikke tilgang til det eksterne API-et, og Standard kjører uten egendefinerte moduler. Disse abonnementene er derfor begrenset til import og eksport av CSV/XLSX.
Bør vi bruke JSON-2 eller XML-RPC?
JSON-2 på Odoo 19.0 og nyere. XML-RPC og JSON-RPC er fortsatt nødvendige for 16.0 til 18.0, men skal etter planen fjernes i Odoo 22.
Hvordan overføres produksjonsplanen tilbake til Odoo?
Via ORM-metoden write på hver mrp.workorder: POST /json/2/mrp.workorder/write med ids og vals i 19.0, eller execute_kw med write over XML-RPC eller JSON-RPC i 16.0 til 18.0. Verdiene er date_start, date_finished (date_planned_start og date_planned_finished i 16.0) og workcenter_id hvis arbeidsstasjonen er endret. Odoo flytter samtidig reservasjonen i arbeidssenteret, slik at Odoos planleggingsvisninger viser tidspunktene fra SkyPlanner.
Hvordan overføres operatørenes bekreftelser til Odoo?
Som Time Logs: Integrasjonen oppretter mrp.workcenter.productivity-poster knyttet til produksjonsordren, med start, slutt og tapsårsaken Productive. Deretter kaller den button_finish når operasjonen er fullført. Hver bekreftelse overføres én gang, så nye forsøk ikke gir doble tidsregistreringer.
Hvem vedlikeholder integrasjonen etter at den er satt i drift?
SkyPlanner-teamet konfigurerer integrasjonen under oppstarten og følger den opp etter at den er satt i drift, også når endringer i Odoo-oppsettet krever tilpasninger. Hvis partneren eller utviklerne deres bygger integrasjonen, bruker de det dokumenterte REST API-et og SkyPlanner-dokumentasjonen. Teamet bistår ved behov.
Hva skjer med produksjonsordrer som allerede er startet?
La dem være uendret når data skrives tilbake. Odoo blokkerer fjerning av en MO fra planen når en produksjonsordre er påbegynt eller ferdig. SkyPlanner leser statusen og fremdriften deres og planlegger det gjenstående arbeidet rundt dem.
Hvor lang tid tar Odoo-integrasjonen?
Implementeringen er normalt ferdig i løpet av noen uker etter at oppstartsarbeidet begynner. Bruk først prøveperioden på 30 dager med CSV-eksporter. Da er produksjonsplanen testet med deres egne Odoo-data før API-arbeidet starter.