# muhammadraihanpramanawiguna/landia-smart-farming architecture

> Architecture diagram of the GitHub repository muhammadraihanpramanawiguna/landia-smart-farming, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/muhammadraihanpramanawiguna/landia-smart-farming
- Repository: https://github.com/muhammadraihanpramanawiguna/landia-smart-farming

## Overview

This repository is a set of Spring services for agricultural sensor telemetry and irrigation control. Sensor readings can be submitted through HTTP or received through MQTT, then saved and queried by sensor; the irrigation API publishes device commands and records execution events. The graph retains the six separate telemetry domains and the command path. The README is empty and listener, repository, and configuration implementations were not sampled, so their wiring is represented only where module names and the sampled service code support it.

Main entry points: [`irrigation-service/src/main/java/com/landiafarm/irrigationservice/service/IrrigationEventService.java`](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/irrigation-service/src/main/java/com/landiafarm/irrigationservice/service/IrrigationEventService.java) (Irrigation events), [`dht-service/src/main/java/com/landiafarm/dhtservice/service/DhtReadingService.java`](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/dht-service/src/main/java/com/landiafarm/dhtservice/service/DhtReadingService.java) (DHT readings), [`flow-service/src/main/java/com/landiafarm/flowservice/service/FlowReadingService.java`](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/flow-service/src/main/java/com/landiafarm/flowservice/service/FlowReadingService.java) (Flow readings), [`rain-service/src/main/java/com/landiafarm/rainservice/service/RainReadingService.java`](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/rain-service/src/main/java/com/landiafarm/rainservice/service/RainReadingService.java) (Rain readings)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_telemetry["Sensor telemetry"]
  node_dht_service["DHT readings"]
  node_dht_repo["DHT repository"]
  node_dht_mqtt["DHT listener"]
  node_flow_service["Flow readings"]
  node_flow_repo["Flow repository"]
  node_flow_mqtt["Flow listener"]
  node_rain_service["Rain readings"]
  node_rain_repo["Rain repository"]
  node_rain_mqtt["Rain listener"]
  node_soil_service["Soil readings"]
  node_soil_repo["Soil repository"]
  node_soil_mqtt["Soil listener"]
  node_water_service["Water level readings"]
  node_water_repo["Water level repository"]
  node_water_mqtt["Water level listener"]
end

subgraph group_api["HTTP APIs"]
  node_dht_http["DHT API"]
  node_flow_http["Flow API"]
  node_rain_http["Rain API"]
  node_soil_http["Soil API"]
  node_water_http["Water level API"]
end

subgraph group_actuation["Irrigation control"]
  node_irrigation_http["Irrigation API"]
  node_irrigation_service["Irrigation events"]
  node_irrigation_repo["Event repository"]
  node_publisher["Command publisher"]
end

node_client(("API client"))
node_broker(("MQTT broker"))
node_store[("Persistence store")]

node_client -->|"requests"| node_dht_http
node_client -->|"requests"| node_flow_http
node_client -->|"requests"| node_rain_http
node_client -->|"requests"| node_soil_http
node_client -->|"requests"| node_water_http
node_client -->|"requests"| node_irrigation_http
node_dht_http -->|"calls"| node_dht_service
node_flow_http -->|"calls"| node_flow_service
node_rain_http -->|"calls"| node_rain_service
node_soil_http -->|"calls"| node_soil_service
node_water_http -->|"calls"| node_water_service
node_irrigation_http -->|"calls"| node_irrigation_service
node_dht_service -->|"reads/writes"| node_dht_repo
node_flow_service -->|"reads/writes"| node_flow_repo
node_rain_service -->|"reads/writes"| node_rain_repo
node_soil_service -->|"reads/writes"| node_soil_repo
node_water_service -->|"reads/writes"| node_water_repo
node_irrigation_service -->|"reads/writes"| node_irrigation_repo
node_dht_repo -->|"persists"| node_store
node_flow_repo -->|"persists"| node_store
node_rain_repo -->|"persists"| node_store
node_soil_repo -->|"persists"| node_store
node_water_repo -->|"persists"| node_store
node_irrigation_repo -->|"persists"| node_store
node_broker -->|"delivers"| node_dht_mqtt
node_broker -->|"delivers"| node_flow_mqtt
node_broker -->|"delivers"| node_rain_mqtt
node_broker -->|"delivers"| node_soil_mqtt
node_broker -->|"delivers"| node_water_mqtt
node_dht_mqtt -->|"submits readings"| node_dht_service
node_flow_mqtt -->|"submits readings"| node_flow_service
node_rain_mqtt -->|"submits readings"| node_rain_service
node_soil_mqtt -->|"submits readings"| node_soil_service
node_water_mqtt -->|"submits readings"| node_water_service
node_irrigation_service -->|"publishes command"| node_publisher
node_publisher -->|"sends command"| node_broker

click node_dht_http "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/dht-service/src/main/java/com/landiafarm/dhtservice/controller/DhtReadingController.java"
click node_dht_service "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/dht-service/src/main/java/com/landiafarm/dhtservice/service/DhtReadingService.java"
click node_dht_repo "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/dht-service/src/main/java/com/landiafarm/dhtservice/repository/DhtReadingRepository.java"
click node_dht_mqtt "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/dht-service/src/main/java/com/landiafarm/dhtservice/mqtt/MqttDhtMessageListener.java"
click node_flow_http "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/flow-service/src/main/java/com/landiafarm/flowservice/controller/FlowReadingController.java"
click node_flow_service "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/flow-service/src/main/java/com/landiafarm/flowservice/service/FlowReadingService.java"
click node_flow_repo "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/flow-service/src/main/java/com/landiafarm/flowservice/repository/FlowReadingRepository.java"
click node_flow_mqtt "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/flow-service/src/main/java/com/landiafarm/flowservice/mqtt/MqttFlowMessageListener.java"
click node_rain_http "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/rain-service/src/main/java/com/landiafarm/rainservice/controller/RainReadingController.java"
click node_rain_service "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/rain-service/src/main/java/com/landiafarm/rainservice/service/RainReadingService.java"
click node_rain_repo "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/rain-service/src/main/java/com/landiafarm/rainservice/repository/RainReadingRepository.java"
click node_rain_mqtt "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/rain-service/src/main/java/com/landiafarm/rainservice/mqtt/MqttRainMessageListener.java"
click node_soil_http "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/soil-service/src/main/java/com/landiafarm/soilservice/controller/SoilReadingController.java"
click node_soil_service "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/soil-service/src/main/java/com/landiafarm/soilservice/service/SoilReadingService.java"
click node_soil_repo "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/soil-service/src/main/java/com/landiafarm/soilservice/repository/SoilReadingRepository.java"
click node_soil_mqtt "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/soil-service/src/main/java/com/landiafarm/soilservice/mqtt/MqttSoilMessageListener.java"
click node_water_http "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/water-level-service/src/main/java/com/landiafarm/waterlevelservice/controller/WaterLevelReadingController.java"
click node_water_service "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/water-level-service/src/main/java/com/landiafarm/waterlevelservice/service/WaterLevelReadingService.java"
click node_water_repo "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/water-level-service/src/main/java/com/landiafarm/waterlevelservice/repository/WaterLevelReadingRepository.java"
click node_water_mqtt "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/water-level-service/src/main/java/com/landiafarm/waterlevelservice/mqtt/MqttWaterLevelMessageListener.java"
click node_irrigation_http "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/irrigation-service/src/main/java/com/landiafarm/irrigationservice/controller/IrrigationEventController.java"
click node_irrigation_service "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/irrigation-service/src/main/java/com/landiafarm/irrigationservice/service/IrrigationEventService.java"
click node_irrigation_repo "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/irrigation-service/src/main/java/com/landiafarm/irrigationservice/repository/IrrigationEventRepository.java"
click node_publisher "https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/irrigation-service/src/main/java/com/landiafarm/irrigationservice/mqtt/MqttIrrigationCommandPublisher.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_dht_service,node_dht_repo,node_dht_mqtt,node_flow_service,node_flow_repo,node_flow_mqtt,node_rain_service,node_rain_repo,node_rain_mqtt,node_soil_service,node_soil_repo,node_soil_mqtt,node_water_service,node_water_repo,node_water_mqtt,node_client toneBlue
class node_dht_http,node_flow_http,node_rain_http,node_soil_http,node_water_http,node_store toneAmber
class node_irrigation_http,node_irrigation_service,node_irrigation_repo,node_publisher toneMint
class node_broker toneIndigo
```

## Components

### Sensor telemetry

- [DHT readings](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/dht-service/src/main/java/com/landiafarm/dhtservice/service/DhtReadingService.java): `dht-service/src/main/java/com/landiafarm/dhtservice/service/DhtReadingService.java`
- [DHT repository](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/dht-service/src/main/java/com/landiafarm/dhtservice/repository/DhtReadingRepository.java): `dht-service/src/main/java/com/landiafarm/dhtservice/repository/DhtReadingRepository.java`
- [DHT listener](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/dht-service/src/main/java/com/landiafarm/dhtservice/mqtt/MqttDhtMessageListener.java): `dht-service/src/main/java/com/landiafarm/dhtservice/mqtt/MqttDhtMessageListener.java`
- [Flow readings](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/flow-service/src/main/java/com/landiafarm/flowservice/service/FlowReadingService.java): `flow-service/src/main/java/com/landiafarm/flowservice/service/FlowReadingService.java`
- [Flow repository](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/flow-service/src/main/java/com/landiafarm/flowservice/repository/FlowReadingRepository.java): `flow-service/src/main/java/com/landiafarm/flowservice/repository/FlowReadingRepository.java`
- [Flow listener](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/flow-service/src/main/java/com/landiafarm/flowservice/mqtt/MqttFlowMessageListener.java): `flow-service/src/main/java/com/landiafarm/flowservice/mqtt/MqttFlowMessageListener.java`
- [Rain readings](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/rain-service/src/main/java/com/landiafarm/rainservice/service/RainReadingService.java): `rain-service/src/main/java/com/landiafarm/rainservice/service/RainReadingService.java`
- [Rain repository](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/rain-service/src/main/java/com/landiafarm/rainservice/repository/RainReadingRepository.java): `rain-service/src/main/java/com/landiafarm/rainservice/repository/RainReadingRepository.java`
- [Rain listener](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/rain-service/src/main/java/com/landiafarm/rainservice/mqtt/MqttRainMessageListener.java): `rain-service/src/main/java/com/landiafarm/rainservice/mqtt/MqttRainMessageListener.java`
- [Soil readings](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/soil-service/src/main/java/com/landiafarm/soilservice/service/SoilReadingService.java): `soil-service/src/main/java/com/landiafarm/soilservice/service/SoilReadingService.java`
- [Soil repository](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/soil-service/src/main/java/com/landiafarm/soilservice/repository/SoilReadingRepository.java): `soil-service/src/main/java/com/landiafarm/soilservice/repository/SoilReadingRepository.java`
- [Soil listener](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/soil-service/src/main/java/com/landiafarm/soilservice/mqtt/MqttSoilMessageListener.java): `soil-service/src/main/java/com/landiafarm/soilservice/mqtt/MqttSoilMessageListener.java`
- [Water level readings](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/water-level-service/src/main/java/com/landiafarm/waterlevelservice/service/WaterLevelReadingService.java): `water-level-service/src/main/java/com/landiafarm/waterlevelservice/service/WaterLevelReadingService.java`
- [Water level repository](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/water-level-service/src/main/java/com/landiafarm/waterlevelservice/repository/WaterLevelReadingRepository.java): `water-level-service/src/main/java/com/landiafarm/waterlevelservice/repository/WaterLevelReadingRepository.java`
- [Water level listener](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/water-level-service/src/main/java/com/landiafarm/waterlevelservice/mqtt/MqttWaterLevelMessageListener.java): `water-level-service/src/main/java/com/landiafarm/waterlevelservice/mqtt/MqttWaterLevelMessageListener.java`

### HTTP APIs

- [DHT API](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/dht-service/src/main/java/com/landiafarm/dhtservice/controller/DhtReadingController.java): `dht-service/src/main/java/com/landiafarm/dhtservice/controller/DhtReadingController.java`
- [Flow API](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/flow-service/src/main/java/com/landiafarm/flowservice/controller/FlowReadingController.java): `flow-service/src/main/java/com/landiafarm/flowservice/controller/FlowReadingController.java`
- [Rain API](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/rain-service/src/main/java/com/landiafarm/rainservice/controller/RainReadingController.java): `rain-service/src/main/java/com/landiafarm/rainservice/controller/RainReadingController.java`
- [Soil API](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/soil-service/src/main/java/com/landiafarm/soilservice/controller/SoilReadingController.java): `soil-service/src/main/java/com/landiafarm/soilservice/controller/SoilReadingController.java`
- [Water level API](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/water-level-service/src/main/java/com/landiafarm/waterlevelservice/controller/WaterLevelReadingController.java): `water-level-service/src/main/java/com/landiafarm/waterlevelservice/controller/WaterLevelReadingController.java`

### Irrigation control

- [Irrigation API](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/irrigation-service/src/main/java/com/landiafarm/irrigationservice/controller/IrrigationEventController.java): `irrigation-service/src/main/java/com/landiafarm/irrigationservice/controller/IrrigationEventController.java`
- [Irrigation events](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/irrigation-service/src/main/java/com/landiafarm/irrigationservice/service/IrrigationEventService.java): `irrigation-service/src/main/java/com/landiafarm/irrigationservice/service/IrrigationEventService.java`
- [Event repository](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/irrigation-service/src/main/java/com/landiafarm/irrigationservice/repository/IrrigationEventRepository.java): `irrigation-service/src/main/java/com/landiafarm/irrigationservice/repository/IrrigationEventRepository.java`
- [Command publisher](https://github.com/muhammadraihanpramanawiguna/landia-smart-farming/blob/main/irrigation-service/src/main/java/com/landiafarm/irrigationservice/mqtt/MqttIrrigationCommandPublisher.java): `irrigation-service/src/main/java/com/landiafarm/irrigationservice/mqtt/MqttIrrigationCommandPublisher.java`

### Other components

- **API client**
- **MQTT broker**
- **Persistence store**

## Connections

- API client → DHT API: requests
- API client → Flow API: requests
- API client → Rain API: requests
- API client → Soil API: requests
- API client → Water level API: requests
- API client → Irrigation API: requests
- DHT API → DHT readings: calls
- Flow API → Flow readings: calls
- Rain API → Rain readings: calls
- Soil API → Soil readings: calls
- Water level API → Water level readings: calls
- Irrigation API → Irrigation events: calls
- DHT readings → DHT repository: reads/writes
- Flow readings → Flow repository: reads/writes
- Rain readings → Rain repository: reads/writes
- Soil readings → Soil repository: reads/writes
- Water level readings → Water level repository: reads/writes
- Irrigation events → Event repository: reads/writes
- DHT repository → Persistence store: persists
- Flow repository → Persistence store: persists
- Rain repository → Persistence store: persists
- Soil repository → Persistence store: persists
- Water level repository → Persistence store: persists
- Event repository → Persistence store: persists
- MQTT broker → DHT listener: delivers
- MQTT broker → Flow listener: delivers
- MQTT broker → Rain listener: delivers
- MQTT broker → Soil listener: delivers
- MQTT broker → Water level listener: delivers
- DHT listener → DHT readings: submits readings
- Flow listener → Flow readings: submits readings
- Rain listener → Rain readings: submits readings
- Soil listener → Soil readings: submits readings
- Water level listener → Water level readings: submits readings
- Irrigation events → Command publisher: publishes command
- Command publisher → MQTT broker: sends command
