Kobler seg til ERP- og MES-systemer som

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?.

Gantt-tidslinje i SkyPlanner APS med jobber fordelt på arbeidsstasjoner og en ordreliste nedenfor.

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.

OppsettEksternt APIEgendefinerte modulerPraktisk fremgangsmåte
Odoo Online, One App Free eller StandardNeiNeiCSV/XLSX, eller bytt til Custom-abonnementet
Odoo Online, Custom-abonnementJaNeiEksternt API
Odoo.sh (Custom-abonnement)JaJaEksternt API, valgfri modul
Lokal drift, Community eller EnterpriseJaJaEksternt 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

AlternativVersjonerAutentiseringRolle i en integrasjon for produksjonsplanlegging
Eksternt JSON-2-API: POST /json/2/<model>/<method>Nytt i 19.0API-nøkkel i Authorization: bearer <key>, valgfritt X-Odoo-Database-hodeStandard for nye integrasjoner: search_read for lesing, write for tilbakeskriving av datoer
Ekstern XML-RPC / JSON-RPC: /xmlrpc/2, /jsonrpc, tjenestene common, objectTil og med 19.0; planlagt fjernetcommon.authenticate med brukernavn og passord eller API-nøkkel, deretter execute_kwPåkrevd for kunder på 16.0 til 18.0
Egendefinerte kontrollere i en modulAllePer rute, f.eks. auth='bearer'Samlede nyttelaster: en MO med tilhørende produksjonsordrer i ett kall
Automatiseringsregler: «Send Webhook Notification»Dokumentert fra 17.0Utgående POST til en URLSender data når MO-er og produksjonsordrer opprettes eller redigeres
Import av poster (CSV, XLSX) og eksportAlleBrukerøktData 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-modellSkyPlanner-objektRetningHyppighet
product.product / product.template (default_code, uom_id, qty_available)Produkt eller materialeOdoo → SkyPlannerFø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.byproductProduktstruktur med flere nivåer, materialbehov per prosesstrinnOdoo → SkyPlannerVed endring
mrp.routing.workcenter (fanen Operations: workcenter_id, sequence, time_mode, time_cycle_manual, blocked_by_operation_ids)Prosesstrinn med rekkefølge og kjøretidOdoo → SkyPlannerVed endring
mrp.workcenter (resource_calendar_id, time_efficiency, time_start, time_stop, alternative_workcenter_ids)Arbeidsstasjon, effektivitet, klargjøring og opprydding, alternative arbeidsstasjonerOdoo → SkyPlanner, deretter vedlikehold i SkyPlannerFørstegangsinnlasting
mrp.workcenter.capacity (capacity)Antall enheter per syklus, produktspesifikke tider for klargjøring og oppryddingOdoo → SkyPlannerFørstegangsinnlasting
resource.calendar, resource.calendar.attendance, resource.calendar.leavesSkift og fraværOdoo → SkyPlannerFørstegangsinnlasting, fravær ved endring
mrp.production (product_id, product_qty, date_deadline, priority, state, workorder_ids)Ordre med leveringsfrist og prioritetOdoo → SkyPlannerWebhook ved bekreftelse, i tillegg til periodiske spørringer
mrp.workorder (operation_id, workcenter_id, duration_expected, state)Jobb på en arbeidsstasjonOdoo → SkyPlannerWebhook, i tillegg til periodiske spørringer
stock.quant, stock.move (lagerbevegelser for komponenter)Lagerbeholdning og materialbehov for materialstyrt produksjonsplanleggingOdoo → SkyPlannerTidsstyrt, 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 leveringsdatoOdoo → SkyPlannerWebhook når en innkjøpsordre bekreftes eller redigeres, i tillegg til samme tidsstyrte spørring
Planlagt start, slutt og arbeidsstasjonmrp.workorder.date_start, date_finished, workcenter_idSkyPlanner → OdooVed planendring, via SkyPlanner-webhook
Mobile Confirmations, tidsregistreringermrp.workcenter.productivity (Time Logs: workcenter_id, workorder_id, date_start, date_end, loss_id)SkyPlanner → OdooVed hver bekreftelse
Produsert mengde, fullført operasjonqty_producing på produksjonsordren, deretter button_finish; button_mark_done på MO-enSkyPlanner → Odoo, eller registreres i Odoo Shop FloorVed 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_id nå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:

DataEier
Produkter, stykklister, operasjoner, mengder, MO-statusOdoo
Rekkefølge på produksjonsordrer, start- og sluttider, valg av arbeidssenterSkyPlanner
Matrise for omstillingstider, krav til verktøy og operatører, alternative ressurserSkyPlanner
Arbeidssenterkalendere og Time OffEtt system, valgt under avklaringen
Time Logs, lager og kostnadsberegningOdoo, 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:

  1. Mapping av grunndata: Odoo-modeller og -felt per versjon (sjekk /doc eller fields_get), måleenheter og hvilket system som vedlikeholder kalendere og Time Off.
  2. Opprydding: arbeidssenterkalendere, Setup Time og Cleanup Time, og varigheter satt til Fixed i stedet for Computed for operasjonene i stykklistene.
  3. Første innlasting: produkter, arbeidssentre med kalendere, stykklister og tilhørende operasjoner.
  4. Synkronisering av ordrer og innkjøpsordrer: bekreftede og påbegynte MO-er med tilhørende produksjonsordrer, samt linjer i purchase.order med forventede ankomstdatoer.
  5. Tilbakeskriving av planen: datoer og arbeidssentre på mrp.workorder, med rotasjon av API-nøkler på Odoo-siden.
  6. Innmeldinger fra produksjonsgulvet: Time Logs og ferdigmeldinger for produksjonsordrer tilbake til Odoo.
  7. Testing parallelt med gjeldende plan, deretter produksjonssetting.

Fallgruver i Odoo

  • Datofelt har fått nye navn. Til og med 16.0 inneholdt date_planned_start og date_planned_finished de planlagte tidspunktene, mens date_start/date_finished inneholdt de faktiske. Fra 17.0 er date_start og date_finished de 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_start og date_finished på mrp.workorder fra en resource.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 progress eller done ved 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.line har sin egen product_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.

  1. 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.
  2. 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.
  3. 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

Kalle Kalliomäki, spesialist på forsyningskjeder hos UTU, i tavleproduksjonen i Ulvila

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.

Les kundeomtalen fra UTU

Operatører i renromsdrakter ved en flaskefyllingslinje på Laboratory & Allieds legemiddelfabrikk i Nairobi

+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.

Les kundeomtalen fra Laboratory & Allied

Hannu Ryynänen, administrerende direktør i Mamec, i selskapets produksjonshall i Lohja

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.

Les kundeomtalen fra Mamec

Flyfoto av Piristeels fabrikk for taksikringsutstyr i Kauhava

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.

Les kundeomtalen fra Piristeel

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.