Compare commits
	
		
			6 Commits
		
	
	
		
			d3848ac1aa
			...
			feat/syste
		
	
	| Author | SHA256 | Date | |
|---|---|---|---|
| 165c79e67b | |||
| c0ac71ebba | |||
| 10e8e14cd6 | |||
| a9c8525e6e | |||
| 39c07fcef0 | |||
| 52d521a6ad | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| docker-compose.yml | ||||
| @ -56,6 +56,9 @@ Use `https://your.domain.tld/api/metrics` to retrieve useful insides for monitor | ||||
| ## Add a Location Tracker | ||||
| We use the [SenseCAP T1000-B](https://www.seeedstudio.com/SenseCAP-Card-Tracker-T1000-B-p-5698.html) from seeedstudio because of the fair price and multiple location providers. However, you can use any LoRaWAN-enabled tracker that is compatible with TTN and supports the required payload fields. | ||||
|  | ||||
| ## Troubleshooting | ||||
| Run `journalctl -u locationhub.service -f` to see log output. | ||||
|  | ||||
| ### Onboard SenseCAP T1000-B | ||||
| 1. Download and install the App [SenseCraft](https://play.google.com/store/apps/details?id=cc.seeed.sensecapmate)  | ||||
| 2. Skip the user account at startup with `Skip` in the upper right corner | ||||
|  | ||||
							
								
								
									
										3
									
								
								server/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								server/.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -309,6 +309,3 @@ cython_debug/ | ||||
| *.vsix | ||||
|  | ||||
| config.py | ||||
|  | ||||
| #docker | ||||
| docker-compose.yml | ||||
| @ -1,22 +1,29 @@ | ||||
| [Unit] | ||||
| Description=LocationHub | ||||
| Description=LocationHub Service | ||||
| Documentation=https://git.mosad.xyz/localhorst/LocationHub | ||||
| After=network.target systemd-networkd-wait-online.service mysqld.service | ||||
|  | ||||
| [Service] | ||||
| Type=simple | ||||
| User=locationhub | ||||
| Group=locationhub | ||||
| WorkingDirectory=/home/locationhub/git/LocationHub/server/ | ||||
| ExecStart=/usr/bin/npm run dev | ||||
|  | ||||
| # Combine commands for build and start | ||||
| ExecStart=/bin/bash -c "/usr/bin/npm run build && /usr/bin/npm run start" | ||||
|  | ||||
| # Restart policies | ||||
| Restart=on-failure | ||||
| StandardOutput=append:/var/log/LocationHub.log | ||||
| StandardError=append:/var/log/LocationHub.log | ||||
| RestartSec=5s | ||||
|  | ||||
| # Logging configuration | ||||
| StandardOutput=journal | ||||
| StandardError=journal | ||||
| SyslogIdentifier=locationhub | ||||
|  | ||||
| # Resource control (optional but helps stability) | ||||
| MemoryLimit=512M | ||||
| CPUQuota=50% | ||||
|  | ||||
| [Install] | ||||
| WantedBy=multi-user.target | ||||
| ``` | ||||
| Activate Systemd Job | ||||
| ``` | ||||
| systemctl daemon-reload | ||||
| systemctl enable locationhub.service | ||||
| systemctl start locationhub.service | ||||
| systemctl status locationhub.service | ||||
| @ -59,20 +59,20 @@ router.post( | ||||
|           ? new Date(longitudeData.timestamp) | ||||
|           : undefined, | ||||
|       }; | ||||
|       const wifiTimestamp = (() => { | ||||
|         const messages = message.uplink_message.decoded_payload?.messages?.[0]; | ||||
|         const wifiScan = messages?.find((e: { type: string }) => e.type === "Wi-Fi Scan"); | ||||
|         return wifiScan?.timestamp ? new Date(wifiScan.timestamp) : undefined; | ||||
|       })(); | ||||
|  | ||||
|       const wifiMessage = | ||||
|         message.uplink_message.decoded_payload?.messages[0].find( | ||||
|           (e) => e.type === "Wi-Fi Scan" | ||||
|         ); | ||||
|  | ||||
|       const wifiScans = | ||||
|         message.uplink_message.decoded_payload?.messages[0] | ||||
|           .find((e) => e.type === "Wi-Fi Scan") | ||||
|           ?.measurementValue?.map((w) => ({ | ||||
|         wifiMessage?.measurementValue?.map((w) => ({ | ||||
|           lp_ttn_end_device_uplinks_id, | ||||
|           mac: w.mac, | ||||
|           rssi: w.rssi, | ||||
|             scanned_at_timestamp: wifiTimestamp, | ||||
|           scanned_at_utc: wifiMessage?.timestamp | ||||
|             ? new Date(wifiMessage.timestamp) | ||||
|             : undefined, | ||||
|         })) ?? []; | ||||
|  | ||||
|       const ttnGatewayReceptions = message.uplink_message.rx_metadata.map( | ||||
|  | ||||
| @ -5,14 +5,14 @@ interface CreateWifiScanParams { | ||||
|   lp_ttn_end_device_uplinks_id: string; | ||||
|   mac: string; | ||||
|   rssi: number; | ||||
|   scanned_at_timestamp?: Date; | ||||
|   scanned_at_utc?: Date; | ||||
| } | ||||
|  | ||||
| interface UpdateWifiScanParams { | ||||
|   wifi_scan_id: string; | ||||
|   mac?: string; | ||||
|   rssi?: number; | ||||
|   scanned_at_timestamp?: Date; | ||||
|   scanned_at_utc?: Date; | ||||
| } | ||||
|  | ||||
| @injectable() | ||||
|  | ||||
		Reference in New Issue
	
	Block a user