Azure North Europe · IoT · Power Automate · ADF

Integrations & Data Pipelines

5 integration patterns connecting AKVA IoT hardware, 130+ environmental sensors, Norwegian regulatory APIs, and legacy aquaculture databases — all into the Azure-hosted AquaMonitor platform.

22
AKVA IoT Devices
130+
Env. Sensors
4
Regulatory APIs
8
Automate Flows
▼ scroll

Integration Architecture

flowchart TB subgraph EDGE["On-Site Edge"] AKVA["AKVA iFeed\nFeed Barges (22)"] ENV["Environmental Sensors\nTemp / O₂ / Salinity (130+)"] GPS["GPS / AIS\nVessel Tracking"] end subgraph AZURE["Azure North Europe"] IH["IoT Hub\n(AMQP/MQTT)"] SA["Stream Analytics\n(CEP - complex event)"] ADX["Azure Data Explorer\n(time-series store)"] LA["Logic Apps\n(feed event mapper)"] ADF["Azure Data Factory\n(hist. migration)"] end subgraph PLATFORM["AquaMonitor Platform"] DV["Dataverse\n(biological tables)"] D365["D365 F&O\n(inventory + finance)"] PBI["Power BI\n(DirectQuery ADX)"] end subgraph REG["Norwegian Regulatory"] BW["BarentsWatch\nLusedata API"] ALT["Altinn\nMaskinporten"] MAT["Mattilsynet\nTerapiregister"] FD["Fiskeridirektoratet\nHarvest Register"] end AKVA-->IH ENV-->IH GPS-->IH IH-->SA SA-->ADX SA--"Feed events"-->LA LA--"OData POST"-->D365 LA--"Dataverse Write"-->DV ADF--"Historical load"-->DV DV--"Power Automate"-->BW DV--"Power Automate"-->MAT DV--"Power Automate"-->FD DV--"Power Automate"-->ALT ADX--"DirectQuery"-->PBI D365--"OData"-->PBI style EDGE fill:#071228,stroke:#6a8fa8,color:#d4eaf5 style AZURE fill:#071e38,stroke:#00b4d8,color:#d4eaf5 style PLATFORM fill:#071e13,stroke:#06d6a0,color:#d4eaf5 style REG fill:#1a1400,stroke:#fca311,color:#d4eaf5
AKVA Group
INT-01
AKVA iFeed Barge — Feed Automation
22 AKVA iFeed 2.0 feed barges → IoT Hub → D365 Inventory Consumption Journal
Protocol
AMQP 1.0 over TLS. AKVA Central Management Server pushes 15-min feed dispense events.
IoT Hub
Azure IoT Hub Standard S2 (10M messages/day). Device identity per barge (22 devices).
Stream Analytics
ASA job aggregates 15-min events to hourly feed totals per pen. Routes to Logic App output.
Logic App
Maps AKVA silo ID → D365 ItemId + InventSite. Constructs InventJournalTrans payload.
D365 Write-back
OData POST to InventJournalEntity (consumption). Fish Generation dimension auto-injected (X++ ext.).
Error Handling
Dead letter queue on IoT Hub → Logic App retry 3×. Failed events to alert nha_envalert table.
flowchart TD BARGE["AKVA iFeed 2.0\nFeed dispense event\n{pen_id, silo_id, kg, timestamp}"] IH2["IoT Hub\nAMQP → D2C message"] SA2["Stream Analytics\nAggregate per pen/hour"] LA2["Logic App\nMap → D365 payload"] D365b["D365 OData POST\nInventJournalEntity\n(consumption type)"] DV2["Dataverse Write\nnha_feedevent\n(raw + aggregated)"] BARGE-->IH2-->SA2-->LA2-->D365b LA2-->DV2 style BARGE fill:#071228,stroke:#00b4d8,color:#d4eaf5 style D365b fill:#071e13,stroke:#06d6a0,color:#d4eaf5
🚢
AKVA iFeed 2.0 Barge
Automated feed silo barge per site. Multiple silos. Real-time feed monitoring.
Feed Dispensing Sensors
Silo level sensors + camera-based waste detection per pen.
📷
Underwater Cameras
AI feeding response monitoring (AKVA FeedVision). Optimizes feed rate.
🌡️
Feed Temperature Probes
Silo temperature monitoring. Alerts on spoilage risk.
Azure IoT Hub
INT-02
Environmental Sensor Network
130+ in-pen sensors → IoT Hub → Azure Data Explorer + Dataverse alerts
Sensors
130+ sensors across all sea sites. 15-minute polling. ~700,000 readings/month.
Measurements
Water temperature (surface & depth), dissolved O₂, salinity, pH, sea current speed.
ADX Storage
Azure Data Explorer cluster (D11 v2). Retention: 5 years raw, compressed columnar. DirectQuery from PBI.
Alert Routing
Stream Analytics alert rule → Logic App → Dataverse nha_envalert record + Teams push + SMS (critical O₂).
Thresholds
O₂ < 8 mg/L = warning; O₂ < 6 mg/L = critical. Temp > 22°C = heat stress alert.
Redundancy
Sensors in overlapping zones. IoT Hub geo-redundant (North + West Europe). 99.95% SLA.
🌡️
Temp Probes
Multi-depth strings, 1m intervals
💧
O₂ Sensors
DO% and mg/L optical sensors
🧂
Salinity CTD
Conductivity-Temperature-Depth
🌊
Current Meters
Vector current speed/direction
BarentsWatch
INT-03
BarentsWatch — Sea Lice Reporting
Weekly automated lice count submission via Power Automate (AQUA-FLOW-001 & 008)
API
BarentsWatch Lusedata API v2.0. Norwegian government partner access via Maskinporten OAuth2.
Trigger
Power Automate AQUA-FLOW-001: nha_licecount Status = Finalized by site manager.
Payload
Per-pen weekly averages (adult female, moving females, juvenile, chalimus). Zone aggregation calculated in MDA.
AQUA-FLOW-008
Real-time alert when adult female lice > 0.5 threshold. Creates Teams alert + email to Mattilsynet zone coordinator.
Confirmation
BarentsWatch returns submission ID. Stored on nha_licecount as receipt reference for audit.
sequenceDiagram actor SM as Site Manager participant MDA as AquaMonitor MDA participant PA as Power Automate participant BW as BarentsWatch API SM->>MDA: Finalize weekly lice count MDA->>PA: Trigger AQUA-FLOW-001 PA->>BW: POST /lusedata (Maskinporten JWT) BW-->>PA: 200 OK + submissionId PA->>MDA: Update nha_licecount.SubmissionRef Note over SM,BW: AQUA-FLOW-008 runs if af>0.5 PA->>PA: Send Teams alert PA->>BW: POST /varsling (zone alert)
Altinn
INT-04
Norwegian Regulatory Reporting Bundle
Altinn · Mattilsynet · Fiskeridirektoratet — automated compliance submissions
AltinnAltinn — Biomass & MVA
api.altinn.no / Maskinporten
AQUA-FLOW-004 — Monthly biomass report (RF-1177) + quarterly MVA-melding (RF-0002). D365 GL data + Dataverse biomass aggregates combined.
Mattilsynet — Terapiregister
terapiregisteret.mattilsynet.no
AQUA-FLOW-002 — Triggered on treatment completion. Posts medication name, dose, method, withdrawal dates per pen. Vet certificate attached.
Fiskeridirektoratet — Harvest Declaration
sluttseddel.fiskeridir.no
AQUA-FLOW-003 — On harvest.Status = Certified. Posts landings declaration (species, weight, site, buyer, slaughterhouse) per Norwegian regulation.
Skatteetaten — SAF-T Financial
via D365 GER export
Annual on-demand GL export via D365 Electronic Reporting (GER) configured for Norwegian SAF-T Financial standard. No API — file submission to auditors.
Azure Data Factory
INT-05
Historical Data Migration
Azure Data Factory: FishTalk + AquaManager (PostgreSQL) → Dataverse + D365 (28 weeks, 3 years history)
Source Systems
FishTalk (sea ops & lice data, PostgreSQL) · AquaManager (biological journals, PostgreSQL) · FishTalk Hatchery (freshwater, Access/PostgreSQL)
History Volume
~3 years historical data. Estimate: 2.5M population journal rows · 800K feed events · 150K lice counts · 45K treatment records.
ADF Architecture
ADF Self-Hosted IR on NordHav server (on-premises source access) → Azure Blob staging → ADF dataflows → Dataverse + D365 OData.
P1
Schema Mapping
FishTalk → Dataverse column mapping. Custom fields enriched. Weeks 17–19.
P2
Master Data Load
Sites, pens, generations, feed products, suppliers. D365 DMF first. Weeks 20–21.
P3
Journal History
Population, mortality, lice, feed journals — 3 years. Dataverse OData. Weeks 22–24.
P4
Financial History
Prior year GL trial balance + open AP/AR. D365 opening balance journals. Weeks 24–25.
P5
Reconciliation
Row counts, biomass totals, financial balance verification with NordHav biology & finance teams. Weeks 25–26.

View analytics and rollout plan

See how integration data flows into 8 Power BI reports, and how the full platform is deployed over 28 weeks.