Dragino LSE01 Sensors

Payload contract, LoRa to HTTP forwarding, and simulator vs live mode for LSE01 soil probes.

Dette dokumentet beskriver hvordan Trat-gateway mottar og viser data fra Dragino LSE01 (jordfuktsensor med EC og temperatur). Andre sensorer kan kobles inn senere ved å utvide payload-kontrakt, dekodere og eventuelt lib/operations.php.

Kort om LSE01 i denne løsningen

LSE01 måler blant annet volumetrisk vanninnhold (her rapportert som VWC %), elektrisk ledningsevne (EC) i µS/cm, jordtemperatur og ofte en indikasjon på batterispenning. Gateway lagrer hver avlesning som én rad i sensor_data med JSON i kolonnen data.

Dashboard (oversikt og data-fanen) leser disse feltene på rotnivå i JSON etter lagring:

Felt i data Betydning Enhet / merknad
type Profil-identifikator Bør være dragino_lse01 (konfigurerbart i lib/operations.php som lse01_type_value)
vwc Volumetrisk vanninnhold Prosent (tall)
ec Ledningsevne Heltall/desimal, µS/cm
soil_temp Jordtemperatur °C
battery Batteri / driftsspenning Volt (som regel ~3.0–3.6 V for LoRa-node)

Viktig: Ved HTTP POST til ingest.php skal du bruke formen:

JSON
{
  "sensor_id": "din-unike-sensor-id",
  "payload": {
    "type": "dragino_lse01",
    "vwc": 22.5,
    "ec": 850,
    "soil_temp": 12.3,
    "battery": 3.4
  }
}

Serveren lagrer kun innholdet i payload som sensor_data.data. sensor_id på raden settes fra det ytre feltet sensor_id. Den samme strengen må finnes i tabellen sensors.sensor_id hvis du vil at dashboard skal vise klientnavn og etikett.

Simulator vs. live-modus

  • SIMULATOR — dashboard kan generere syntetiske LSE01-lignende pakker for test (se fane «Simulator» / «Driftsmodus»). Krever aktive sensorer registrert i databasen.
  • LIVE — ingen simulert generering; forventer ekte POST-kall til ingest.php fra ditt nettverk eller mellomvare.

Modus lagres i data/settings.json (mode: SIMULATOR eller LIVE) og kan byttes i dashboard av personell med simulator-tilgang.

Standard modus ved ny installasjon

Hvis data/settings.json mangler eller mangler gyldig mode, brukes verdien fra lib/operations.phpdefault_runtime_mode (SIMULATOR eller LIVE). Sett LIVE her når du vil at en helt fersk installasjon uten settings-fil skal starte i drift mot ekte sensorer.

Andre enkle verdier som styrer samme faglige profil (sensortype, ingest-sti, feltnavn) ligger i samme fil — se kommentarer der og live-info-kortet i dashboard når LIVE er aktivt.

Miljøvariabler (.env)

Variabel Rolle for LSE01 / ingest
INGEST_API_KEY Må sendes som header X-API-Key på alle kall til ingest.php
GATEWAY_CODE Matcher gateways.code i databasen; fyller sensor_data.gateway_id for sporing av hvilken gateway som mottok pakken

sensor_id i posten må samsvare med konfigurasjon på nettverksserver (DevEUI-basert navn, egen ID-streng, osv.) — det viktige er konsistens mot tabellen sensors.

Rute fra LoRa til denne gateway

Typisk flyt:

  1. LSE01 sender LoRaWAN-melding til gateway (radio).
  2. Nettverksserver (f.eks. ChirpStack, The Things Stack, TTN, eller annen LNS) dekoder BYTES til strukturerte felt.
  3. HTTP-integrasjon (eller «webhook») på LNS sender JSON til din PHP-gateway.

Du må sikre at integrasjonen:

  1. Bruker HTTPS eller HTTP til riktig vert og sti (/ingest.php som standard — justerbar i lib/operations.php som ingest_path).
  2. Sender header Content-Type: application/json.
  3. Sender header X-API-Key lik INGEST_API_KEY.
  4. Bygger en JSON-kropp som enten:
  • følger anbefalt skjema over (sensor_id + payload med LSE01-felt), eller
  • mappes i et lite mellomlagskript som oversetter produsentens/dekoderens feltnavn til vwc, ec, soil_temp, battery.

Dekoder og feltnavn

Fabrikk-/fellesskaps-dekodere for LSE01 gir ofte andre nøkkelnavn enn de dashboard bruker. Det er helt vanlig å gjøre én av følgende:

  • Konfigurere en payload formatter som skriver ut nettopp vwc, ec, soil_temp, battery, type, eller
  • Kjøre en liten proxy (Node, Python, Nginx + Lua, osv.) som mapper felt før POST til ingest.php.

Uten slik mapping vil data fortsatt bli lagret (som rå JSON), men oversiktskolonnene for VWC/EC/temp/batteri kan vise til feltnavnene matcher.

Eksempel: manuell test med cURL

BASH
curl -s -X POST "https://din-gateway.example/ingest.php" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: DIN_NOKKEL" \
  -d '{
    "sensor_id": "lse01-felt-01",
    "payload": {
      "type": "dragino_lse01",
      "vwc": 18.2,
      "ec": 420,
      "soil_temp": 9.8,
      "battery": 3.35
    }
  }'

Forventet svar: {"status":"success","id":"..."}.

Registrering i dashboard

Før live data gir mening i UI:

  1. Opprett klient (eier).
  2. Opprett sensor med sensor_id nøyaktig lik den du sender i ingest.php.
  3. Sett riktig gateway / standard-gateway etter behov.
  4. Bytt til LIVE i driftsmodus når integrasjonen er klar.

Utvidelse til andre sensorer (senere)

Anbefalt mønster:

  1. Dokumenter ny payload-kontrakt (felt, enheter, type-verdi).
  2. Legg til profil i lib/operations.php (evt. flere primary_sensor-lignende oppføringer eller et enkelt register).
  3. Utvid dashboard (js/dashboard.js) med logikk som velger kolonner/parsing basert på data.type hvis flere profiler skal vises i samme tabell — eller hold én profil per gateway-instans.
  4. Juster simulator (api/simulator.php) med en ny generator for testdata om ønskelig.

Relaterte filer

Fil Hensikt
lib/operations.php Standard driftsmodus, sensortype-ID, ingest-sti, LSE01-feltnavn og type-streng
ingest.php Autentisering, validering, lagring med gateway_id
api/simulator.php Modus (SIMULATOR/LIVE), generering av syntetiske LSE01-pakker
data/settings.json Vedvarende mode (og auto_interval for simulator)
index.php Fane «Driftsmodus» / live-kort med URL og feltliste fra operations

Se også setup.md, api.md og database.md.