added doc
This commit is contained in:
		
							
								
								
									
										28
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								README.md
									
									
									
									
									
								
							@ -1,14 +1,20 @@
 | 
			
		||||
# msv-clubhouse-node
 | 
			
		||||
- Work in progress !
 | 
			
		||||
- Technical demo
 | 
			
		||||
 | 
			
		||||
## Overview
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
## Hardware ##
 | 
			
		||||
 | 
			
		||||
[ESP32 LoRa 868MHz OLED DevBoard](https://de.aliexpress.com/item/33018609928.html)
 | 
			
		||||
- [ESP32 LoRa 868MHz OLED DevBoard](https://de.aliexpress.com/item/33018609928.html)
 | 
			
		||||
- [Bosch BMP280](https://de.aliexpress.com/item/1005003406725433.html)
 | 
			
		||||
- [Reed Switch](https://de.aliexpress.com/item/1005004549803034.html)
 | 
			
		||||
- [Wind speed sensor](https://de.aliexpress.com/item/1005001330214766.html)
 | 
			
		||||
- [Wind direction sensor](https://de.aliexpress.com/item/4000590284491.html)
 | 
			
		||||
 | 
			
		||||
[Wind speed sensor](https://de.aliexpress.com/item/1005001330214766.html)
 | 
			
		||||
 | 
			
		||||
[Wind direction sensor](https://de.aliexpress.com/item/4000590284491.html)
 | 
			
		||||
 | 
			
		||||
## Build ##
 | 
			
		||||
## Build Node Firmware
 | 
			
		||||
 | 
			
		||||
0. Clone repo
 | 
			
		||||
1. Init GIT-submodules
 | 
			
		||||
@ -43,7 +49,7 @@ TTN LoRa frequency / region
 | 
			
		||||
- `nano /etc/systemd/system/msv-clubhouse-backend.service`
 | 
			
		||||
- `systemctl daemon-reload && systemctl enable --now msv-clubhouse-backend.service`
 | 
			
		||||
 | 
			
		||||
JS Payload Formatter:
 | 
			
		||||
## JS Payload Formatter
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
function Decoder(bytes, port) {
 | 
			
		||||
@ -116,4 +122,10 @@ function sflt162f(rawSflt16)
 | 
			
		||||
 | 
			
		||||
	return f_unscaled;
 | 
			
		||||
	}
 | 
			
		||||
    ```
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Grafana Dashboard
 | 
			
		||||
 | 
			
		||||
see `frontend/`
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
							
								
								
									
										1
									
								
								doc/architecture.drawio
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								doc/architecture.drawio
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
<mxfile host="app.diagrams.net" modified="2023-03-08T19:13:03.452Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36" version="16.2.6" etag="yEJ7_XEJp48WvqINRjwf" type="device"><diagram id="C9XAk7C7BT5UWB5t5WFN" name="Page-1">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</diagram></mxfile>
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								doc/architecture.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								doc/architecture.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 352 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								doc/screenshot_dashboard.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								doc/screenshot_dashboard.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 186 KiB  | 
@ -36,21 +36,18 @@
 | 
			
		||||
      "description": "Wenn die Türe offen, dann ist wohl jemand am Platz.",
 | 
			
		||||
      "fieldConfig": {
 | 
			
		||||
        "defaults": {
 | 
			
		||||
          "color": {
 | 
			
		||||
            "mode": "thresholds"
 | 
			
		||||
          },
 | 
			
		||||
          "mappings": [
 | 
			
		||||
            {
 | 
			
		||||
              "options": {
 | 
			
		||||
                "0": {
 | 
			
		||||
                  "color": "red",
 | 
			
		||||
                  "index": 1,
 | 
			
		||||
                  "text": "Türe geschlossen"
 | 
			
		||||
                },
 | 
			
		||||
                "1": {
 | 
			
		||||
                  "color": "green",
 | 
			
		||||
                  "index": 0,
 | 
			
		||||
                  "text": "Türe offen"
 | 
			
		||||
                },
 | 
			
		||||
                "1": {
 | 
			
		||||
                  "color": "red",
 | 
			
		||||
                  "index": 1,
 | 
			
		||||
                  "text": "Türe geschlossen"
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              "type": "value"
 | 
			
		||||
@ -68,7 +65,8 @@
 | 
			
		||||
                "value": 80
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          }
 | 
			
		||||
          },
 | 
			
		||||
          "unit": "short"
 | 
			
		||||
        },
 | 
			
		||||
        "overrides": []
 | 
			
		||||
      },
 | 
			
		||||
@ -80,8 +78,8 @@
 | 
			
		||||
      },
 | 
			
		||||
      "id": 2,
 | 
			
		||||
      "options": {
 | 
			
		||||
        "colorMode": "value",
 | 
			
		||||
        "graphMode": "area",
 | 
			
		||||
        "colorMode": "background",
 | 
			
		||||
        "graphMode": "none",
 | 
			
		||||
        "justifyMode": "auto",
 | 
			
		||||
        "orientation": "auto",
 | 
			
		||||
        "reduceOptions": {
 | 
			
		||||
@ -550,7 +548,7 @@
 | 
			
		||||
          },
 | 
			
		||||
          "editorMode": "builder",
 | 
			
		||||
          "expr": "msv_clubhouse_temperature",
 | 
			
		||||
          "legendFormat": "Luftdruck Außen",
 | 
			
		||||
          "legendFormat": "Temperatur Außen",
 | 
			
		||||
          "range": true,
 | 
			
		||||
          "refId": "A"
 | 
			
		||||
        }
 | 
			
		||||
@ -558,6 +556,193 @@
 | 
			
		||||
      "title": "Tempertur Außen",
 | 
			
		||||
      "type": "timeseries"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "datasource": {
 | 
			
		||||
        "type": "prometheus",
 | 
			
		||||
        "uid": "x08D2Hlnz"
 | 
			
		||||
      },
 | 
			
		||||
      "fieldConfig": {
 | 
			
		||||
        "defaults": {
 | 
			
		||||
          "color": {
 | 
			
		||||
            "mode": "palette-classic"
 | 
			
		||||
          },
 | 
			
		||||
          "custom": {
 | 
			
		||||
            "axisCenteredZero": false,
 | 
			
		||||
            "axisColorMode": "text",
 | 
			
		||||
            "axisLabel": "",
 | 
			
		||||
            "axisPlacement": "auto",
 | 
			
		||||
            "barAlignment": 0,
 | 
			
		||||
            "drawStyle": "line",
 | 
			
		||||
            "fillOpacity": 0,
 | 
			
		||||
            "gradientMode": "none",
 | 
			
		||||
            "hideFrom": {
 | 
			
		||||
              "legend": false,
 | 
			
		||||
              "tooltip": false,
 | 
			
		||||
              "viz": false
 | 
			
		||||
            },
 | 
			
		||||
            "lineInterpolation": "linear",
 | 
			
		||||
            "lineWidth": 1,
 | 
			
		||||
            "pointSize": 5,
 | 
			
		||||
            "scaleDistribution": {
 | 
			
		||||
              "type": "linear"
 | 
			
		||||
            },
 | 
			
		||||
            "showPoints": "auto",
 | 
			
		||||
            "spanNulls": false,
 | 
			
		||||
            "stacking": {
 | 
			
		||||
              "group": "A",
 | 
			
		||||
              "mode": "none"
 | 
			
		||||
            },
 | 
			
		||||
            "thresholdsStyle": {
 | 
			
		||||
              "mode": "off"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "decimals": 2,
 | 
			
		||||
          "mappings": [],
 | 
			
		||||
          "thresholds": {
 | 
			
		||||
            "mode": "absolute",
 | 
			
		||||
            "steps": [
 | 
			
		||||
              {
 | 
			
		||||
                "color": "green",
 | 
			
		||||
                "value": null
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "color": "red",
 | 
			
		||||
                "value": 80
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          },
 | 
			
		||||
          "unit": "velocityms"
 | 
			
		||||
        },
 | 
			
		||||
        "overrides": []
 | 
			
		||||
      },
 | 
			
		||||
      "gridPos": {
 | 
			
		||||
        "h": 8,
 | 
			
		||||
        "w": 12,
 | 
			
		||||
        "x": 0,
 | 
			
		||||
        "y": 15
 | 
			
		||||
      },
 | 
			
		||||
      "id": 16,
 | 
			
		||||
      "options": {
 | 
			
		||||
        "legend": {
 | 
			
		||||
          "calcs": [],
 | 
			
		||||
          "displayMode": "list",
 | 
			
		||||
          "placement": "bottom",
 | 
			
		||||
          "showLegend": true
 | 
			
		||||
        },
 | 
			
		||||
        "tooltip": {
 | 
			
		||||
          "mode": "single",
 | 
			
		||||
          "sort": "none"
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
      "targets": [
 | 
			
		||||
        {
 | 
			
		||||
          "datasource": {
 | 
			
		||||
            "type": "prometheus",
 | 
			
		||||
            "uid": "x08D2Hlnz"
 | 
			
		||||
          },
 | 
			
		||||
          "editorMode": "builder",
 | 
			
		||||
          "expr": "msv_clubhouse_windspeed",
 | 
			
		||||
          "legendFormat": "Windgeschwindigkeit",
 | 
			
		||||
          "range": true,
 | 
			
		||||
          "refId": "A"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "title": "Windgeschwindigkeit ",
 | 
			
		||||
      "type": "timeseries"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "collapsed": false,
 | 
			
		||||
      "gridPos": {
 | 
			
		||||
        "h": 1,
 | 
			
		||||
        "w": 24,
 | 
			
		||||
        "x": 0,
 | 
			
		||||
        "y": 23
 | 
			
		||||
      },
 | 
			
		||||
      "id": 14,
 | 
			
		||||
      "panels": [],
 | 
			
		||||
      "title": "Metadaten des Systems",
 | 
			
		||||
      "type": "row"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "datasource": {
 | 
			
		||||
        "type": "prometheus",
 | 
			
		||||
        "uid": "x08D2Hlnz"
 | 
			
		||||
      },
 | 
			
		||||
      "description": "",
 | 
			
		||||
      "fieldConfig": {
 | 
			
		||||
        "defaults": {
 | 
			
		||||
          "mappings": [
 | 
			
		||||
            {
 | 
			
		||||
              "options": {
 | 
			
		||||
                "0": {
 | 
			
		||||
                  "color": "red",
 | 
			
		||||
                  "index": 1,
 | 
			
		||||
                  "text": "Error"
 | 
			
		||||
                },
 | 
			
		||||
                "1": {
 | 
			
		||||
                  "color": "green",
 | 
			
		||||
                  "index": 0,
 | 
			
		||||
                  "text": "OK"
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              "type": "value"
 | 
			
		||||
            }
 | 
			
		||||
          ],
 | 
			
		||||
          "thresholds": {
 | 
			
		||||
            "mode": "absolute",
 | 
			
		||||
            "steps": [
 | 
			
		||||
              {
 | 
			
		||||
                "color": "green",
 | 
			
		||||
                "value": null
 | 
			
		||||
              },
 | 
			
		||||
              {
 | 
			
		||||
                "color": "red",
 | 
			
		||||
                "value": 80
 | 
			
		||||
              }
 | 
			
		||||
            ]
 | 
			
		||||
          },
 | 
			
		||||
          "unit": "short"
 | 
			
		||||
        },
 | 
			
		||||
        "overrides": []
 | 
			
		||||
      },
 | 
			
		||||
      "gridPos": {
 | 
			
		||||
        "h": 6,
 | 
			
		||||
        "w": 5,
 | 
			
		||||
        "x": 0,
 | 
			
		||||
        "y": 24
 | 
			
		||||
      },
 | 
			
		||||
      "id": 18,
 | 
			
		||||
      "options": {
 | 
			
		||||
        "colorMode": "background",
 | 
			
		||||
        "graphMode": "none",
 | 
			
		||||
        "justifyMode": "auto",
 | 
			
		||||
        "orientation": "auto",
 | 
			
		||||
        "reduceOptions": {
 | 
			
		||||
          "calcs": [
 | 
			
		||||
            "lastNotNull"
 | 
			
		||||
          ],
 | 
			
		||||
          "fields": "",
 | 
			
		||||
          "values": false
 | 
			
		||||
        },
 | 
			
		||||
        "textMode": "auto"
 | 
			
		||||
      },
 | 
			
		||||
      "pluginVersion": "9.3.6",
 | 
			
		||||
      "targets": [
 | 
			
		||||
        {
 | 
			
		||||
          "datasource": {
 | 
			
		||||
            "type": "prometheus",
 | 
			
		||||
            "uid": "x08D2Hlnz"
 | 
			
		||||
          },
 | 
			
		||||
          "editorMode": "builder",
 | 
			
		||||
          "expr": "msv_clubhouse_exporter_scrape_healthy",
 | 
			
		||||
          "legendFormat": "__auto",
 | 
			
		||||
          "range": true,
 | 
			
		||||
          "refId": "A"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "title": "Zustand TTN Scrape",
 | 
			
		||||
      "type": "stat"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "datasource": {
 | 
			
		||||
        "type": "prometheus",
 | 
			
		||||
@ -620,8 +805,8 @@
 | 
			
		||||
      "gridPos": {
 | 
			
		||||
        "h": 9,
 | 
			
		||||
        "w": 12,
 | 
			
		||||
        "x": 0,
 | 
			
		||||
        "y": 15
 | 
			
		||||
        "x": 5,
 | 
			
		||||
        "y": 24
 | 
			
		||||
      },
 | 
			
		||||
      "id": 10,
 | 
			
		||||
      "options": {
 | 
			
		||||
@ -714,8 +899,8 @@
 | 
			
		||||
      "gridPos": {
 | 
			
		||||
        "h": 9,
 | 
			
		||||
        "w": 12,
 | 
			
		||||
        "x": 12,
 | 
			
		||||
        "y": 15
 | 
			
		||||
        "x": 5,
 | 
			
		||||
        "y": 33
 | 
			
		||||
      },
 | 
			
		||||
      "id": 12,
 | 
			
		||||
      "options": {
 | 
			
		||||
@ -761,6 +946,6 @@
 | 
			
		||||
  "timezone": "",
 | 
			
		||||
  "title": "MSV Moos Modellflugplatz",
 | 
			
		||||
  "uid": "nuH5csxVz",
 | 
			
		||||
  "version": 6,
 | 
			
		||||
  "version": 11,
 | 
			
		||||
  "weekStart": ""
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user