# ResourceHUB [API] > [!NOTE] > **[DataCollector]** sends [**sensor's data] **like as *PH Level*, *Humidity*, *Temperature*, etc) as ++JSON++ to this **[API]** > **RESOURCE HUB - means a Public Storage with Sensors Data,.**![Resource-hub-2](./images/Resource-hub-2-2.png)** > ![image](./images/pasted_20260318-150812.png) > ```json > { > { > id: 1, > city_codename_cords_sector_cell: "CERCELL-A1:[40.7128,-74.0060]::S1:C1" > name: "Acidity‑alkalinity of a solution:[PH 0-14]", > value: "5.5", > unit: "pH", // to measure the acidity or alkalinity of a solution > timestamp: 17000002 // decode_timestamp(17000002) -> (2024, 3, 8, 12, 34, 52) -> "2024.03.8:12:34:52" [year.month.day:hour:min:sec] > }, > { > id: 1, > city_codename_cords_sector_cell: "CERCELL-A2:[70.7128,-56,00012]::S1:C1" > name: "Acidity‑alkalinity of a solution:[PH 0-14]", > value: "5.7", > unit: "pH", // to measure the acidity or alkalinity of a solution > timestamp: 17000035 > }, > .... > { > id: 2, > city_codename_cords_sector_cell: "BETTA-A1:[40.7128,-74.0060]::S1:C1" > name: "Humidity:[DHT22]", > value: "20.7", > unit: "RH", // Relative Humidity (RH) > timestamp: 17000002 > }, > ... > { > id: 3, > city_codename_cords_sector_cell: "ANLATIC-mAI:[40.7128,-74.0060]::S1:C1" > name: "Temperature:[DHT22]", > value: "35.0", > unit: "°C", // or Fahrenheit Temperature of room '°C' preffered for UI Charts > timestamp: 17000002 > } > ... > } > ``` > # Redis database save recevied [sensor-data] into Table Sensor_data > # CERCELL-A1:[40.7128,-74.0060]::S1:C1 > - **CERCELL** - "**City** **name**" > - **-A1** - " City **codename" (can be empty)** > - **[40.7128,-74.0060] **- City,. **Coordinates** [° N,° W] > - [40.7128,-74.0060] ----> "**New York**" > - **S1:C1** - Means **SECTOR**:**CELL** > - **S1** - Means: **Sector** **1** > - **C1** - Means: **Cell** **1** > - **:** - field splitter (for future. May be parsers can use this for getting fields: cityid, cords, sector, cell) > > ### In concept > > SECTOR-5-CELL-1 can collect data about tomatos > > SECTOR-5-CELL-2 can collect data about potatos > > **In future can be added 'resource' journals,.** > > **a. "how much" system make a 'tomatos', 'gabbages,.' : 10 tomatos/month, 40 gabbeges/month, etc,.)** > > **b. "n/year"** > > **c. ** > ## * Sensors Data Table * [**Example**] > > | id | city_codename_cords_sector_cell | sensor_name_and_model | value | unit | timestamp | > | --- | -------------------------------------------------------------------------------- | ---------------------------------------------------- | ----- | ------- | --------- | > | 1 | AQUA-A1:[[-18.7669,46.8691](https://maps.google.com/?q=-18.7669,46.8691)]:S1:C1 | Acidity‑alkalinity of a solution:[PH 0-14] | 5.5 | pH | 17000002 | > | 2 | CERCELL:[40.7128,-74.0060]::S1:C1 | Humidity:[DHT22] | 20.7 | % RH | 158371335 | > | 3 | AQUA:[[64.9631,-19.0208](https://maps.google.com/?q=64.9631,-19.0208)]::S2:C2 | O₂ sensor:[MiCS‑5524] | % vol | % vol | 23656547 | > | 4 | AQUA:[[64.9631,-19.0208](https://maps.google.com/?q=64.9631,-19.0208)]::S1:C1 | Acidity‑alkalinity of a solution:[PH 0-14] | 2.5 | pH | 23657524 | > | 5 | OCEAN:[[35.6895,139.6917](https://maps.google.com/?q=35.6895,139.6917)]::S1:C1 | Temperature:[DHT22] | 20.0 | °C | 45557562 | > | 6 | AQUA-B2:[[12.9716,77.5946](https://maps.google.com/?q=12.9716,77.5946)]:S2:C2 | Humidity:[DHT22] | 45.2 | % RH | 51234567 | > | 7 | DESERT:[[23.4241,53.8478](https://maps.google.com/?q=23.4241,53.8478)]:S1:C1 | Soil moisture:[Capacitive Soil Moisture Sensor v1.2] | 12.3 | % vol | 52345678 | > | 8 | MOUNTAIN:[[35.3606,138.7274](https://maps.google.com/?q=35.3606,138.7274)]:S3:C3 | Sound level:[Adafruit MEMS Mic] | 68 | dB SPL | 53456789 | > | 9 | RIVER:[[48.8566,2.3522](https://maps.google.com/?q=48.8566,2.3522)]:S1:C2 | Acidity‑alkalinity of a solution:[PH 0-14] | 6.8 | pH | 54567890 | > | 10 | OCEAN:[[34.0522,-118.2437](https://maps.google.com/?q=34.0522,-118.2437)]:S2:C1 | Pressure:[BMP280] | 22.1 | hPa | 55678901 | > | 11 | FOREST:[[51.5074,-0.1278](https://maps.google.com/?q=51.5074,-0.1278)]:S1:C3 | Wind speed:[Anemometer 3‑Axis 3000] | 30.5 | m / s | 56789012 | > | 12 | TUNDRA:[[55.7558,37.6173](https://maps.google.com/?q=55.7558,37.6173)]:S2:C2 | Light sensor:[TSL2591] | 5.9 | lux | 57890123 | > | 13 | VALLEY:[[40.7306,-73.9352](https://maps.google.com/?q=40.7306,-73.9352)]:S3:C1 | CO₂ sensor:[SenseAir S8] | 45.2 | RH | 58901234 | > | 14 | PLAINS:[[41.8781,-87.6298](https://maps.google.com/?q=41.8781,-87.6298)]:S1:C2 | UV sensor:[VEML6075] | 7.1 | mW /cm² | 59012345 | > | 15 | COAST:[[37.7749,-122.4194](https://maps.google.com/?q=37.7749,-122.4194)]:S2:C3 | Soil EC[EC‑Meter 5] | 1.8 | dS/m | 60123456 | ```mermaid sequenceDiagram participant [WebUI/Gtk APP] participant [DataCollector] participant [ResourceHUB API] participant Redis Database [WebUI/Gtk APP]->>[ResourceHUB API]: Get [sensor's data] [ResourceHUB API]-->>[WebUI/Gtk APP]: Send [sensor's data] [ResourceHUB API]->>Redis Database: Query to get [sensor's data] Redis Database-->>[ResourceHUB API]: Results with data [DataCollector]->>[ResourceHUB API]: Send [sensor's data] [ResourceHUB API]->>Redis Database: Query to save [sensor's data] Redis Database-->>[ResourceHUB API]: Results with save object and status saved! ``` ```bash # Instruction how to install and run ResourceHUB server. # Time to install: 20-45min (in ~ideal scenarios, without troubleshoting) # + 20min if try to fix troubles # Step 1. # (as root, add "sudo" if need use docker as user) # Install docker curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh # Install docker-compose apt update -y apt install docker-compose -y ``` ```bash # Step 2. # Run Redis database (docker-compose) chmod +x ./Database/run.sh && ./Database/run.sh ``` > [!NOTE] > ```bash > # To Run Redis database use ./Database/run.sh > # ./Database/run.sh > > # To Stop Redis database use ./Database/stop.sh > # chmod +x ./Database/run.sh (this command allow exucute a bash script, use only first time) > # ./Database/stop.sh > ``` ```bash # Step 3. # Install rust and cargo (optionaly if you need use Rust Book to install: https://doc.rust-lang.org/book/ch01-01-installation.html) curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh ``` ```bash # Step 4. # Install libraries cargo install ``` ```bash # Step 5. # Okey now you have: # 1. Runned redis database in docker container (./Database/run.sh) # 2. Intalled rust with cargo # 3. Intalled project libraries # Let's Run a server! cargo run ``` > [!TIP] > Don't worry about errors, troubleshooting, etc, make git issue and then i try add new instructions, how to avoid and fix this. > [!NOTE] > ```bash > # get data > curl -v http://127.0.0.1:8000/api/v1/sensors/data > ``` > ```bash > .... # headers > {"id":1,"name":"Sensor name","value":4.5,"unit":"C"} # <-- Json object with sensor data (in this example you see only one sensor) > ``` > [!NOTE] > **DATA COLLECTOR - means a mini PC or Micro-controller with connected sensors, get data from all connected sensors and sends data in json format** > **to web server, likes RESOURCE HUB [REST API]** > [**DataCollector**] > **Arduino->[USB]->OrangePiPC->Wifi/Eth - - -> [ResourceHUB API]** > **In my system now i use "arduino nano with DHT22 and pH sensor" connected to Orange Pi PC, arduino sends all data from sensors to Orange Pi PC** > **Arduino nano connected by usb and use UART - serial port to send data to minipc, and then** > **Orange Pi PC use wifi/ethernet to sends getted data to web server (To our RESOURCE HUB API)** > **[DataCollector]** sends a **Post** **requests** > **json** - - **- > **http:123.123.123/api/v1/sensor/data > **[ResourceHUB] **save this data in redis dababase