Compare commits
20 Commits
8a10d740ee
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
| 631b817207 | |||
| 3aa2abc0ae | |||
| 6af7c7e720 | |||
| e56528b7b3 | |||
| 1ed975513a | |||
| 5a426919d7 | |||
| 232b4b9f32 | |||
| 4482f6921e | |||
| 34a3dc17b2 | |||
| dd8e2ff9d5 | |||
| 7b9f80bd91 | |||
| 30120c1c25 | |||
| fac7db0a55 | |||
| ae50fec43a | |||
| 81ea325b5a | |||
| f07b8ec32a | |||
| acd281861f | |||
| 5578860331 | |||
| a1126761d4 | |||
| 41f1465356 |
137
.obsidian/workspace.json
vendored
137
.obsidian/workspace.json
vendored
@@ -55,12 +55,12 @@
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "99 Work/0 OneSec/OneSecNotes/Handover Planning.md",
|
||||
"file": "99 Work/Jobhunt/OneSec Experience on LinkedIn.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "Handover Planning"
|
||||
"title": "OneSec Experience on LinkedIn"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -91,32 +91,18 @@
|
||||
"title": "2026-01-07"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "b948e87b03ca1ad1",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "2 Personal/Home Lab/Baerhalten/Home Assistant.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "Home Assistant"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "f33efed5601c1085",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "2 Personal/Home Lab/Homelab.md",
|
||||
"file": "2 Personal/Home Lab/NAS/homelab_backup_architecture_first_draft.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "Homelab"
|
||||
"title": "homelab_backup_architecture_first_draft"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -146,9 +132,51 @@
|
||||
"icon": "lucide-file",
|
||||
"title": "2026-02-04"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "6914f148f736c4ac",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "2 Personal/Lists/Business Ideas.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "Business Ideas"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "b948e87b03ca1ad1",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "2 Personal/Home Lab/Baerhalten/Home Assistant.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "Home Assistant"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fac43a56fe618e9d",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "2 Personal/Home Lab/NextiShareBot.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "NextiShareBot"
|
||||
}
|
||||
}
|
||||
],
|
||||
"currentTab": 3
|
||||
"currentTab": 6
|
||||
}
|
||||
],
|
||||
"direction": "vertical"
|
||||
@@ -222,10 +250,10 @@
|
||||
"state": {
|
||||
"type": "file-properties",
|
||||
"state": {
|
||||
"file": "99 Work/0 OneSec/OneSecNotes/Handover Planning.md"
|
||||
"file": "2 Personal/Home Lab/NextiShareBot.md"
|
||||
},
|
||||
"icon": "lucide-info",
|
||||
"title": "File properties for Handover Planning"
|
||||
"title": "File properties for NextiShareBot"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -268,12 +296,12 @@
|
||||
"state": {
|
||||
"type": "outgoing-link",
|
||||
"state": {
|
||||
"file": "99 Work/0 OneSec/OneSecNotes/Handover Planning.md",
|
||||
"file": "2 Personal/Lists/Business Ideas.md",
|
||||
"linksCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
},
|
||||
"icon": "links-going-out",
|
||||
"title": "Outgoing links from Handover Planning"
|
||||
"title": "Outgoing links from Business Ideas"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -282,13 +310,13 @@
|
||||
"state": {
|
||||
"type": "outline",
|
||||
"state": {
|
||||
"file": "99 Work/0 OneSec/OneSecNotes/Handover Planning.md",
|
||||
"file": "2 Personal/Lists/Business Ideas.md",
|
||||
"followCursor": false,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-list",
|
||||
"title": "Outline of Handover Planning"
|
||||
"title": "Outline of Business Ideas"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -335,7 +363,8 @@
|
||||
"title": "Notes Review Queue"
|
||||
}
|
||||
}
|
||||
]
|
||||
],
|
||||
"currentTab": 8
|
||||
},
|
||||
{
|
||||
"id": "7324c8ef0d6e53cb",
|
||||
@@ -451,46 +480,48 @@
|
||||
}
|
||||
],
|
||||
"direction": "vertical",
|
||||
"x": 1657,
|
||||
"y": -823,
|
||||
"width": 1301,
|
||||
"height": 1172,
|
||||
"x": 0,
|
||||
"y": 57,
|
||||
"width": 900,
|
||||
"height": 777,
|
||||
"maximize": false,
|
||||
"zoom": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
"active": "27ad82034df6d692",
|
||||
"active": "f33efed5601c1085",
|
||||
"lastOpenFiles": [
|
||||
"2 Personal/Home Lab/NAS/Virtual Machine Hosting.md",
|
||||
"2 Personal/Home Lab/NAS/homelab_backup_architecture_first_draft.md",
|
||||
"2 Personal/Home Lab/NAS/Maintenance Plan.md",
|
||||
"2 Personal/Home Lab/NAS/Photo Apps.md",
|
||||
"2 Personal/Home Lab/MAC/Software Management on MacOS.md",
|
||||
"Dashboard Canvas.canvas",
|
||||
"Dashboard.md",
|
||||
"8 Places/BusinessesDrawing 2023-10-12 16.01.52.excalidraw.md",
|
||||
"2 Personal/Wohnen/Rezepte/Ideen für Vorratskammer.md",
|
||||
"2 Personal/Wohnen/Pflanzen.md",
|
||||
"2 Personal/Wohnen/Einrichtungsideen.md",
|
||||
"2 Personal/Home Lab/Homelab.md",
|
||||
"2 Personal/Lists/Business Ideas.md",
|
||||
"2 Personal/Home Lab/NextiShareBot.md",
|
||||
"0 Journal/0 Daily/2026-03-18.md",
|
||||
"2 Personal/Home Lab/Baerhalten/Home Assistant.md",
|
||||
"Attachments/ESPSomfyRTS 2026-03-17T16_05_06.backup",
|
||||
"2 Personal/Home Lab/Baerhalten/Home Assistant -> InfluxDB -> Grafana setup and debugging notes.md",
|
||||
"0 Journal/0 Daily/2026-01-29.md",
|
||||
"Temporary/Untitled 4.md",
|
||||
"99 Work/Jobhunt/OneSec Experience on LinkedIn.md",
|
||||
"99 Work/Jobhunt/Linkedin Profile.md",
|
||||
"99 Work/Jobhunt/My CV skills.md",
|
||||
"99 Work/0 OneSec/OneSecNotes/Handover Planning.md",
|
||||
"2 Personal/Home Lab/Devices/Dell Studio 1558.md",
|
||||
"0 Journal/0 Daily/2026-02-04.md",
|
||||
"99 Work/Jobhunt/Interview Questions.md",
|
||||
"Temporary/My Health Products.md",
|
||||
"0 Journal/0 Daily/2026-01-28.md",
|
||||
"2 Personal/Lists/Packlisten/Packliste - Skitour.md",
|
||||
"0 Journal/0 Daily/2026-01-29.md",
|
||||
"0 Journal/0 Daily/2026-01-27.md",
|
||||
"Temporary/Madgwick Filter.md",
|
||||
"0 Journal/0 Daily/2026-01-24.md",
|
||||
"Temporary/Ralph Wiggum Technique for AI Coding.md",
|
||||
"2 Personal/Home Lab/NAS/Backup Strategy.md",
|
||||
"0 Journal/0 Daily/2026-01-10.md",
|
||||
"Temporary/Material Damping.md",
|
||||
"Temporary/Friction Damping.md",
|
||||
"Attachments/Pasted image 20260121121234.png",
|
||||
"2 Personal/Home Lab/Homelab.md",
|
||||
"2 Personal/Home Lab/Baerhalten/Home Assistant.md",
|
||||
"2 Personal/Lists/Media/Bücher.md",
|
||||
"Attachments/ESPSomfyRTS 2026-01-18T16_26_16.backup",
|
||||
"Attachments/Pasted image 20260118150817.png",
|
||||
"Temporary/Untitled 3.md",
|
||||
"2 Personal/Home Lab/Pangolin Installation.md",
|
||||
"0 Journal/0 Daily/2026-01-07.md",
|
||||
"2 Personal/Home Lab/Homelab Architecture.excalidraw.md",
|
||||
"2 Personal/Home Lab/Drawing 2026-01-09 15.01.17.excalidraw.md",
|
||||
"OneNote/Listen/Bücher.md",
|
||||
"2 Personal/Home Lab/VPS/Selfhosting.md",
|
||||
"Attachments/Pasted image 20251202214228.png",
|
||||
"2 Personal/1 Skills/AI",
|
||||
"2 Personal/Home Lab/Baerhalten",
|
||||
@@ -506,9 +537,7 @@
|
||||
"99 Work/0 OneSec/OneSecNotes/10 Projects/TeensyFlightcontroller",
|
||||
"Attachments/Pasted image 20250922115441.png",
|
||||
"7 People/0_People.base",
|
||||
"Attachments/Belts, Suspenders.mp3",
|
||||
"Attachments/image 21.jpg",
|
||||
"Dashboard Canvas.canvas",
|
||||
"99 Work/0 OneSec/OneSecNotes/30 Engineering Skills/Computer Science/Untitled.canvas",
|
||||
"8 Work/OneSecNotes/Temporary/Untitled.canvas"
|
||||
]
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
"maxLinkFactor": 1,
|
||||
"showDebugMessages": false
|
||||
},
|
||||
"buryDate": "2026-01-24",
|
||||
"buryDate": "2026-03-16",
|
||||
"buryList": [],
|
||||
"historyDeck": null
|
||||
}
|
||||
@@ -153,12 +153,12 @@
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "0 Journal/0 Daily/2026-01-24.md",
|
||||
"mode": "source",
|
||||
"file": "2 Personal/Lists/Packlisten/Packliste - Skitour.md",
|
||||
"mode": "preview",
|
||||
"source": true
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "2026-01-24"
|
||||
"title": "Packliste - Skitour"
|
||||
}
|
||||
}
|
||||
],
|
||||
@@ -1818,8 +1818,48 @@
|
||||
"state": {
|
||||
"type": "review-queue-list-view",
|
||||
"state": {},
|
||||
"icon": "SpacedRepIcon",
|
||||
"title": "Notes Review Queue"
|
||||
"icon": "lucide-ghost",
|
||||
"title": "review-queue-list-view"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "2e52294bc62c6258",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "review-queue-list-view",
|
||||
"state": {},
|
||||
"icon": "lucide-ghost",
|
||||
"title": "review-queue-list-view"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0f456a65de48fb48",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "review-queue-list-view",
|
||||
"state": {},
|
||||
"icon": "lucide-ghost",
|
||||
"title": "review-queue-list-view"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "b89379a2c2d5def6",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "review-queue-list-view",
|
||||
"state": {},
|
||||
"icon": "lucide-ghost",
|
||||
"title": "review-queue-list-view"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "c2f4ad24032ae4c0",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "review-queue-list-view",
|
||||
"state": {},
|
||||
"icon": "lucide-ghost",
|
||||
"title": "review-queue-list-view"
|
||||
}
|
||||
}
|
||||
],
|
||||
@@ -1837,12 +1877,15 @@
|
||||
"table-editor-obsidian:Advanced Tables Toolbar": false,
|
||||
"obsidian-spaced-repetition:Review flashcards": false,
|
||||
"omnisearch:Omnisearch": false,
|
||||
"templater-obsidian:Templater": false,
|
||||
"periodic-notes:Open today": false
|
||||
"templater-obsidian:Templater": false
|
||||
}
|
||||
},
|
||||
"active": "992ba06a004d0d26",
|
||||
"active": "c2f4ad24032ae4c0",
|
||||
"lastOpenFiles": [
|
||||
"0 Journal/0 Daily/2026-02-08.md",
|
||||
"99 Work/Jobhunt/OneSec Experience on LinkedIn.md",
|
||||
"0 Journal/0 Daily/2026-02-04.md",
|
||||
"Temporary/Untitled 4.md",
|
||||
"0 Journal/0 Daily/2026-01-02.md",
|
||||
"0 Journal/0 Daily/2026-01-24.md",
|
||||
"2 Personal/Home Lab/Baerhalten/Home Assistant.md",
|
||||
@@ -1866,10 +1909,6 @@
|
||||
"Temporary/n8n - ideas.md",
|
||||
"0 Journal/0 Daily/2025-07-22.md",
|
||||
"Temporary/n8n - ideas.sync-conflict-20250721-234226-LIUMLEB.md",
|
||||
"Temporary/n8n - ideas.sync-conflict-20250721-214225-LIUMLEB.md",
|
||||
"Temporary/Pandas.md",
|
||||
"0 Journal/0 Daily/2025-07-18.md",
|
||||
"0 Journal/0 Daily/2025-07-17.md",
|
||||
"Attachments/image 20.jpg",
|
||||
"Attachments/image 19.jpg",
|
||||
"2 Personal/Projects/Timelapse Project",
|
||||
|
||||
27
0 Journal/0 Daily/2026-02-08.md
Normal file
27
0 Journal/0 Daily/2026-02-08.md
Normal file
@@ -0,0 +1,27 @@
|
||||
---
|
||||
aliases:
|
||||
Tags:
|
||||
- daily
|
||||
day_grade:
|
||||
Dehnen:
|
||||
Sport:
|
||||
Ernährung:
|
||||
---
|
||||
# <%tp.file.title%>
|
||||
|
||||
[[<%tp.date.now("YYYY-MM-DD",-1)%>]] <--> [[<%tp.date.now("YYYY-MM-DD",+1)%>]]
|
||||
|
||||
|
||||
<%tp.web.daily_quote()%>
|
||||
|
||||
---
|
||||
## Planning
|
||||
|
||||
|
||||
___
|
||||
## Reflection
|
||||
|
||||
|
||||
___
|
||||
## Notes
|
||||
-
|
||||
28
0 Journal/0 Daily/2026-03-18.md
Normal file
28
0 Journal/0 Daily/2026-03-18.md
Normal file
@@ -0,0 +1,28 @@
|
||||
---
|
||||
aliases:
|
||||
Tags:
|
||||
- daily
|
||||
day_grade:
|
||||
Dehnen:
|
||||
Sport:
|
||||
Ernährung:
|
||||
---
|
||||
# 2026-03-18
|
||||
|
||||
[[2026-03-17]] <--> [[2026-03-19]]
|
||||
|
||||
|
||||
> [!quote] Real success is finding your lifework in the work that you love.
|
||||
> — David McCullough
|
||||
|
||||
---
|
||||
## Planning
|
||||
|
||||
|
||||
___
|
||||
## Reflection
|
||||
|
||||
|
||||
___
|
||||
## Notes
|
||||
-
|
||||
27
0 Journal/0 Daily/2026-03-20.md
Normal file
27
0 Journal/0 Daily/2026-03-20.md
Normal file
@@ -0,0 +1,27 @@
|
||||
---
|
||||
aliases:
|
||||
Tags:
|
||||
- daily
|
||||
day_grade:
|
||||
Dehnen:
|
||||
Sport:
|
||||
Ernährung:
|
||||
---
|
||||
# <%tp.file.title%>
|
||||
|
||||
[[<%tp.date.now("YYYY-MM-DD",-1)%>]] <--> [[<%tp.date.now("YYYY-MM-DD",+1)%>]]
|
||||
|
||||
|
||||
<%tp.web.daily_quote()%>
|
||||
|
||||
---
|
||||
## Planning
|
||||
|
||||
|
||||
___
|
||||
## Reflection
|
||||
|
||||
|
||||
___
|
||||
## Notes
|
||||
-
|
||||
@@ -0,0 +1,400 @@
|
||||
---
|
||||
title: Home Assistant -> InfluxDB -> Grafana setup and debugging notes
|
||||
created_date: 2026-03-17
|
||||
updated_date: 2026-03-17
|
||||
aliases:
|
||||
tags:
|
||||
---
|
||||
# Home Assistant -> InfluxDB -> Grafana setup and debugging notes
|
||||
## Architecture
|
||||
|
||||
This setup has **three layers**:
|
||||
|
||||
1. **Home Assistant** generates state changes and sensor values.
|
||||
2. **InfluxDB 3 Core** stores that time-series data.
|
||||
3. **Grafana** reads from InfluxDB and visualizes it.
|
||||
|
||||
### Network layout
|
||||
|
||||
- **Home Assistant** runs outside the Docker Compose network.
|
||||
- **InfluxDB** and **Grafana** run together in the same Docker Compose stack.
|
||||
- Therefore:
|
||||
- **Home Assistant -> InfluxDB** must use the **Proxmox container IP** and exposed port.
|
||||
- **Grafana -> InfluxDB** should use the **Docker service name**.
|
||||
|
||||
## Actual endpoints
|
||||
|
||||
### Home Assistant -> InfluxDB
|
||||
Home Assistant should connect to InfluxDB using:
|
||||
|
||||
- Protocol: `http`
|
||||
- Host / URL: `192.168.194.120`
|
||||
- Port: `8181`
|
||||
- SSL verification: off
|
||||
|
||||
Reason: Home Assistant is outside the Docker network, so it cannot resolve `influxdb3`.
|
||||
|
||||
### Grafana -> InfluxDB
|
||||
Grafana should connect to InfluxDB using:
|
||||
|
||||
- URL: `http://influxdb3:8181`
|
||||
|
||||
Reason: Grafana and InfluxDB are on the same Docker Compose network, so Docker DNS resolves `influxdb3`.
|
||||
|
||||
## Docker Compose setup
|
||||
|
||||
The relevant Compose structure is:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
influxdb3:
|
||||
image: influxdb:3-core
|
||||
ports:
|
||||
- "8181:8181"
|
||||
|
||||
grafana:
|
||||
image: grafana/grafana:latest
|
||||
depends_on:
|
||||
- influxdb3
|
||||
ports:
|
||||
- "3000:3000"
|
||||
```
|
||||
|
||||
This means:
|
||||
|
||||
- InfluxDB is reachable from outside Docker at `http://<proxmox-container-ip>:8181`
|
||||
- InfluxDB is reachable from Grafana internally at `http://influxdb3:8181`
|
||||
|
||||
## Home Assistant InfluxDB configuration
|
||||
|
||||
### Important migration detail
|
||||
|
||||
Home Assistant is removing YAML-based InfluxDB **connection settings**.
|
||||
|
||||
So these connection keys should **not** stay in YAML:
|
||||
|
||||
- `api_version`
|
||||
- `host`
|
||||
- `port`
|
||||
- `ssl`
|
||||
- `verify_ssl`
|
||||
- `ssl_ca_cert`
|
||||
- `username`
|
||||
- `password`
|
||||
- `database`
|
||||
- `token`
|
||||
- `organization`
|
||||
- `bucket`
|
||||
- `path`
|
||||
|
||||
Those should be configured through **Devices & Services** in the Home Assistant UI.
|
||||
|
||||
### What can still stay in YAML
|
||||
|
||||
Behavior/settings like these can still stay in YAML:
|
||||
|
||||
- `measurement_attr`
|
||||
- `default_measurement`
|
||||
- `override_measurement`
|
||||
- `include`
|
||||
- `exclude`
|
||||
- `tags`
|
||||
- `tags_attributes`
|
||||
|
||||
## Final Home Assistant behavior setting
|
||||
|
||||
To get **one table per entity/sensor**, the key YAML setting is:
|
||||
|
||||
```yaml
|
||||
influxdb:
|
||||
measurement_attr: entity_id
|
||||
```
|
||||
|
||||
Reason:
|
||||
|
||||
- Default behavior grouped data into tables like `W`, `Wh`, `V`, `%`
|
||||
- That made many sensors appear "missing", because they were grouped by unit
|
||||
- `measurement_attr: entity_id` changes that back to one measurement/table per entity, which is easier to use in Grafana
|
||||
|
||||
## InfluxDB concepts in this setup
|
||||
|
||||
### Databases
|
||||
We used databases such as:
|
||||
|
||||
- `home`
|
||||
- `homeassistant`
|
||||
- `ha_fresh`
|
||||
|
||||
These are databases, not tables.
|
||||
|
||||
### Tables / measurements
|
||||
Inside a database, tables are created automatically when data is written.
|
||||
|
||||
Examples after using `measurement_attr: entity_id`:
|
||||
|
||||
- `sensor.solarnet_power_photovoltaics`
|
||||
- `sensor.solarnet_power_grid_export`
|
||||
- `sensor.solarnet_power_load_consumed`
|
||||
|
||||
Examples from the old grouped schema:
|
||||
|
||||
- `W`
|
||||
- `Wh`
|
||||
- `V`
|
||||
- `A`
|
||||
|
||||
## Tokens and authentication
|
||||
|
||||
### What is used where
|
||||
|
||||
- **Home Assistant** uses an InfluxDB token to write data
|
||||
- **Grafana** uses an InfluxDB token to query data
|
||||
- **Admin token** is used for CLI/database management
|
||||
|
||||
### Important note
|
||||
Tokens and secrets that were exposed should be rotated.
|
||||
|
||||
## How we debugged the setup
|
||||
|
||||
## 1. Verified InfluxDB is running
|
||||
|
||||
We checked Docker:
|
||||
|
||||
```bash
|
||||
docker ps
|
||||
docker logs --since 0.5m influxdb3
|
||||
```
|
||||
|
||||
This confirmed:
|
||||
- Grafana container is running
|
||||
- InfluxDB container is running
|
||||
- InfluxDB is actively flushing writes
|
||||
|
||||
## 2. Verified databases exist
|
||||
|
||||
```bash
|
||||
docker exec -it influxdb3 influxdb3 show databases --token "$INFLUX_ADMIN_TOKEN"
|
||||
```
|
||||
|
||||
This showed databases like:
|
||||
|
||||
- `_internal`
|
||||
- `home`
|
||||
- `homeassistant`
|
||||
- later `ha_fresh`
|
||||
|
||||
## 3. Verified Home Assistant can reach InfluxDB over the network
|
||||
|
||||
From Home Assistant shell:
|
||||
|
||||
```bash
|
||||
curl http://192.168.194.120:8181/health
|
||||
```
|
||||
|
||||
Response:
|
||||
|
||||
```text
|
||||
{"error": "the request was not authenticated"}
|
||||
```
|
||||
|
||||
This was **good** because it proved:
|
||||
- DNS/IP was correct
|
||||
- network path worked
|
||||
- InfluxDB was reachable
|
||||
- only authentication remained
|
||||
|
||||
## 4. Reconfigured Home Assistant in the UI
|
||||
|
||||
Home Assistant InfluxDB integration was configured in **Devices & Services** using:
|
||||
|
||||
- HTTP
|
||||
- host/IP of Proxmox container
|
||||
- port `8181`
|
||||
- no SSL verification
|
||||
- organization `dummy`
|
||||
- bucket/database `ha_fresh` or similar
|
||||
- token
|
||||
|
||||
## 5. Enabled debug logs in Home Assistant
|
||||
|
||||
We confirmed HA was writing by seeing log lines like:
|
||||
|
||||
```text
|
||||
Wrote 8 events.
|
||||
Wrote 10 events.
|
||||
```
|
||||
|
||||
That proved:
|
||||
|
||||
- Home Assistant -> InfluxDB write path works
|
||||
|
||||
## 6. Verified writes actually landed in InfluxDB
|
||||
|
||||
We queried InfluxDB directly:
|
||||
|
||||
```bash
|
||||
docker exec -it influxdb3 influxdb3 query --database ha_fresh --token "$INFLUX_ADMIN_TOKEN" 'SELECT * FROM "W" ORDER BY time DESC LIMIT 20'
|
||||
```
|
||||
|
||||
This showed fresh rows from Home Assistant sensors, including:
|
||||
|
||||
- `pv_power`
|
||||
- `solarnet_power_photovoltaics`
|
||||
- `solarnet_power_load_consumed`
|
||||
- `solarnet_power_grid_export`
|
||||
|
||||
That proved:
|
||||
|
||||
- Home Assistant -> InfluxDB works fully
|
||||
- the issue was not ingestion
|
||||
- the issue was schema / Grafana config
|
||||
|
||||
## 7. Verified Grafana container can reach InfluxDB
|
||||
|
||||
From inside the Grafana container, we tested:
|
||||
|
||||
```bash
|
||||
curl -i http://influxdb3:8181/api/v3/query_sql -H "Authorization: Token YOUR_GRAFANA_TOKEN" -H "Content-Type: application/json" --data '{"db":"home","q":"SHOW TABLES"}'
|
||||
```
|
||||
|
||||
This working proved:
|
||||
|
||||
- Docker networking is fine
|
||||
- `influxdb3` resolves correctly
|
||||
- Grafana-side token auth works
|
||||
- the remaining problem was purely Grafana datasource configuration
|
||||
|
||||
## 8. Fixed Grafana datasource setup
|
||||
|
||||
### Correct Grafana datasource basics
|
||||
|
||||
- Query language: **SQL** or the desired mode
|
||||
- URL: `http://influxdb3:8181`
|
||||
- Database: the actual InfluxDB database in use
|
||||
- Token: Grafana token
|
||||
|
||||
### Important TLS issue
|
||||
|
||||
Grafana originally failed with an error like:
|
||||
|
||||
```text
|
||||
tls: first record does not look like a TLS handshake
|
||||
```
|
||||
|
||||
That happened because Grafana tried TLS/FlightSQL behavior against a plain HTTP endpoint.
|
||||
|
||||
Fix:
|
||||
- use the correct datasource mode
|
||||
- use the right endpoint
|
||||
- keep the connection consistent with the actual InfluxDB setup
|
||||
|
||||
## 9. Realized the schema had changed
|
||||
|
||||
Old schema assumption:
|
||||
- one table per sensor
|
||||
|
||||
New schema that appeared initially:
|
||||
- one table per **unit**, like `W`, `Wh`, `V`
|
||||
|
||||
That is why old queries stopped working.
|
||||
|
||||
Example old query:
|
||||
|
||||
```sql
|
||||
SELECT mean("value")
|
||||
FROM "sensor.solarnet_power_photovoltaics"
|
||||
WHERE $timeFilter
|
||||
GROUP BY time(5m) fill(none)
|
||||
```
|
||||
|
||||
Equivalent query in the grouped-by-unit schema:
|
||||
|
||||
```sql
|
||||
SELECT mean("value")
|
||||
FROM "W"
|
||||
WHERE
|
||||
"entity_id" = 'solarnet_power_photovoltaics'
|
||||
AND $timeFilter
|
||||
GROUP BY time(5m) fill(none)
|
||||
```
|
||||
|
||||
Then we changed HA back to per-entity measurements using:
|
||||
|
||||
```yaml
|
||||
influxdb:
|
||||
measurement_attr: entity_id
|
||||
```
|
||||
|
||||
## 10. Reset the fresh database to keep it clean
|
||||
|
||||
After confirming the new schema worked, the goal was to keep only actually-used tables in the fresh DB.
|
||||
|
||||
General approach:
|
||||
- delete or recreate `ha_fresh`
|
||||
- reconnect HA to it
|
||||
- let HA repopulate it with only actively written entities
|
||||
|
||||
That leaves a clean database without old junk.
|
||||
|
||||
## Final recommended setup
|
||||
|
||||
## Home Assistant
|
||||
- Configure InfluxDB connection in the UI
|
||||
- Keep only behavior options in YAML
|
||||
- Use:
|
||||
|
||||
```yaml
|
||||
influxdb:
|
||||
measurement_attr: entity_id
|
||||
```
|
||||
|
||||
if per-entity tables are desired
|
||||
|
||||
## InfluxDB
|
||||
- Keep one clean database for HA data
|
||||
- Use separate tokens for:
|
||||
- admin
|
||||
- Home Assistant
|
||||
- Grafana
|
||||
|
||||
## Grafana
|
||||
- Use datasource URL:
|
||||
|
||||
```text
|
||||
http://influxdb3:8181
|
||||
```
|
||||
|
||||
- Point it to the correct InfluxDB database
|
||||
- Use the Grafana token
|
||||
- Rebuild old queries if schema changed
|
||||
|
||||
## Quick troubleshooting checklist for the future
|
||||
|
||||
### If HA is not writing
|
||||
1. Check HA logs for InfluxDB errors
|
||||
2. Test connectivity from HA:
|
||||
```bash
|
||||
curl http://<influx-ip>:8181/health
|
||||
```
|
||||
3. Verify token / database / organization / bucket in HA UI
|
||||
4. Query InfluxDB directly to see whether data is arriving
|
||||
|
||||
### If Grafana shows nothing
|
||||
1. Verify datasource URL is `http://influxdb3:8181`
|
||||
2. Test token from inside Grafana container
|
||||
3. Confirm the right database is selected
|
||||
4. Check whether schema is per-entity or grouped-by-unit
|
||||
5. Rewrite queries accordingly
|
||||
|
||||
### If sensors seem missing
|
||||
1. Check `SHOW TABLES`
|
||||
2. Query likely shared tables like `W`, `Wh`, `V`
|
||||
3. Check whether HA is grouping by unit instead of entity
|
||||
4. Set:
|
||||
|
||||
```yaml
|
||||
influxdb:
|
||||
measurement_attr: entity_id
|
||||
```
|
||||
|
||||
if one table per sensor is preferred
|
||||
@@ -28,9 +28,14 @@ can this be good:
|
||||
[GitHub - jomjol/AI-on-the-edge-device: Easy to use device for connecting "old" measuring units (water, power, gas, ...) to the digital world](https://github.com/jomjol/AI-on-the-edge-device?tab=readme-ov-file#setup-%EF%B8%8F)
|
||||
|
||||
## Somfy
|
||||
|
||||
I used this tutorial: [Somfy Smart DIY \| Make Shades Smart With ESPSomfy-RTS - YouTube](https://www.youtube.com/watch?v=1acVJ0xWJgs)
|
||||
|
||||
The open memory function doesn't work (the auto button). For groups I just used the prog button on the back of the remote after clicking the open memory button and waiting (which doesn't do anything).
|
||||
![[Pasted image 20260118150817.png]]
|
||||
Backup:
|
||||
![[ESPSomfyRTS 2026-01-18T16_26_16.backup]]
|
||||
![[ESPSomfyRTS 2026-03-17T16_05_06.backup]]
|
||||
|
||||
### Home Assitant Integration
|
||||
Followed this Video: [ESPSomfy Integration with Home Assistant - YouTube](https://www.youtube.com/watch?v=ikrQwPYGyeg&t=14s)
|
||||
@@ -53,5 +58,14 @@ DB: homeassistant
|
||||
user: homeassistant
|
||||
pw: VYWPQuR5UWkqMNU
|
||||
|
||||
I put the tokens into chat gpt so they might be compromised. all Influx tokens (admin, grafana and homeassistant), Oauth client secret and Id (grafana)
|
||||
|
||||
### Tutorials
|
||||
[INSANE STATISTICS In Home Assistant With Grafana! - TUTORIAL - YouTube](https://www.youtube.com/watch?v=rXF-LycbjoA)
|
||||
|
||||
|
||||
## Backup
|
||||
Ich hab ein Back-up User kreiert und einen geteilten Ordner auf der Nase bei meinen Eltern zu Hause. Home Assistant macht jeden Tag ein automatisches Back-up und behält dabei fünf Back-ups in Rotation. Die Verschlüsselung Schlüssel sind in meinem Lastpass.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,665 @@
|
||||
# Home Lab Backup Architecture - First Draft
|
||||
|
||||
## Executive summary
|
||||
|
||||
You do **not** have one backup problem. You have **five** different ones:
|
||||
|
||||
1. **Primary shared data** on the Synology NAS
|
||||
2. **Virtualized workloads** on Proxmox
|
||||
3. **Standalone Linux servers** (VPS + Debian server)
|
||||
4. **User endpoints** (Mac, Linux laptop, Windows PC)
|
||||
5. **Mobile devices** (iPhone, Android)
|
||||
|
||||
Treating all of them with one tool will make the whole system worse.
|
||||
|
||||
My recommendation is a **layered architecture**:
|
||||
|
||||
- **Synology NAS** = primary durable data store for family files/photos and backup landing zone
|
||||
- **Local snapshots** = fast recovery from accidental deletion and ransomware-style mistakes
|
||||
- **Proxmox Backup Server (PBS)** = proper backup system for VMs/LXCs
|
||||
- **Offsite encrypted backup** = file/server copies to a remote target
|
||||
- **Scheduled restore testing** = mandatory, not optional
|
||||
- **Separate production and staging** = from day one
|
||||
|
||||
---
|
||||
|
||||
## The main design decisions
|
||||
|
||||
### 1) Snapshots are not backups
|
||||
|
||||
Snapshots are for:
|
||||
- accidental deletion
|
||||
- "I changed something yesterday and want it back"
|
||||
- quick rollback
|
||||
|
||||
Backups are for:
|
||||
- NAS failure
|
||||
- host failure
|
||||
- site disaster
|
||||
- account compromise
|
||||
- major corruption
|
||||
|
||||
So the rule is:
|
||||
|
||||
- **Use snapshots for short-term recovery**
|
||||
- **Use true backups for 3-2-1**
|
||||
|
||||
---
|
||||
|
||||
### 2) Do not store databases on a network share
|
||||
|
||||
For **Nextcloud**, **Immich**, and **Authentik**:
|
||||
|
||||
- Keep **PostgreSQL/MariaDB/Redis** on **local SSD storage** of the VM/LXC
|
||||
- Keep only the **large user data / media blobs** on NAS-backed storage if needed
|
||||
- Back up databases separately and consistently
|
||||
|
||||
This is the clean split:
|
||||
|
||||
- **App state + DB** -> local VM/LXC disk -> backed up by PBS / app-aware dumps
|
||||
- **User files / photos** -> NAS share -> snapshot + offsite backup
|
||||
|
||||
This reduces fragility a lot.
|
||||
|
||||
---
|
||||
|
||||
### 3) Production and staging must be separated structurally
|
||||
|
||||
Do not make staging just "another docker compose file on the same data".
|
||||
|
||||
Recommended separation:
|
||||
|
||||
- different subdomains
|
||||
- different VM/LXC instances
|
||||
- different databases
|
||||
- different storage paths/shares
|
||||
- different backup namespaces / repositories
|
||||
- shorter retention on staging
|
||||
- no staging write access to production data
|
||||
|
||||
Best case:
|
||||
- `prod` and `staging` live on separate Proxmox VMs/CTs
|
||||
- staging can read from **sanitized copies** or test data only
|
||||
|
||||
---
|
||||
|
||||
## Recommended target architecture
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
Users[Users<br/>You / spouse / family] --> NC[Nextcloud on Proxmox<br/>prod]
|
||||
Users --> IM[Immich on Proxmox<br/>prod]
|
||||
Users --> AK[Authentik on Proxmox<br/>prod]
|
||||
|
||||
Laptops[Mac / Linux / Windows laptops] --> EPB[Endpoint backup services]
|
||||
Phones[iPhone / Android] --> IM
|
||||
Phones --> NC
|
||||
|
||||
subgraph PVE[Proxmox cluster / host]
|
||||
NC
|
||||
IM
|
||||
AK
|
||||
STG[Staging VMs/LXCs]
|
||||
PBS1[Local Proxmox Backup Server]
|
||||
end
|
||||
|
||||
subgraph NAS[Synology NAS]
|
||||
SH1[Family files share]
|
||||
SH2[Photos/media share]
|
||||
SH3[App data shares]
|
||||
SNAP[Synology snapshots]
|
||||
ABB[Active Backup for Business / Time Machine targets]
|
||||
HB[Hyper Backup jobs]
|
||||
end
|
||||
|
||||
NC --> SH1
|
||||
IM --> SH2
|
||||
NC --> SH3
|
||||
|
||||
SH1 --> SNAP
|
||||
SH2 --> SNAP
|
||||
SH3 --> SNAP
|
||||
|
||||
PVE --> PBS1
|
||||
PBS1 --> OFFPBS[Offsite PBS<br/>preferred for Proxmox backups]
|
||||
|
||||
HB --> OFFSITE[Hetzner Storage Box or object storage]
|
||||
|
||||
VPS[VPS services] --> RESTIC[Restic/Kopia backups]
|
||||
Debian[Small Debian server] --> RESTIC
|
||||
RESTIC --> OFFSITE
|
||||
|
||||
EPB --> ABB
|
||||
ABB --> SNAP
|
||||
ABB --> HB
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## What I would recommend for each layer
|
||||
|
||||
## A. Synology NAS shared folders
|
||||
|
||||
### Role
|
||||
The NAS should be the **primary storage anchor** for user files, family data, and large photo/media payloads.
|
||||
|
||||
### Local protection
|
||||
Use:
|
||||
- **Btrfs shared-folder snapshots** via Snapshot Replication
|
||||
- **Recycle Bin** for user-facing convenience
|
||||
|
||||
### Suggested snapshot policy
|
||||
For important family shares:
|
||||
- every **hour** for 48 hours
|
||||
- every **day** for 30 days
|
||||
- every **week** for 8 weeks
|
||||
- every **month** for 6-12 months
|
||||
|
||||
This gives you fast rollback without huge operational complexity.
|
||||
|
||||
### Offsite protection
|
||||
Use **Hyper Backup** from Synology to one of these:
|
||||
|
||||
#### Option A - Hetzner Storage Box
|
||||
**Pros**
|
||||
- cheap
|
||||
- European provider
|
||||
- supports SFTP/rsync/Borg/WebDAV/SMB
|
||||
- has its own snapshots
|
||||
|
||||
**Cons**
|
||||
- less elegant than S3-style cloud for some tools
|
||||
- not object storage
|
||||
- weaker ecosystem for immutability-style backup controls
|
||||
|
||||
#### Option B - Backblaze B2 / S3-compatible object storage
|
||||
**Pros**
|
||||
- easy Hyper Backup integration
|
||||
- clean cloud backup flow
|
||||
- common backend for many tools
|
||||
|
||||
**Cons**
|
||||
- ongoing storage/egress economics need checking for your volume
|
||||
- less aligned with your "Hetzner-like box" idea
|
||||
|
||||
### My call
|
||||
For your case:
|
||||
- **Synology NAS -> Hyper Backup -> Hetzner Storage Box** is reasonable for NAS data
|
||||
- if later you want stronger cloud-native backup properties, move NAS offsite backup to **B2/S3**
|
||||
|
||||
---
|
||||
|
||||
## B. Proxmox VMs and containers
|
||||
|
||||
### Do not use generic file copies for this
|
||||
Use **Proxmox Backup Server**.
|
||||
|
||||
### Why
|
||||
PBS is the right tool for:
|
||||
- deduplicated Proxmox backups
|
||||
- restore of full VMs/CTs
|
||||
- verification jobs
|
||||
- prune/retention jobs
|
||||
- remote sync between PBS instances
|
||||
|
||||
### Best local deployment
|
||||
Preferred order:
|
||||
|
||||
1. **Dedicated small physical box for PBS**
|
||||
2. **Your small Debian server repurposed for PBS**, if it can be dedicated
|
||||
3. PBS in a VM only if you must
|
||||
|
||||
The closer PBS is to "external to the main Proxmox failure domain", the better.
|
||||
|
||||
### Offsite strategy for Proxmox
|
||||
This is the important part:
|
||||
|
||||
- If you want a **clean Proxmox-native offsite design**, use a **second PBS offsite**
|
||||
- A plain **Hetzner Storage Box is good for files**, but it is **not the clean native target** for PBS remote sync
|
||||
|
||||
### My call
|
||||
For Proxmox workloads:
|
||||
- **Local PBS on separate hardware (or your Debian box if dedicated)**
|
||||
- **Offsite PBS in Hetzner / other remote host** for synced copies
|
||||
|
||||
That is the most robust design in your whole setup.
|
||||
|
||||
---
|
||||
|
||||
## C. VPS and the extra Debian server
|
||||
|
||||
These are not Proxmox guests, so PBS is not the natural universal answer.
|
||||
|
||||
Use:
|
||||
- **restic** if you want simplicity, reliability, scripting, and wide backend support
|
||||
- **Kopia** if you want a better GUI and endpoint UX
|
||||
|
||||
### What to back up on each server
|
||||
For each service:
|
||||
- config files
|
||||
- compose files / manifests
|
||||
- secrets management exports where appropriate
|
||||
- database dumps or consistent DB snapshots
|
||||
- application data directories
|
||||
- a machine bootstrap script or IaC definition
|
||||
|
||||
### Recommendation
|
||||
- **restic** for VPS and Linux servers is the safer default
|
||||
- send encrypted backups to **Hetzner Storage Box** or **S3/B2**
|
||||
|
||||
Why restic over trying to force one mega-tool?
|
||||
- fewer moving parts
|
||||
- easy cron/systemd timers
|
||||
- easy restore scripting
|
||||
- good fit for Linux servers and VPSs
|
||||
|
||||
---
|
||||
|
||||
## D. Nextcloud, Immich, Authentik
|
||||
|
||||
## 1. Nextcloud
|
||||
|
||||
### Recommended layout
|
||||
- app + DB on local VM/LXC storage
|
||||
- file data on NAS-backed storage if needed
|
||||
- back up the DB, config, and data separately
|
||||
|
||||
### Identity
|
||||
Use **Authentik via OIDC** if you want central auth.
|
||||
|
||||
### Important note
|
||||
Nextcloud is your **file platform**, not your only backup platform.
|
||||
Do not confuse sync/share with backup.
|
||||
|
||||
---
|
||||
|
||||
## 2. Immich
|
||||
|
||||
### Recommended layout
|
||||
- app + PostgreSQL on local VM/LXC storage
|
||||
- `UPLOAD_LOCATION` media on NAS-backed storage
|
||||
- use Immich's built-in **database backup job**, but also back up the underlying media storage
|
||||
|
||||
### Identity
|
||||
Immich supports **OIDC**, so Authentik can be used here too.
|
||||
|
||||
### Important note
|
||||
Immich's own docs explicitly warn that database backup alone is not enough; you must also back up the uploaded photos/videos.
|
||||
|
||||
---
|
||||
|
||||
## 3. Authentik
|
||||
|
||||
### Recommended layout
|
||||
- keep Authentik small and boring
|
||||
- PostgreSQL local
|
||||
- media/config backed up
|
||||
- include exported configuration / recovery procedure in runbook
|
||||
|
||||
### Important note
|
||||
Authentik removed its older integrated backup functionality, so you should treat it like a normal app stack: back up the DB and any relevant mounted state.
|
||||
|
||||
---
|
||||
|
||||
## E. Private computers and family computers
|
||||
|
||||
This is where many homelabs become annoying.
|
||||
|
||||
You need something that:
|
||||
- users do not hate
|
||||
- works automatically
|
||||
- restores cleanly
|
||||
- you can operate without constant support calls
|
||||
|
||||
### My recommendation is **not** one single tool for everything
|
||||
|
||||
## For Macs
|
||||
Use **Time Machine to Synology**.
|
||||
|
||||
Why:
|
||||
- native Mac UX
|
||||
- low friction
|
||||
- non-technical users understand it better
|
||||
- good restore story for Mac users
|
||||
|
||||
## For Windows PCs
|
||||
Use **Synology Active Backup for Business**.
|
||||
|
||||
Why:
|
||||
- centralized management
|
||||
- good Windows support
|
||||
- easier for family members than a DIY CLI backup setup
|
||||
|
||||
## For your Linux laptop
|
||||
Use one of:
|
||||
- **Kopia** if you want a GUI and easy restores
|
||||
- **restic** if you want maximum control
|
||||
|
||||
### Why I am not pushing UrBackup as the main answer
|
||||
UrBackup is interesting and easy to set up, but it is weaker as a universal answer here because:
|
||||
- Windows is its strongest path
|
||||
- Mac is not really the center of gravity
|
||||
- it adds another platform you must trust and operate
|
||||
|
||||
For your environment, Synology-native endpoint backup plus Linux-specific tooling is the cleaner compromise.
|
||||
|
||||
---
|
||||
|
||||
## F. iPhone and Android
|
||||
|
||||
Here is the blunt answer:
|
||||
|
||||
A clean, self-hosted, cross-platform, full-device backup experience for iPhone + Android + easy restore is **not realistically where you want to fight this battle**.
|
||||
|
||||
### What I recommend instead
|
||||
|
||||
#### Photos/videos
|
||||
- **Immich mobile backup** for photos/videos
|
||||
|
||||
#### Files/documents
|
||||
- **Nextcloud mobile app** for file access and uploads
|
||||
|
||||
#### Full device state restore
|
||||
- **iCloud backup** for iPhones
|
||||
- **Google/Android device backup** for Android
|
||||
|
||||
This is one place where the practical answer beats the ideological self-hosting answer.
|
||||
|
||||
---
|
||||
|
||||
## 3-2-1 mapping for your setup
|
||||
|
||||
## Production family data (files/photos)
|
||||
|
||||
### Copy 1 - primary
|
||||
- Synology shared folders
|
||||
|
||||
### Copy 2 - local secondary
|
||||
- Synology snapshots / recycle bin / local backup target where appropriate
|
||||
|
||||
### Copy 3 - offsite
|
||||
- Hyper Backup to Hetzner Storage Box or S3/B2
|
||||
|
||||
---
|
||||
|
||||
## Proxmox workloads
|
||||
|
||||
### Copy 1 - primary
|
||||
- running VMs/CTs on Proxmox
|
||||
|
||||
### Copy 2 - local backup
|
||||
- local PBS datastore
|
||||
|
||||
### Copy 3 - offsite
|
||||
- remote PBS sync target
|
||||
|
||||
---
|
||||
|
||||
## VPS / Debian server
|
||||
|
||||
### Copy 1 - primary
|
||||
- live server
|
||||
|
||||
### Copy 2 - local or local-ish backup cache/repository if desired
|
||||
- optional local repository
|
||||
|
||||
### Copy 3 - offsite
|
||||
- restic/Kopia to Hetzner Storage Box or object storage
|
||||
|
||||
---
|
||||
|
||||
## Retention suggestions
|
||||
|
||||
## Snapshots
|
||||
- hourly x 48
|
||||
- daily x 30
|
||||
- weekly x 8
|
||||
- monthly x 6-12
|
||||
|
||||
## Proxmox backups
|
||||
- nightly
|
||||
- keep 7 daily
|
||||
- keep 4 weekly
|
||||
- keep 6 monthly
|
||||
- keep 1-2 yearly for critical systems
|
||||
|
||||
## Server file backups
|
||||
- daily
|
||||
- same retention as above unless data changes very fast
|
||||
|
||||
## Staging
|
||||
- keep short
|
||||
- e.g. 3 daily, 2 weekly
|
||||
|
||||
---
|
||||
|
||||
## Restore testing - mandatory design
|
||||
|
||||
This is the part most people skip.
|
||||
|
||||
You explicitly said you want testing. Good. Keep it formal.
|
||||
|
||||
## Level 1 - automated integrity checks
|
||||
|
||||
### PBS
|
||||
- run **verify jobs**
|
||||
- run **prune / GC** on schedule
|
||||
- alert on failure
|
||||
|
||||
### Restic / Kopia
|
||||
- run backup check / metadata verification
|
||||
- restore a few files automatically to a temp path
|
||||
- verify checksums
|
||||
|
||||
---
|
||||
|
||||
## Level 2 - scheduled app restore tests
|
||||
|
||||
Monthly or quarterly:
|
||||
|
||||
- restore latest VPS backup into an isolated test VM/network
|
||||
- boot it
|
||||
- run a smoke test script:
|
||||
- service starts
|
||||
- ports respond
|
||||
- DB reachable
|
||||
- app login page loads
|
||||
- sample user file exists
|
||||
|
||||
Do the same for:
|
||||
- Nextcloud test restore
|
||||
- Immich test restore
|
||||
- Authentik test restore
|
||||
|
||||
---
|
||||
|
||||
## Level 3 - disaster recovery rehearsal
|
||||
|
||||
Quarterly or every 6 months:
|
||||
|
||||
- simulate total loss of one service
|
||||
- restore from documented procedure only
|
||||
- measure:
|
||||
- RTO: how long to restore
|
||||
- RPO: how much data lost
|
||||
- missing secrets / hidden manual steps
|
||||
|
||||
That is how you find the lies in your own system.
|
||||
|
||||
---
|
||||
|
||||
## Suggested restore-test automation pattern
|
||||
|
||||
### For each service, create:
|
||||
- backup source definition
|
||||
- restore script
|
||||
- smoke-test script
|
||||
- teardown script
|
||||
|
||||
Example flow:
|
||||
|
||||
1. create isolated VM/LXC on test VLAN
|
||||
2. pull latest backup
|
||||
3. restore service
|
||||
4. run health checks
|
||||
5. record success/failure and timing
|
||||
6. destroy test instance
|
||||
|
||||
This can start simple with shell scripts and later become CI-driven.
|
||||
|
||||
---
|
||||
|
||||
## Recommended first-version architecture
|
||||
|
||||
If I had to choose a practical v1 for you now, I would do this:
|
||||
|
||||
### Storage and data
|
||||
- Synology NAS as primary family data store
|
||||
- Btrfs snapshots on all critical shares
|
||||
- Recycle Bin on user-facing shares
|
||||
- Hyper Backup nightly to **Hetzner Storage Box**
|
||||
|
||||
### Compute and apps
|
||||
- Proxmox hosts production VMs/LXCs
|
||||
- Nextcloud, Immich, Authentik each isolated in their own VM/LXC or at least separate stacks
|
||||
- DBs local to compute
|
||||
- large file/media data on NAS share if required
|
||||
|
||||
### Proxmox backup
|
||||
- deploy **PBS locally** on separate hardware if possible
|
||||
- nightly backups of all prod VMs/CTs
|
||||
- weekly verify jobs
|
||||
- remote sync to **offsite PBS**
|
||||
|
||||
### Other Linux systems
|
||||
- restic to offsite storage
|
||||
- documented DB dumps + config backups
|
||||
|
||||
### Endpoints
|
||||
- Mac -> Time Machine to Synology
|
||||
- Windows -> Active Backup for Business
|
||||
- Linux laptop -> Kopia or restic to NAS/offsite
|
||||
|
||||
### Phones
|
||||
- Immich for photos/videos
|
||||
- Nextcloud for documents/files
|
||||
- iCloud / Google backup for full-device state
|
||||
|
||||
### Environments
|
||||
- production and staging separated by VM/LXC, storage path, DNS, and credentials
|
||||
|
||||
---
|
||||
|
||||
## Where this architecture is strong
|
||||
|
||||
- low conceptual confusion
|
||||
- good restore paths
|
||||
- good separation of snapshots vs backups
|
||||
- avoids forcing one backup tool onto every problem
|
||||
- realistic for family usage
|
||||
- expandable as you add more self-hosted services
|
||||
|
||||
---
|
||||
|
||||
## Where it is still weak / uncertain
|
||||
|
||||
The answer is uncertain because I do not know:
|
||||
- your exact Synology model and whether all required packages/features are supported well
|
||||
- whether your NAS volumes are Btrfs
|
||||
- whether you can dedicate hardware to PBS
|
||||
- your uplink bandwidth and expected offsite backup volume
|
||||
- whether your family really needs full endpoint bare-metal restore, or mostly file-level recovery
|
||||
- how much operational complexity you personally are willing to own long-term
|
||||
|
||||
These details can change the final recommendation.
|
||||
|
||||
---
|
||||
|
||||
## Biggest architectural traps to avoid
|
||||
|
||||
1. **Putting all backups on the same NAS and calling it 3-2-1**
|
||||
2. **Using snapshots as your only backup**
|
||||
3. **Mounting NAS storage into apps without thinking about DB consistency**
|
||||
4. **Using one universal backup tool for everything**
|
||||
5. **No restore testing**
|
||||
6. **Letting staging touch production data**
|
||||
7. **Running your only PBS inside the same Proxmox failure domain without another copy**
|
||||
|
||||
---
|
||||
|
||||
## My opinionated recommendation
|
||||
|
||||
If you want the most solid path with a sane amount of complexity:
|
||||
|
||||
- **Synology snapshots + Hyper Backup** for NAS data
|
||||
- **PBS + offsite PBS** for Proxmox
|
||||
- **restic** for VPS and Linux servers
|
||||
- **Time Machine / ABB / Kopia** for endpoints depending on OS
|
||||
- **Immich + Nextcloud + Authentik** with local DBs and NAS-backed large-data storage
|
||||
- **formal restore tests** every month/quarter
|
||||
|
||||
That is the first design I would trust with family data.
|
||||
|
||||
---
|
||||
|
||||
## Good next steps
|
||||
|
||||
1. Inventory every system and classify data into:
|
||||
- critical
|
||||
- important
|
||||
- replaceable
|
||||
2. Decide where PBS will run
|
||||
3. Decide whether offsite for NAS data is **Hetzner Storage Box** or **B2/S3**
|
||||
4. Separate prod and staging naming, storage paths, and credentials
|
||||
5. Implement backup in this order:
|
||||
- Synology snapshots
|
||||
- PBS local backups
|
||||
- offsite backups
|
||||
- endpoint backups
|
||||
- restore tests
|
||||
6. Write one restore runbook per service
|
||||
|
||||
---
|
||||
|
||||
## Sources / references
|
||||
|
||||
- Proxmox Backup Server docs: https://pbs.proxmox.com/docs/
|
||||
- Proxmox PBS installation / Debian / Proxmox VE integration: https://www.proxmox.com/en/products/proxmox-backup-server/get-started
|
||||
- Proxmox PBS sync jobs: https://pbs.proxmox.com/docs/managing-remotes.html
|
||||
- Proxmox PBS maintenance tasks: https://pbs.proxmox.com/docs/maintenance.html
|
||||
- Proxmox VE vzdump docs: https://pve.proxmox.com/pve-docs/chapter-vzdump.html
|
||||
- Synology Snapshot Replication: https://kb.synology.com/en-global/DSM/help/SnapshotReplication/snapshots?version=7
|
||||
- Synology Snapshot Replication technical specs: https://www.synology.com/dsm/7.9/software_spec/snapshot_replication
|
||||
- Synology snapshot recovery: https://kb.synology.com/DSM/tutorial/How_can_I_recover_files_from_snapshots
|
||||
- Synology Recycle Bin restore: https://kb.synology.com/en-ro/DSM/tutorial/How_do_I_restore_files_deleted_from_Synology_NAS
|
||||
- Synology Hyper Backup overview: https://kb.synology.com/en-global/DSM/help/HyperBackup/BackupApp_desc?version=7
|
||||
- Synology Hyper Backup feature page: https://www.synology.com/en-global/dsm/feature/hyper_backup
|
||||
- Synology Hyper Backup Explorer: https://kb.synology.com/en-global/DSM/help/HyperBackupExplorer/hyperbackupexplorer?version=7
|
||||
- Hetzner Storage Box protocols: https://docs.hetzner.com/storage/storage-box/general/
|
||||
- Hetzner Storage Box SSH/rsync/Borg: https://docs.hetzner.com/storage/storage-box/access/access-ssh-rsync-borg/
|
||||
- Hetzner Storage Box overview: https://www.hetzner.com/storage/storage-box/
|
||||
- Restic docs: https://restic.readthedocs.io/en/latest/
|
||||
- Kopia docs/features: https://kopia.io/docs/features/
|
||||
- Kopia homepage: https://kopia.io/
|
||||
- UrBackup features: https://www.urbackup.org/features.html
|
||||
- UrBackup admin manual: https://www.urbackup.org/administration_manual.html
|
||||
- Synology Active Backup for Business PC/Mac: https://www.synology.com/en-global/dsm/feature/active-backup-business/pc
|
||||
- Synology ABB Mac page: https://kb.synology.com/en-global/DSM/help/ActiveBackup/activebackup_business_pc_mac?version=7
|
||||
- Synology ABB requirements/limitations: https://kb.synology.com/en-af/DSM/help/ActiveBackup/activebackup_business_requireandlimit
|
||||
- Synology Time Machine guide: https://kb.synology.com/en-us/DSM/tutorial/How_to_back_up_files_from_Mac_to_Synology_NAS_with_Time_Machine
|
||||
- Windows File History: https://support.microsoft.com/en-us/windows/backup-and-restore-with-file-history-7bf065bf-f1ea-0a78-c1cf-7dcf51cc8bfc
|
||||
- Nextcloud backup docs: https://docs.nextcloud.com/server/32/admin_manual/maintenance/backup.html
|
||||
- Nextcloud desktop/mobile sync guidance: https://docs.nextcloud.com/server/latest/user_manual/en/files/desktop_mobile_sync.html
|
||||
- Nextcloud WebDAV guidance: https://docs.nextcloud.com/server/latest/user_manual/en/files/access_webdav.html
|
||||
- Nextcloud public shares: https://docs.nextcloud.com/server/latest/user_manual/en/files/sharing.html
|
||||
- Nextcloud OIDC / auth docs: https://docs.nextcloud.com/server/stable/admin_manual/configuration_user/index.html
|
||||
- Immich backup/restore: https://docs.immich.app/administration/backup-and-restore
|
||||
- Immich quick start: https://docs.immich.app/overview/quick-start
|
||||
- Immich custom file locations: https://docs.immich.app/guides/custom-locations
|
||||
- Immich OAuth/OIDC: https://docs.immich.app/administration/oauth/
|
||||
- Authentik backup/restore: https://docs.goauthentik.io/sys-mgmt/ops/backup-restore/
|
||||
- Authentik release note about removal of integrated backups: https://docs.goauthentik.io/releases/2022.2/
|
||||
- Apple iPhone backup: https://support.apple.com/guide/iphone/back-up-iphone-iph3ecf67d29/ios
|
||||
- Apple iPhone restore from backup: https://support.apple.com/en-us/118105
|
||||
- Android backup/restore: https://support.google.com/android/answer/2819582?hl=en
|
||||
|
||||
3
2 Personal/Home Lab/NextiShareBot.md
Normal file
3
2 Personal/Home Lab/NextiShareBot.md
Normal file
@@ -0,0 +1,3 @@
|
||||
|
||||
|
||||
Telegram Bot Token: 8073709473:AAEzxxitJud3C88a9abiTKRx6nXbQTWZCfw
|
||||
@@ -11,7 +11,7 @@ Diese Liste kann auch mit `#idea/startup` oder mit `#business-idea` ergänzt wer
|
||||
- Fun-park mit interactiven licht spielen. A la schnnell varierendes labyrinth in einem quadratischen Raum. Jede Bodenplatte ändert farben, auf rote darf man nicht stehen, grüne sind immer sicher und gehen nicht weg, keine farbe ist okay, aber rot kann immer ankommen, etc. Im Team spielen?
|
||||
- Laser spiel à la mission impossible?
|
||||
- Personal Question Deliverer: build a list of good questions and send myself randomly one of them per email every morning. Make it on the blog and let people subscribe and upload questions too
|
||||
- Schweizerdeutsch übersetzung / transcoding mit LLMs
|
||||
- ~~Schweizerdeutsch übersetzung / transcoding mit LLMs~~
|
||||
- Automatischer schuhsortierer und aufräum roboter (dann kann man die schuhe einfach im eingang ausziehen). Putzt und trocknet
|
||||
- Patisserie die Kuchen (oder andere Geschenke) macht die kleine Fehler haben für den selber gemachten Look (nicht gut weil leute lügen würden)
|
||||
- website um Wichteln auszulöseln
|
||||
@@ -58,7 +58,10 @@ Diese Liste kann auch mit `#idea/startup` oder mit `#business-idea` ergänzt wer
|
||||
- 3d model library.
|
||||
- app for organizing pubquizzes (similar to [Mutant Teapot - Puzzle Games for Curious Minds](https://mutantteapot.com/))
|
||||
- course website (maybe like aihero.dev?) but for apprenticeships: woodworking, metalworking, etc. when AI replaces all pc jobs people need something to do. --> create marketplace for teaching. Yes people can watch everything on youtube, but lets say here in switzerland you have a local youtuber that can easily organize workshops and book private lessons. --> much more personal.
|
||||
- gamification of sofware development through agents
|
||||
- gamification of sofware development through agents[[]]
|
||||
- CV curator: have a layout, have many bullets as master. Depending on the role select whatever bullets you want.
|
||||
- Scuba dive: risk analysis of your dives. get direct feedback of your previous dive (red, orange or green smiley). Better planning tool for DCS (talked with [[Lukas Glaus]], he has a physics friend who is an absolute killer). Immediate suggestions on how to improve dive profile to reduce risk. Simple app good UI
|
||||
- Skitouring app with crowd intelligence: upload pictures of conditions with geo data. Feedback system: feedback risk level of past tours given the avalanche risk and the route chosen (reduktions-methode)
|
||||
|
||||
## Medtech
|
||||
- use differential cameras to visualize airflow to teach deaf people how the airflow is when speaking to learn it properly
|
||||
|
||||
@@ -1,81 +1,81 @@
|
||||
# Ausrüstung
|
||||
- [ ] Lawinengerät ( batterie?)
|
||||
- [ ] Lawinenschaufel
|
||||
- [ ] Lawinensonde
|
||||
- [x] Lawinengerät ( batterie?)
|
||||
- [x] Lawinenschaufel
|
||||
- [x] Lawinensonde
|
||||
- [ ] Ski/Splitboard (eingestellt??)
|
||||
- [ ] Felle
|
||||
- [ ] Harscheisen
|
||||
- [ ] Stöcke (teleskop)
|
||||
- [ ] Tourenschuhe
|
||||
- [ ] Rucksack + Regenhülle
|
||||
- [ ] Sitzunterlage
|
||||
- [x] Felle
|
||||
- [x] Harscheisen
|
||||
- [x] Stöcke (teleskop)
|
||||
- [x] Tourenschuhe
|
||||
- [x] Rucksack + Regenhülle
|
||||
- [x] Sitzunterlage
|
||||
# Proviant
|
||||
- [ ] Thermoskanne
|
||||
- [x] Thermoskanne
|
||||
- [ ] Wasserflasche
|
||||
- [ ] Wachstücher für sandwich
|
||||
- [ ] Nüsse und Dörrfrüchte
|
||||
- [ ] Notfallriegel
|
||||
- [x] Wachstücher für sandwich
|
||||
- [x] Nüsse und Dörrfrüchte
|
||||
- [x] Notfallriegel
|
||||
- [ ] Gaskocher
|
||||
- [ ] Bialetti
|
||||
- [ ] Raclette öfeli
|
||||
- [ ] Sackmesser
|
||||
- [x] Sackmesser
|
||||
# Kleider
|
||||
- [ ] Gletscherbrille
|
||||
- [ ] Skibrille
|
||||
- [ ] Helm + Randlose Mütze falls Kletterhelm
|
||||
- [ ] Hose Hardshell
|
||||
- [ ] Jacke Hardshell
|
||||
- [ ] Pullover atmungsaktiv
|
||||
- [ ] Daunenjacke
|
||||
- [ ] Lange Unterhose Merino
|
||||
- [ ] Kurze Unterhose Merino
|
||||
- [ ] Merino shirt kurz
|
||||
- [ ] Merino shirt lang
|
||||
- [ ] Skisocken
|
||||
- [ ] Ersatzunterwäsche in plastiksack
|
||||
- [ ] Mütze / Stirnband
|
||||
- [ ] Schlauch / Skimaske
|
||||
- [ ] Sonnenhut
|
||||
- [ ] Touren Handschuhe
|
||||
- [ ] Hardshell Handschuhe
|
||||
- [ ] Ski Handschuhe
|
||||
- [ ] Blistersocks
|
||||
- [x] Gletscherbrille
|
||||
- [x] Skibrille
|
||||
- [x] Helm + Randlose Mütze falls Kletterhelm
|
||||
- [x] Hose Hardshell
|
||||
- [x] Jacke Hardshell
|
||||
- [x] Pullover atmungsaktiv
|
||||
- [x] Daunenjacke
|
||||
- [x] Lange Unterhose Merino
|
||||
- [x] Kurze Unterhose Merino
|
||||
- [x] Merino shirt kurz
|
||||
- [x] Merino shirt lang
|
||||
- [x] Skisocken
|
||||
- [x] Ersatzunterwäsche in plastiksack
|
||||
- [x] Mütze / Stirnband
|
||||
- [x] Schlauch / Skimaske
|
||||
- [x] Sonnenhut
|
||||
- [x] Touren Handschuhe
|
||||
- [x] Hardshell Handschuhe
|
||||
- [x] Ski Handschuhe
|
||||
- [x] Blistersocks
|
||||
|
||||
# Apotheke und Tools
|
||||
- [ ] Handy
|
||||
- [ ] Bargeld[[]]
|
||||
- [ ] Taschentücher
|
||||
- [ ] Panzer Tape
|
||||
- [ ] Erste Hilfe Set
|
||||
- [ ] Splint (Schiene)
|
||||
- [ ] Biwaksack
|
||||
- [ ] Sonnencreme
|
||||
- [ ] Lipstick Sonne
|
||||
- [ ] Schraubenzieher tool
|
||||
- [ ] Kleiner Riemen
|
||||
- [ ] Kabelbinder
|
||||
- [ ] Stirnlampe
|
||||
- [ ] Rucksack/airbag max 35-45l
|
||||
- [ ] Blasenpflaster
|
||||
- [ ] Karabiner
|
||||
- [x] Handy
|
||||
- [x] Bargeld[[]]
|
||||
- [x] Taschentücher
|
||||
- [x] Panzer Tape
|
||||
- [x] Erste Hilfe Set
|
||||
- [x] Splint (Schiene)
|
||||
- [x] Biwaksack
|
||||
- [x] Sonnencreme
|
||||
- [x] Lipstick Sonne
|
||||
- [x] Schraubenzieher tool
|
||||
- [x] Kleiner Riemen
|
||||
- [x] Kabelbinder
|
||||
- [x] Stirnlampe
|
||||
- [x] Rucksack/airbag max 35-45l
|
||||
- [x] Blasenpflaster
|
||||
- [x] Karabiner
|
||||
- [ ] Reepschnur
|
||||
- [ ] Heissleim Patrone
|
||||
- [ ] Feuerzeug
|
||||
- [x] Heissleim Patrone
|
||||
- [x] Feuerzeug
|
||||
- [ ] Fernglas
|
||||
- [ ] Plastiksäche / Drybag
|
||||
- [x] Plastiksäche / Drybag
|
||||
# Elektronik
|
||||
Sind alle Geräte geladen am Abend vorher?
|
||||
- [ ] Ladekabel für alle Geräte
|
||||
- [ ] Handy
|
||||
- [ ] Ersatzbatterien
|
||||
- [ ] Powerbank
|
||||
- [ ] Gps Uhr
|
||||
- [x] Ladekabel für alle Geräte
|
||||
- [x] Handy
|
||||
- [x] Ersatzbatterien
|
||||
- [x] Powerbank
|
||||
- [x] Gps Uhr
|
||||
- [ ] Kamera
|
||||
|
||||
|
||||
|
||||
## Lager
|
||||
- [ ] Trainerhose
|
||||
- [x] Trainerhose
|
||||
- [ ] lange jogging hose
|
||||
- [ ] sport shorts
|
||||
- [ ] sport tshirt
|
||||
|
||||
@@ -7,7 +7,9 @@ tags: [excalidraw]
|
||||
==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠==
|
||||
|
||||
|
||||
# Text Elements
|
||||
# Excalidraw Data
|
||||
|
||||
## Text Elements
|
||||
PX4 Info Node ^SHjaC7GH
|
||||
|
||||
getCurrentPose ^bntLlwqf
|
||||
@@ -40,572 +42,78 @@ MoveSmoothActionServer ^jNLQaaLq
|
||||
|
||||
MoveSmoothAction ^jLt0dnKk
|
||||
|
||||
|
||||
# Embedded files
|
||||
## Embedded Files
|
||||
53a29778b62e67d5d6ee80cf34453e58bcb88187: [[Pasted Image 20231012160459_976.png]]
|
||||
|
||||
%%
|
||||
# Drawing
|
||||
```json
|
||||
{
|
||||
"type": "excalidraw",
|
||||
"version": 2,
|
||||
"source": "https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag/1.9.20",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 70,
|
||||
"versionNonce": 1706906056,
|
||||
"isDeleted": false,
|
||||
"id": "2x2FIJ03wD79stOrQPI2T",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 2,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 563.2296109199522,
|
||||
"y": -641.5260467529299,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 664.8743286132816,
|
||||
"height": 818.5408325195318,
|
||||
"seed": 1357369544,
|
||||
"groupIds": [
|
||||
"eTVsuRlQRF9sgbnV876J0",
|
||||
"lE9VKsMY2iriwU-c_Iog-"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 3
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1697119406023,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 91,
|
||||
"versionNonce": 1557106360,
|
||||
"isDeleted": false,
|
||||
"id": "wgrd0rloD6B_tv4cvqt1Q",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 2,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 658.3203702402645,
|
||||
"y": -595.8825224970703,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 480.7786254882816,
|
||||
"height": 60.85806274414085,
|
||||
"seed": 1672494792,
|
||||
"groupIds": [
|
||||
"eTVsuRlQRF9sgbnV876J0",
|
||||
"lE9VKsMY2iriwU-c_Iog-"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 3
|
||||
},
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "SHjaC7GH"
|
||||
}
|
||||
],
|
||||
"updated": 1697119406023,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 60,
|
||||
"versionNonce": 1153423560,
|
||||
"isDeleted": false,
|
||||
"id": "SHjaC7GH",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 2,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 767.9396481943663,
|
||||
"y": -587.9534911249999,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 261.5400695800781,
|
||||
"height": 45,
|
||||
"seed": 1070409160,
|
||||
"groupIds": [
|
||||
"eTVsuRlQRF9sgbnV876J0",
|
||||
"lE9VKsMY2iriwU-c_Iog-"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1697119406023,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 36,
|
||||
"fontFamily": 1,
|
||||
"text": "PX4 Info Node",
|
||||
"rawText": "PX4 Info Node",
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "wgrd0rloD6B_tv4cvqt1Q",
|
||||
"originalText": "PX4 Info Node",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 31
|
||||
},
|
||||
{
|
||||
"id": "RRuBk1mpSeCly4Kvfa79J",
|
||||
"type": "diamond",
|
||||
"x": 556.250027179718,
|
||||
"y": -474.53338623046875,
|
||||
"width": 340.2777099609375,
|
||||
"height": 94.3055419921875,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"groupIds": [
|
||||
"lE9VKsMY2iriwU-c_Iog-"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"seed": 131086280,
|
||||
"version": 102,
|
||||
"versionNonce": 1247606712,
|
||||
"isDeleted": false,
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "bntLlwqf"
|
||||
}
|
||||
],
|
||||
"updated": 1697119406023,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"id": "bntLlwqf",
|
||||
"type": "text",
|
||||
"x": 650.629536151886,
|
||||
"y": -439.9570007324219,
|
||||
"width": 151.3798370361328,
|
||||
"height": 25,
|
||||
"angle": 0,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"groupIds": [
|
||||
"lE9VKsMY2iriwU-c_Iog-"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"seed": 1735610568,
|
||||
"version": 73,
|
||||
"versionNonce": 1339654088,
|
||||
"isDeleted": false,
|
||||
"boundElements": null,
|
||||
"updated": 1697119406023,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"text": "getCurrentPose",
|
||||
"rawText": "getCurrentPose",
|
||||
"fontSize": 20,
|
||||
"fontFamily": 1,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"baseline": 17,
|
||||
"containerId": "RRuBk1mpSeCly4Kvfa79J",
|
||||
"originalText": "getCurrentPose",
|
||||
"lineHeight": 1.25
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 50,
|
||||
"versionNonce": 1609226952,
|
||||
"isDeleted": false,
|
||||
"id": "4QXgkAkRFkLPAcD8t0Sgc",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 2,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": -650.6871371269228,
|
||||
"y": -597.4427185058596,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 664.8743286132816,
|
||||
"height": 818.5408325195318,
|
||||
"seed": 2101748664,
|
||||
"groupIds": [
|
||||
"Hul-uvlemt_cI9_Fp3WrH"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 3
|
||||
},
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "5knELniv"
|
||||
}
|
||||
],
|
||||
"updated": 1697123064116,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 228,
|
||||
"versionNonce": 307511752,
|
||||
"isDeleted": false,
|
||||
"id": "5knELniv",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 2,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": -645.6871371269228,
|
||||
"y": -592.4427185058596,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 552.638427734375,
|
||||
"height": 420,
|
||||
"seed": 691596472,
|
||||
"groupIds": [
|
||||
"Hul-uvlemt_cI9_Fp3WrH"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1697123064116,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "\n\n\n\n- handle_goal\n- handle_cancel\n- handle_accepted\n\nThe important part is execute:\n- for loop through trajectory and send \noffboard commands to px4\n",
|
||||
"rawText": "\n\n\n\n- handle_goal\n- handle_cancel\n- handle_accepted\n\nThe important part is execute:\n- for loop through trajectory and send offboard commands to px4\n",
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": "4QXgkAkRFkLPAcD8t0Sgc",
|
||||
"originalText": "\n\n\n\n- handle_goal\n- handle_cancel\n- handle_accepted\n\nThe important part is execute:\n- for loop through trajectory and send offboard commands to px4\n",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 409
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 68,
|
||||
"versionNonce": 553175240,
|
||||
"isDeleted": false,
|
||||
"id": "q_MPWFFrVxrxtrzAUTaaJ",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 2,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": -555.5963778066103,
|
||||
"y": -551.1047057246094,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 480.7786254882816,
|
||||
"height": 60.85806274414085,
|
||||
"seed": 1038783928,
|
||||
"groupIds": [
|
||||
"Hul-uvlemt_cI9_Fp3WrH"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 3
|
||||
},
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "jNLQaaLq"
|
||||
}
|
||||
],
|
||||
"updated": 1697123064116,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 41,
|
||||
"versionNonce": 393506760,
|
||||
"isDeleted": false,
|
||||
"id": "jNLQaaLq",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 2,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": -528.4351381825868,
|
||||
"y": -543.175674352539,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 426.4561462402344,
|
||||
"height": 45,
|
||||
"seed": 8330936,
|
||||
"groupIds": [
|
||||
"Hul-uvlemt_cI9_Fp3WrH"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1697123064116,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 36,
|
||||
"fontFamily": 1,
|
||||
"text": "MoveSmoothActionServer",
|
||||
"rawText": "MoveSmoothActionServer",
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "q_MPWFFrVxrxtrzAUTaaJ",
|
||||
"originalText": "MoveSmoothActionServer",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 31
|
||||
},
|
||||
{
|
||||
"id": "T_jgB4iG3mlWPyahBp9rA",
|
||||
"type": "image",
|
||||
"x": -1216.7221102714539,
|
||||
"y": -607.1722717285156,
|
||||
"width": 349,
|
||||
"height": 358,
|
||||
"angle": 0,
|
||||
"strokeColor": "transparent",
|
||||
"backgroundColor": "transparent",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"seed": 1488109256,
|
||||
"version": 105,
|
||||
"versionNonce": 76913080,
|
||||
"isDeleted": false,
|
||||
"boundElements": null,
|
||||
"updated": 1697119498449,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"status": "pending",
|
||||
"fileId": "53a29778b62e67d5d6ee80cf34453e58bcb88187",
|
||||
"scale": [
|
||||
1,
|
||||
1
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 127,
|
||||
"versionNonce": 605752520,
|
||||
"isDeleted": false,
|
||||
"id": "oKD7end-LC_VdRYXouRuv",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 2,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": -659.7703280448916,
|
||||
"y": 338.61279296874955,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 664.8743286132816,
|
||||
"height": 818.5408325195318,
|
||||
"seed": 193154488,
|
||||
"groupIds": [
|
||||
"n-mVf4NySQdfVIenFRlup"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 3
|
||||
},
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "CMXgBmzj"
|
||||
}
|
||||
],
|
||||
"updated": 1697122375648,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 735,
|
||||
"versionNonce": 534342856,
|
||||
"isDeleted": false,
|
||||
"id": "CMXgBmzj",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 2,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": -654.7703280448916,
|
||||
"y": 343.61279296874955,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 653.0186767578125,
|
||||
"height": 595,
|
||||
"seed": 172021432,
|
||||
"groupIds": [
|
||||
"n-mVf4NySQdfVIenFRlup"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1697122769534,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "\n\n\n\n- This class implements the Action client that \nsets the goal, and has the callbacks for \nreceiving feedback and the result. It inherits \nfrom the baseclass RosActionNode which itself\ninherits from the Behaviortree library, meaning \nit implement a Behaviortree action.\n\n- parent class calls setGoal and then\n\n- Uses the client to call the server through \nasync_send_goal\n\n",
|
||||
"rawText": "\n\n\n\n- This class implements the Action client that sets the goal, and has the callbacks for receiving feedback and the result. It inherits from the baseclass RosActionNode which itself inherits from the Behaviortree library, meaning it implement a Behaviortree action.\n\n- parent class calls setGoal and then\n\n- Uses the client to call the server through async_send_goal\n\n",
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": "oKD7end-LC_VdRYXouRuv",
|
||||
"originalText": "\n\n\n\n- This class implements the Action client that sets the goal, and has the callbacks for receiving feedback and the result. It inherits from the baseclass RosActionNode which itself inherits from the Behaviortree library, meaning it implement a Behaviortree action.\n\n- parent class calls setGoal and then\n\n- Uses the client to call the server through async_send_goal\n\n",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 584
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 143,
|
||||
"versionNonce": 672151224,
|
||||
"isDeleted": false,
|
||||
"id": "j7vPLVyvo3dYqfyv5dahM",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 2,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": -563.2908968495792,
|
||||
"y": 386.33972176562474,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 480.7786254882816,
|
||||
"height": 60.85806274414085,
|
||||
"seed": 1248149432,
|
||||
"groupIds": [
|
||||
"n-mVf4NySQdfVIenFRlup"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 3
|
||||
},
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "jLt0dnKk"
|
||||
}
|
||||
],
|
||||
"updated": 1697122374080,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 119,
|
||||
"versionNonce": 927506360,
|
||||
"isDeleted": false,
|
||||
"id": "jLt0dnKk",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 2,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": -480.59964318746967,
|
||||
"y": 394.26875313769517,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 315.3961181640625,
|
||||
"height": 45,
|
||||
"seed": 1007978680,
|
||||
"groupIds": [
|
||||
"n-mVf4NySQdfVIenFRlup"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1697122374080,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 36,
|
||||
"fontFamily": 1,
|
||||
"text": "MoveSmoothAction",
|
||||
"rawText": "MoveSmoothAction",
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "j7vPLVyvo3dYqfyv5dahM",
|
||||
"originalText": "MoveSmoothAction",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 31
|
||||
}
|
||||
],
|
||||
"appState": {
|
||||
"theme": "light",
|
||||
"viewBackgroundColor": "#ffffff",
|
||||
"currentItemStrokeColor": "#1e1e1e",
|
||||
"currentItemBackgroundColor": "transparent",
|
||||
"currentItemFillStyle": "hachure",
|
||||
"currentItemStrokeWidth": 1,
|
||||
"currentItemStrokeStyle": "solid",
|
||||
"currentItemRoughness": 1,
|
||||
"currentItemOpacity": 100,
|
||||
"currentItemFontFamily": 1,
|
||||
"currentItemFontSize": 20,
|
||||
"currentItemTextAlign": "left",
|
||||
"currentItemStartArrowhead": null,
|
||||
"currentItemEndArrowhead": "arrow",
|
||||
"scrollX": 2797.031155109408,
|
||||
"scrollY": 1374.2330627441424,
|
||||
"zoom": {
|
||||
"value": 0.4999999999999996
|
||||
},
|
||||
"currentItemRoundness": "round",
|
||||
"gridSize": null,
|
||||
"gridColor": {
|
||||
"Bold": "#C9C9C9FF",
|
||||
"Regular": "#EDEDEDFF"
|
||||
},
|
||||
"currentStrokeOptions": null,
|
||||
"previousGridSize": null,
|
||||
"frameRendering": {
|
||||
"enabled": true,
|
||||
"clip": true,
|
||||
"name": true,
|
||||
"outline": true
|
||||
}
|
||||
},
|
||||
"files": {}
|
||||
}
|
||||
## Drawing
|
||||
```compressed-json
|
||||
N4KAkARALgngDgUwgLgAQQQDwMYEMA2AlgCYBOuA7hADTgQBuCpAzoQPYB2KqATLZMzYBXUtiRoIACyhQ4zZAHoFAc0JRJQgEYA6bGwC2CgF7N6hbEcK4OCtptbErHALRY8RMpWdx8Q1TdIEfARcZgRmBShcZQUebQBGAE5tAAYaOiCEfQQOKGZuAG1wMFAwMuh4cXRA7CiOZWD0sshGFnYuNAB2eP5y1tZOADlOMW4kzoA2eIBmCc6UxN7IQmYA
|
||||
|
||||
EUyoBGJuADMCMKWIEm4IHkweADEASQApFOmKVc7E5igAeVIARQAFK54AFSa5R2hHw+AAyrBGhJJLhsBpAkCBFBSGwANYIADqJHU3D4xWRqIxkJg0PQgg8SIgqL8kg44XyaB6BIgbDgcLUMDGKRSh2sDSqvJZmG4AFYJtNtDweIkpgskolRdLDly0M4JgAWeLaJUTFIauZKxIyxYs15EhAAYTY+DYpBOAGJ4ghnc6qZo4WjlDSOMRrbb7RIUdZmOz
|
||||
|
||||
ArkqRQcZJuBNNdoABydDXTHgJqaphPxCaHSQIQjKaTcLMJnUalIJ1OipKi6bxBOHMJbMbTUWdWaKjUaw7e4RwK7ERmoIrNSAIf4ANWYQgASvhPjOLi9lJoOBOkxM7kjIPgAKKJCcAaWYAFkAJo8QikQgUACqzmwAH0rmxlM4IASALqHHbkbID7gOCEMFDh9Yh6WYIdSmaCpEG4aYCQAX0OTRhF9XdgmyXIhwKb8WSEOBiFwTZtiZTpkwTSjaxlOZ
|
||||
|
||||
DiIDg0UA4D8DothsAxUjUD2fADhZQhfSwE5cDSXNQn+LAoAAGX4xi0G4sJimQ4poMgWA4IkGo6gFKl+nabhjUOXShhGKp4hSetEiSCYeE6Q4VnWYISN2fYEDsziIAob1iBSUhbVWCYACFHygegNWwegAEcoHiT4qRBMESTJKQ4QRJBGxRdEsWjPF0otRKqggCljlA4RCwgodmRgtkOVgbkhRg/kyXq8oRTQCZRVLVN7nmHhyx4TVRRVbhnFFRVEw
|
||||
|
||||
THglV6xJ5nmaZcsy/07UdV0XTSlkPXY3shF9JbA3QYMOFDXBwygSNsrQDUExSbRyPTSaromrMcxZPMCyLNqboTDqUms5MtXLb7GwQZsmTmaaNWefEYO2/tB0KAkx0nac5wXJdmBXNcNy3JYd33I9TwvK8b3vJ8XzfD9mjwmDf1wf9OKAkCWTA8ruBU1TKngpCULQ4gMKyHI8gR0d2Y59SDok7dlnc8EAAkACtcEtToAHFZcp5pEK/Q4CKIpyyIoq
|
||||
|
||||
jU1lWyWXo2TUEZlizbYjjnJ41y+IE1r0FweIqVhZhxMwKSZPthSyiUsoVNggrNh9nSmAGDpUCmQyo/aYYOFGS7q1TSH2zstYNlBriXLck45cV5W1bi0EIShArYXhER1pg81MuxYhcTQaHygb4lK5OIrthK2lWaZQ5quwTk6r5eomsOF3Jk6bREmmGbeseutsyGtUOtnxVpg1Sz4mmxID4WjE9pWta3RQz1tt2m1lqDcgjrDQXzubmNW6mHUF8siY
|
||||
|
||||
D54etOkG16+ZCxnVTsDXOZl5jli/s1SAsMBw4URhgZGs55yLmXKudckwcaIL3AeY855LzXjvA+Z8r53zaxZLTemTEmYwRZgyGh1sYKoR2nzTCgscLU3KLrYi4DyKPW+sbWiZs/ZoCtqxdiud5KOxppwKA4JCBGCqLMH8ciLh01BKqVAlVyjhxAegb4AANDUqArgcB2GwVAwxiB13KOQCg3t9EQCMSYsxFirFsBsVSPRABBIgygY4QDELkJgkdSBQ
|
||||
|
||||
HMAQPxBZAn6BIMQRohw9C5FwPxJgAEJCeVIN5XybB/JBRCmFSK0VYpD2vP4AgjiTguNMeYyx1jbE7jSbLIBH1tFSgAcw0IQQ0nwR0ZAXAQgoBsBnOERRVQURCBkeUfiNiXYQFwDwD2YkJLSQYv7BAilegh2OBIGcM4hABTRPEfQcBwRWnwDADUh56B7GeDcbxnMJCODppwXuwoxTig6TyGy8RnjdAbCyLRzhIYag/tMaY91pj6gmEmTp5Qowv3gu
|
||||
|
||||
WKU5F5gHz1PPf+uZWn6MSGC6FopRRah/n/eFAyJ6CiPlaG++0IBOjPo0iAm0vRgRPnfEMj8Iw/nLvlE41dUpUg7llJFg8zQZU7qSAqPcqQ0jKgwsVVV2Qj1qkyHkPYaRwwQaOCAuCCYEOJsQsmZCNZgC4ZAKhCAMmW2Yn3X0A9UDs1DnibmZoQacRmGZe61145tE4NyeaLIjIcCTinbRE1P6/26FnByCB9Z5wdjzVh/MsJCzQCOZootnVBklrjaW
|
||||
|
||||
JxVxSXwBQCKOxTVgC1lTHWhFeEev4ZRQRNFTYwXNowiRds5L5ydnMoS0xlle1WaIhNAcK3bL4u5Qtkli2lseeLaAuaPltVFDdayW8pjVkoi9GCwKUzJEVPMHk7Zeq/1NDBRFLdtHVm0NMZ4lY5oZjTDi96+jJrj20mgGBhUJU0oDKfVa7pL5stpScQ6x1TplwSl3GEKVa5Cu/U3C9/Sv15Sg+SG0xVmalTpAq7RQ9lWjzVZ+uB8N004PxvgomRDS
|
||||
|
||||
akIphQmmf4rUM1tZh1hDrxFur4a2OU4pAUwWDdwZMvro6htMkvHkSQEynpmdnRyUiu3MN5imjhhRzUQB4fGv5htG0mzokO9jLbbZycTSyPRJxlBxstCIU63w2BhFlZQKpEhzNQEs6QaztmmUWNyAopReJP1eagOouJlyxiHF8f4wJwTNj2l9RE9w0SAknDicQBJTKPRhHoqZZt5RklRDSaQa1EB9mHOOac85lpLnXNubge5VI7QFn4pUyWTmLNWc
|
||||
|
||||
FjZuzun6QtOfWMDpfIhkjLGb5tAkzpnLGdkJDU/bHFrIttIrZykTNPOqAgWojUmX8bQNWITicTJjDTNKDU4oUwxpzpxaRBcJAak+IY5QaIfFokXGiSS3wfHYFWAmKAKRwTKGwBBiuUr+UwcRNShDr9eDUr5RIGVfd5WQVCyyYeBHtHqpZBt7gn6XbqmXdoWF3Qb172/tKXj5RgWjVnl2X530UgdVGlu9u372XoAZf+i+W0gO/o5Q/E6T9Djnoh3G
|
||||
|
||||
MFSYUxpgfc9J9wDiz1jLBWKsNY6yk4EO6vEZk/lXSFxqvs8DhYwVlsBZwQh6CYSgI+bAVxEiPguHAaYmJSDqzo8CBj1r9N2N5g6p1allGuoU8m9h2FdfB0RmLMOC7Rz5okKKNEHBdySQ4IQeg5bK1lFU+pvhWnqI6ZEessRzGDOSIu/JmZk2JC4FFDNwdOfh2bMDmOmCXuQNh76Anf1rcZS7eMsnKoy62yEpmmd2ThfjMwV2egKPMe48J4B9D9AA
|
||||
|
||||
rYNg4upD8VKGgcw/Q+8uhWGHVIeR6q1Hn6McfqnsNAaeOkwzG6P1Y0j6gXDVGnEKnAKe/fVlNS5n9LVrnw2oB3m7/QNcrOn50X1rFLAlDbA1F/jhUlzaQgM/SbE4m/niHp0hjblgU1R11Ix1X13wEN2NyyFN3N0t2t1t3t1NVU0tRdzzzd1Yxw1d0gBYXQn9zTWHFTxrQ03rSNibS6wtjoN1UMyH14lkW83GTxCVwgACyC00UR3r2a3QAAB0OAFC
|
||||
|
||||
lCXBUBYRfRghHxlA2ACAFDnBVDrBUszdrAxB8BdD9D1CEBHw4QxA4ASJlD/g8xUBCBTk7Q6goBUAwx3CVhUAsA1shkEBkAzCLFSBUBbQ2RUB1A5VJAIjyB5Y1thlSAYBUADDUAwhfQFC2AdgdhUITpiBUA9B9B9ADDmAIjLE4BMANQFD7MHFZCIBlDlC9C1DDCtCdCVCmiNC8Au9TC2iDCNDrCEBbCth7DHDnC4BXDrB3DPCnCSjfDsB/DAiVDgj
|
||||
|
||||
Qi2BwjIisMYjcA4jag7QkiUi0i8jMjsjtDsl8iDAijfQSjhkPCKiqiwsJIEtAlggdhACg0mA4sokIsQM2QqRctUl6QCt3Ibs7sHsnsLgXs3sPsvsfs/s6tylGt8BHN5DFDkSzD2jLCWjujGjejLDOiTDUTsSrDsAbC7DkSHCEAnCXDwkJiPCTovCZjMA/DNgFi9Cliwi4AIjJAoiNitiEjdjfRUicgDisiciTiCjzjBxSjrjKiuAusEAespcmR+t
|
||||
|
||||
v8MtelLoFgBthlRlWARsYipk7IS9XYJgK8fY5sNlFsg968VtqR4iMcO8Y5v47SRMxhDQUgeAFho0+IZM40jNBCZl3IIpHwTxvhMQLgLhSAJxMBSAfZSAjAfFbx/hcBcAHkeVINV9Z8QcmVhVwccpl9MoZ9Cp19ZUt8cMd98M98zID9KVMdj914iUdRZQb1Ohro4wzJA1t078r0zJIZadOhepMVuxczj5gMJBWc1oAMOdf9hyDp74wM+cWQBduAro
|
||||
|
||||
bo7prJiVKI0xV5AFetPpEwfo/oux4hAZyVCoVc1VIUmyF4b8YZ0CSNhxEFsDcCTczcLcrcbc7cHcq1KFncmNaFqD7UcNPcVsEJNYk1GCBYA9MDM1g9s0JYI480jh3J5ZBhJJPhEzJIIok9HdIA0860M8hFssmkq9eDbQC8Nl9Se1S9OhjTfYq8Fta8ltLS51TM7TFzUCGAW8Q19s0BoUDRXT54B9vSBDxsEKTgkKUK0KMKUzAcko59QdByRUL02L
|
||||
|
||||
hV8zYcWN4cKo8MaotEKy31J5F1UARo0xtAUxl0eRBErolQ14DLiVJQ/lxRkxWxJoF438pyP9GVxzWVJyudpzOVeduV5zF8ICJhjKiVz8Oo3S6xX0tyFTUBjswFOJKxoV54Gc0DtdbyM1ygHyjcnzCDXySCPyU8fxvy20WN/yEdc9fz6DFMmDOFq09Z08BFM9hEW09MqCdx+CyLKE5EfNlEUrxC1ENEQtFVdFaiTw2BGBwR9AVj1B3sIlOBzlSBWh
|
||||
|
||||
qjESIAxqJqpq2AZrah2gFqlq7ifYHiTgotQlYtIl8BDqJBktUsfi5E/j0l/TAzgzQzwzIzozYz4zEzkykc4SOAmsI4JA1qEBJrprJBZqdqmA9rs85TcU+soqukVT6Q+kNShttSJlSA9Tu1BJS8ExqLTTO0HZzSShx0Th/hHx5ZlAAoNRCAVZph9B8BMRvgYBcBJAAo4BEhSAfFZ0CpnDogmVsc95sxbppR4gzJfljtnLb81Q9RZ4/lpRuhezvokC
|
||||
|
||||
+qFzuKd5oD9FWwxDD9UA4CmdXL/8/KXiukJzWE/8ZyADp9UNkoa45L654NF8kNlKrbVLN9+4SzNKVVtK0dry0raqvy6ZGMSrXayqhxeD4CxhHozJjRxQWK1U+rg0nSmQDQD5KI/kkN7JztOrfcwLU0/aYIcKxgODtNmryhW0KqmFS6Or8bfTkRiIhAhwIBEBfR+JlAINA7I9phFkZomzNBrIEA5hiBRRiAJgQZrpsAdht5xaEAOpNBsBNBU6kwhV
|
||||
|
||||
3AqgMqwB+k16sKjgDSFlEhcah1LsWRsBUQ4BGFCaQ4G8NIbSqzY7tErzm8/VOKu9YwuxCU95jyM7B8s6/STg2BDwnhBTnBJJLRHwJxiAZwzxDFhADlE8pL8zZLMz7bRUl87aV8koXbqD1LpDyhd8vbKz30daayDL2pkhyJ7g0x9Qrov4rKIVQC94oZZQRdFRjzhV39Ryv9jbPLTb9bzbDbn4L0hdEwHKxcZgNy+q3oYqSxZdKxJoFd6x4qxh54kC
|
||||
|
||||
uxKItcCIMC7ydUXB9AJwdgNRBgYBwRPhiAdgJwrgcgLg5wCIyCiqA7KDKrqR3cALEEL7UBgL6Ls62FwLmDV6s0XH504LoLR8IBLQTw7sAp9AjB5ZMLPz862CGqG0mqCLdVWr7GSKO1q9yKsbXZObRIB0TT96XIz7lsmKm8WgOKBMVFXiH7E7tEF4uxEhBEpNlgvT40D6R93IQmwmImonYGrb4G4MLRszW4odnbCy4dsNyrcMkcyzcHdKqV9KccwV
|
||||
|
||||
SHMwKHJNNz2zVbJQpgbJjQGHkwmGXLvK3K2dv8Tbr4jmDbwMgCkHNRJQ2wZoRbLJyxVz1axRFR5GyI3Tf5RdVGtVA9IAtGdG9GDGjGTGzGOALHfAT7N6KCfyK7IB6FJneCGDPHc6VM6ra1C68KuDs8eC2q+DSLq7hKAserRDVFchJChqpmZD/qkT6iVCHDvDsB8BQgSjRiaqOTySwbOB8iiBBYOTiIFCwg8hOXUAMTqBkj+TPZRX3B8AWUSjgiFC
|
||||
|
||||
ah8wzB6guJ3UWVJW8j1ByTAhpx8AoBtBTEvCOA8xrw8gFDfwDBRX0s1sWXIJUAZxbNuXOKbFUAKBJBzBoi1AMsdgFD+IzWfWuJUR9BRWAoEBYQzBXDAhySiBNByBEiJXshrAW7/WvDTkmDkjUBw3I32BwkY3kjtrOBtAGiaTTpeXWX8iCAeIBSoAVZtD8AtXOWUSVDbwwhLjHDmXCB+WrjZXRWwhFqmAOSoiFDQgYBk5Hx9jNCG3lDlraj6WzDGW
|
||||
|
||||
SjmXK32WvGO2uWi2OBeXu3cgBX3DhWN2xWG2JWUjpWdWq2wR5WuI7RUBlWE8W71WthNWUiL29XgJDXjWnDTWmAg2rXQ2L3bWV2HWnXmAXWGl3XPX4QnC8gggdhv3A2RX/2w2I3cAo382QZQjCB42ToYAk2Qh481W1AKSfAvGs2c20O82URMO4Q5qOAS3kS9CACK2HXZWSjhX62CAm2dWW29C23wgZW+W93e3q3+2Iah21jaRkjmBx2nwp2MTZ39q
|
||||
|
||||
oALr0Anijb773jzrPigxviklbr8tCtf7/7fRAHgHQHwHIHZwjdYSGtfqET52W3F3PXl37W2WM313RWXWd2e3YQD240j3xWm3z3O3q3r2lj73VXlAn3iAX3+S33wgP2jWrgTXEOFWQ2bXulgOSjQPwPPFySPWvWYPfWEPf2kP0uL2KP0PqPY3sOE28PUBk3COoviO13U1yPUOquC3aP2gGOzDmOsvL2a2OOG3uO8xePUB+Oj2u2e3LE+2L2B3Whh3
|
||||
|
||||
1ix2J35OZ3kSqRMt5S2ltQ4byhbXMsxQEwByGpBstSRDRt0bhLZksmFkAo97aLCn3GibGKCpNJbSqno4I6Tv77hMuLUBZQ+pFR1TPTY1Wmi8I90B5ZOh6BvhJIJwYB6A2BphiAzxS1Eeh7maTxLa0zrbBUF8kGlLv0VKxm1KJmNLpmtKx50cqyj8FnxRJQZQKwGGd57m2KtFIVgqIVF4/l2prJQVDnb4WdP80sf8uGLmeGrmAqkGlzbomzVzHpRH
|
||||
|
||||
XmdzvpmybIDyjyPnb6rpDz8VUxfn1HV6IBAXdH9HDHjHTHzHLHoWYmndbG4W7VwInGdUXG3HR0Npqr13/nfGrTmLAnELJJvtwJDxGJEZk8zUMX2DsWs8WqiL8W0mfTrvt6lYHv5snv3eLTdFffSn2KH6DtP0E7/vjvdR9QbIBLwfh9v6JB5ZA+Uhg/GJencf+mCfFKRncf0GEXizJnSyqfCM5nqyFnZfRomHsxt52xaxqH8UpR8dawL9v5qwkmWH
|
||||
|
||||
XK2HRezm/RuHfKpez1F86xRRr1FR55n9Rob1jzxGYDmHTz99/l0wfUWRiNtUYITfgXzewWreoXrH/bqFy7He2N8WUWlMIKLBSPvE04Ix9S6KTeFgS3SZtNgQ3VC7q4z6oSFBq2lJTicEBrA1NqoNLdnO1parVxqQNDaltTo7eJ7i2ndAMdRixVNNOKnCAFdUSSH19O/xQrND1h7w9EeyPVHuj3oCY9JA2PMpLZz+pOJ0BhArAcQNlLbd9Eu3Y8gd
|
||||
|
||||
1VKuMkMgyTUsNjRoY0R8yfVYKnzNKBxwA1MBZHADORRBNgbMYoNADzDZATg/iIsL0AYDdsKAAUMXucyF70osizgstFYLmJuZBYyXLIJCAtCsMReQIIJG1lyBeD9AdgtfmbU35zkcsQQqACEIuC8o+mGZAIe4NOghCfBjcB2m4JiFpDieozSkFkI8HBDNg+gJ1m7W74FDUhxQt4DM2p7RDChsQ4oRcAGrBYUBxglIZ4MaFwCdSbpCoR0KyCOIaBan
|
||||
|
||||
ZIdkOKGQhaSPiNzGwA9YhAHebQkYVkF3C+gJhqIaYbgHcgnQVhww+oSEOWFTD/gVpMCFsMqFZAwyAdJ1mSFdyFQj6NofAIYgOxZhUgeoWsJfggLLo24Vw1EGCDPD6Qd4xlQ8lmBSCTBUwcjYwUYBWL6AjBfGAgFMkxzXonhDTQmoEO2HFDShIdE4IcKsHegSApLVuM1AgBYjiAkIAYmKExHXhiAY1GxIsNwCaBggQlUkSQGZwhwAoNodyKQBXC4A
|
||||
|
||||
AAFFGglbcjeAfyCVjdFFAABKKkKMmUDAQTo6I9kVyOhQ8jZRvAeUYKJFGIj2h3mb9NULo6h0qC4hBjKMgEjXh6gkI8oDkGpG0juAY2JJEQBPqXcVB5QX6mYJtHCVhAUAQ7o6MOBFFSAGIUgIMADrmiru7ok6F6KpE0jc4Y2REXYB5LMBwQv1OABSIQDBizRRLKwd10YD/AVi+AI0SHm7iZBsBSSeusMn0D7DxYxFKuhky/IGBzkwQbAUmLNihBlO
|
||||
|
||||
21VMemNPrPcIAjgZgKaJpQhIfYJ4HIEIE0FBxxCoIcIGzC1iIQgAA===
|
||||
```
|
||||
%%
|
||||
@@ -9,7 +9,7 @@ tags:
|
||||
|
||||
|
||||
- [ ] loom videos
|
||||
- [ ] Simulator: Meta analyzer working principle and usage guide
|
||||
- [x] Simulator: Meta analyzer working principle and usage guide
|
||||
- [ ] Teststand: usage guide, example runs
|
||||
- [ ] Bms driver: usage guide
|
||||
- [x] Merge valentins Pull request
|
||||
@@ -18,6 +18,10 @@ tags:
|
||||
- [ ] BMS learning cycle
|
||||
- [ ] Sign contracts (stock options & employment)
|
||||
|
||||
documentation
|
||||
- [ ] confluence article about battery pack.
|
||||
- [ ] learnings from spotwelding
|
||||
- [ ] learnings from clamping mechanism
|
||||
|
||||
---
|
||||
home office tomorrow:
|
||||
@@ -42,11 +46,11 @@ home office tomorrow:
|
||||
- [ ] review system
|
||||
- [ ] ~~google drive system.~~
|
||||
- [ ] ~~OKRs for Vidit~~
|
||||
- [ ] Simulator
|
||||
- [ ] explain the meta data system in detail in a loom video
|
||||
- [ ] explain meta data analyzer and how to use it
|
||||
- [ ] explain meta data analyzer and how to extend it
|
||||
- [ ] merge the meta data analyzer
|
||||
- [x] Simulator
|
||||
- [x] explain the meta data system in detail in a loom video
|
||||
- [x] explain meta data analyzer and how to use it
|
||||
- [x] explain meta data analyzer and how to extend it
|
||||
- [x] merge the meta data analyzer
|
||||
- [ ] VPS
|
||||
- [ ] log portal
|
||||
- [ ] n8n
|
||||
@@ -55,7 +59,7 @@ home office tomorrow:
|
||||
- [ ] battery driver
|
||||
- [ ] teststand
|
||||
- [ ] autopilot?
|
||||
- [ ] flightcontroller?
|
||||
- [x] flightcontroller?
|
||||
- [ ] auto review system (active work)
|
||||
- [ ] teensy tester software stack.
|
||||
- [ ] hardware
|
||||
|
||||
20
99 Work/Jobhunt/OneSec Experience on LinkedIn.md
Normal file
20
99 Work/Jobhunt/OneSec Experience on LinkedIn.md
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
title: OneSec Experience on LinkedIn
|
||||
created_date: 2026-03-03
|
||||
updated_date: 2026-03-03
|
||||
aliases:
|
||||
tags:
|
||||
---
|
||||
# OneSec Experience on LinkedIn
|
||||
|
||||
ChatGPT Conversation: Job Titles for Resume (3.3.26)
|
||||
|
||||
|
||||
|
||||
|
||||
Backup Linkedin
|
||||
At the startup OneSec, I played a critical role in the development of autonomous drone technology for food delivery. I was responsible for developing the flight control software using a custom controller in C++ within the PX4 environment, developing high-level decision-making algorithms within ROS2 (localization, mapping, path-finding) and managing the overall robotics software platform, ensuring seamless system integration of various processes. My programming work, primarily in C++ and Python, involved various sensors, microcontrollers, embedded linux, AI accelerators on the edge, data analysis as well as some web development.
|
||||
|
||||
I analyzed complex datasets, including flight logs, wind tunnel data, and 6-DOF force torque sensor data, to optimize system performance and troubleshoot hardware issues. Additionally, I led the electrical hardware development, including requirement capture, managing the electronics team, conducting design reviews, and performing hardware integration testing.
|
||||
|
||||
On the hands-on side, I prototyped components using 3D printing, repaired drones after crashes, assembled and soldered electronics such as PCBs, sensors, and motors, enabling rapid development and testing cycles. Finally, I also contributed to the recruitment process, helping to build a strong technical team.
|
||||
17
Attachments/ESPSomfyRTS 2026-03-17T16_05_06.backup
Normal file
17
Attachments/ESPSomfyRTS 2026-03-17T16_05_06.backup
Normal file
@@ -0,0 +1,17 @@
|
||||
24, 76, 29, 2, 276, 7, 200, 3, 77, 1, 98, 170, 74,2DD6D8
|
||||
1,kueche , 1
|
||||
2,wohnzimmer , 2
|
||||
1,true , 1, 450761,top-links , 2, 0, 80, 58800, 57000, 2800, 46, 16597248, 82432, 0, 0, 0, 0, 0, 115, 0, 20.00000, 10.00000, 34.00000, 50.00000,false,false, 0, 1, 0, 0, 0, 0, 2
|
||||
2,true , 1, 953570,top rechts , 2, 0, 80, 58200, 57000, 2800, 1, 16662784, 11904159, 0, 0, 0, 0, 0, 34, 0, -1.00000, -1.00000, 45.00000, 50.00000,false,false, 0, 2, 0, 0, 0, 0, 2
|
||||
3,true , 1, 953571,unten links , 2, 0, 80, 58200, 57000, 2800, 1, 16728320, 82432, 0, 0, 0, 0, 0, 17, 0, -1.00000, -1.00000, 34.00000, 50.00000,false,false, 0, 3, 0, 0, 0, 0, 2
|
||||
4,true , 1, 953572,unten rechts , 2, 0, 80, 58200, 57000, 2800, 1, 16896, 82432, 0, 0, 0, 0, 0, 55, 0, -1.00000, -1.00000, 34.00000, 50.00000,false,false, 0, 4, 0, 0, 0, 0, 2
|
||||
5,true , 1, 953573,Tisch , 2, 0, 80, 59150, 58400, 1900, 43, 15373058, 15635202, 0, 0, 0, 0, 0, 9, 0, -1.00000, -1.00000, 42.00000, 50.00000,false,false, 0, 5, 0, 0, 0, 0, 1
|
||||
6,true , 1, 953574,türe , 2, 0, 80, 58400, 58150, 1600, 42, 15438594, 15635202, 0, 0, 0, 0, 0, 8, 0, -1.00000, -1.00000, 42.00000, 50.00000,false,false, 0, 6, 0, 0, 0, 0, 1
|
||||
7,true , 1, 953575,sitzplatz , 2, 0, 80, 59570, 58750, 1400, 45, 15504130, 15635202, 0, 0, 0, 0, 0, 10, 0, -1.00000, -1.00000, 35.00000, 50.00000,false,false, 0, 7, 0, 0, 0, 0, 1
|
||||
1, 0, 953569,all-4 , 0, 80, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,false, 2, 7
|
||||
2, 0, 953576,all-3 , 0, 80, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,false, 1, 14
|
||||
3, 0, 953577,all-7 , 0, 80, 7, 5, 6, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,false, 0, 16
|
||||
0, 0, 0, 0, 0, 0, 0
|
||||
"v2.4.7","storen-somfy","pool.ntp.org","CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00",true ,true
|
||||
1,true ,"192.168.1.225","192.168.1.1","255.255.255.0","62.2.24.162","62.2.17.60","mqtt://","ESPSomfyRTS", 1883,false,"","homeassistant", 0, 0, 0, 0, -1, 23, 18
|
||||
true , 0, 80, 18, 5, 23, 19, 13, 12, 433.420, 99.97, 47.60, 10
|
||||
0
Temporary/Untitled 4.md
Normal file
0
Temporary/Untitled 4.md
Normal file
Reference in New Issue
Block a user