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:
{
"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.phpfra 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.php → default_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:
- LSE01 sender LoRaWAN-melding til gateway (radio).
- Nettverksserver (f.eks. ChirpStack, The Things Stack, TTN, eller annen LNS) dekoder BYTES til strukturerte felt.
- HTTP-integrasjon (eller «webhook») på LNS sender JSON til din PHP-gateway.
Du må sikre at integrasjonen:
- Bruker HTTPS eller HTTP til riktig vert og sti (
/ingest.phpsom standard — justerbar ilib/operations.phpsomingest_path). - Sender header
Content-Type: application/json. - Sender header
X-API-KeylikINGEST_API_KEY. - Bygger en JSON-kropp som enten:
- følger anbefalt skjema over (
sensor_id+payloadmed 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
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:
- Opprett klient (eier).
- Opprett sensor med
sensor_idnøyaktig lik den du sender iingest.php. - Sett riktig gateway / standard-gateway etter behov.
- Bytt til LIVE i driftsmodus når integrasjonen er klar.
Utvidelse til andre sensorer (senere)
Anbefalt mønster:
- Dokumenter ny payload-kontrakt (felt, enheter,
type-verdi). - Legg til profil i
lib/operations.php(evt. flereprimary_sensor-lignende oppføringer eller et enkelt register). - Utvid dashboard (
js/dashboard.js) med logikk som velger kolonner/parsing basert pådata.typehvis flere profiler skal vises i samme tabell — eller hold én profil per gateway-instans. - 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.