# Code Snippets & Notes

Kleine Codeschnipsel, Kommandozeilenbefehle und andere Notizen

# Nextcloud WebDAV Link

```
https://sub.domain.de/remote.php/dav/files/USERNAME/Unterordner
```

oder

```
https://sub.domain.de/nextcloud/remote.php/webdav/USERNAME
```

oder

```
https://sub.domain.de/remote.php/webdav
> subdirectory dann
https://sub.domain.de/SUBDIRECTORY/remote.php/webdav
```

<p class="callout warning">BEISPIEL: https://wolke.folkerts.it/remote.php/dav/files/Eike/Joplin-Sync</p>

### Windows WebDAV Laufwerk hinzufuegen

#### SMB 1.0 / CIFS Client/Server aktivieren

Startmenue&gt;Windows-Features aktivieren oder deaktivieren&gt;Unterstuetzung fuer die SMB 1.0/CIFS-Dateifreigaben  
&gt; Alle drei ankreuzen:

[![image.png](https://bookstack.eike-f.de/uploads/images/gallery/2023-03/scaled-1680-/t24image.png)](https://bookstack.eike-f.de/uploads/images/gallery/2023-03/t24image.png)

danach

<p class="callout danger">NICHT AUF NETZLAUFWERK VERBINDEN</p>

<div drawio-diagram="53"><img src="https://bookstack.eike-f.de/uploads/images/drawio/2023-03/drawing-3-1678117727.png" alt="drawing-3-1678117727.png"/></div>

sondern

#### Netzwerkadresse hinzufuegen

<div drawio-diagram="56"><img src="https://bookstack.eike-f.de/uploads/images/drawio/2023-03/drawing-3-1678121971.png" alt="drawing-3-1678121971.png"/></div>

danach Benutzer und PW der Nextcloud eingeben, fertig

<div id="bkmrk--4" style="background:none;line-height:0px;overflow:hidden;padding:10px 5px;visibility:visible;opacity:1;width:auto;height:auto;display:none;"></div><div id="bkmrk--5" style="background:none;line-height:0px;overflow:hidden;padding:10px 5px 5px;visibility:visible;opacity:1;width:auto;height:auto;display:none;"></div>

# tar.gz entpacken

Linux zip gzip gunzip tar tarball archiv

```bash
tar -zxvf dateiname.tar.gz
```

[https://www.cyberciti.biz/faq/linux-unix-bsd-extract-targz-file/](https://www.cyberciti.biz/faq/linux-unix-bsd-extract-targz-file/)

-z gzip compression

-x execute

-v verbose

-f file

# ssh/sftp WinSCP Laufwerk verbinden (Windows)

sshfs

```
\\sshfs\ohuser@192.168.1.77\..\..\etc\openhab
```

# Windows 11 Autologin

Windows Anmeldung Windowsanmeldung Benutzername

## NETPLWIZ

WIN+R und

```
netplwiz
```

Haken entfernen:

[![image.png](https://wiki.folkerts.it/uploads/images/gallery/2023-07/scaled-1680-/n8Limage.png)](https://wiki.folkerts.it/uploads/images/gallery/2023-07/n8Limage.png)

Falls die Checkbox und Text nicht vorhanden sind, vorher eine Änderung in der Registry vornehmen:

### Regediteintrag 

```
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device
```

auf 0 setzen (vorher evtl 2)

[![image.png](https://wiki.folkerts.it/uploads/images/gallery/2023-07/scaled-1680-/oPPimage.png)](https://wiki.folkerts.it/uploads/images/gallery/2023-07/oPPimage.png)

# Thingsboard Device

Upload von Systeminformationen zu einem Thingsboard IoT Device:

```bash
#!/bin/bash

thingsboardAccessToken='kG..........Lj'

while :
do
  cpuUsage=$(top -bn1 | awk '/Cpu/ { print $2}')
  memUsage=$(free -m | awk '/Mem/{print $3}')

  curl -v -X POST -d "{\"Memory\": $memUsage}" https://thingsboard.cloud/api/v1/$thingsboardAccessToken/telemetry --header "Content-Type:application/json"
  curl -v -X POST -d "{\"CPU\": $cpuUsage}" https://thingsboard.cloud/api/v1/$thingsboardAccessToken/telemetry --header "Content-Type:application/json"
  
  sleep 10
done
```

# Telegrambot erstellen

<div id="bkmrk-chatid-rausfinden%3A-h"><div>BotFather bei Telegram suchen und </div><div>`/start`</div><div>schreiben</div></div><div id="bkmrk-"></div><div id="bkmrk-%2Fnewbot">`/newbot`</div><div id="bkmrk-schreiben-und-namen-">schreiben und Namen vergeben</div><div id="bkmrk--1"></div><div id="bkmrk--2"></div><div id="bkmrk-chatid-rausfinden%3A-h-1"><div>ChatID rausfinden:</div><div>https://api.telegram.org/bot&lt;token&gt;/getUpdates</div><div>https://api.telegram.org/bot62157:AAH[....................]q8-O6-3Bk/getUpdates</div>  
<div>Testnachricht per URL senden:</div><div>https://api.telegram.org/bot&lt;token&gt;/sendMessage?chat_id=&lt;chatId&gt;&amp;text=testing</div></div>

# Thingsboard Instance reset

<p class="callout danger">Vor einem geplantem Serverneustart oder wiederherstellen eines Servers aus einem Backup, immer den Thingsboard Docker Container herunterfahren. Dann spart man sich die Instanzprobleme und damit diesen Artikel</p>

[https://github.com/thingsboard/thingsboard/issues/2221#issuecomment-560313339](https://github.com/thingsboard/thingsboard/issues/2221#issuecomment-560313339)

[https://github.com/thingsboard/thingsboard/issues/3008#issuecomment-650076578](https://github.com/thingsboard/thingsboard/issues/3008#issuecomment-650076578)

Bei folgender Thingsboard Fehlermeldung...

```
Terminating application due to critical License Error ACTIVE_INSTANCES_CAPACITY_EXCEEDED(104)
```

oder (siehe unten bei Hilfe zu Fehlercode 107)

```
License Error: INVALID_LICENSE_CHECK_SECRET(107) - Invalid secret request sequence number!
```

oder oder (siehe unten bei Hilfe zu Fehlercode 105)

```
License Error: INSTANCE_NOT_FOUND(105) - Instance not found!
```

... hat das Lizenzportal von Thingsboard erkannt, dass mehrere Instanzen versuchen, ein und die selbe Thingsboard Lizenz zu verwenden. Das kann zB passieren wenn Docker sich verschluckt hat und ein neuer Thingsboard Container gestartet wurde, obwohl der andere noch lief, oder wenn der Hostserver von einem Backup wiederhergestellt wurde.

1. TB docker container stoppen
2. im License portal [https://license.thingsboard.io](https://license.thingsboard.io) unter Subscriptions den Subscription Plan finden &gt; 'Manage instances':[![image.png](https://wiki.folkerts.it/uploads/images/gallery/2024-05/scaled-1680-/U29image.png)](https://wiki.folkerts.it/uploads/images/gallery/2024-05/U29image.png)
3. Instanz aus der aktuellen Lizenz deaktivieren: [![image.png](https://wiki.folkerts.it/uploads/images/gallery/2024-02/scaled-1680-/7iGimage.png)](https://wiki.folkerts.it/uploads/images/gallery/2024-02/7iGimage.png)
    
    <p class="callout info">in einigen Fällen reicht es bereits aus, die Instanz du deaktivieren. Falls nicht, weitermachen:</p>
4. in tb docker container mit bash gehen und /usr/share/thingsboard/bin/instance-license.data löschen:  
    `rm -f /usr/share/thingsboard/bin/instance-license.data`
5. tb docker container wieder starten

Danach legt TB eine neue Instanz an:

[![image.png](https://wiki.folkerts.it/uploads/images/gallery/2024-02/scaled-1680-/195image.png)](https://wiki.folkerts.it/uploads/images/gallery/2024-02/195image.png)

<p class="callout warning">Bei Fehlercode 107 bzw. 105</p>

Offizielles Thingsboard Video zu dem Thema:  
[https://www.youtube.com/watch?v=2khu3RP0TGE&amp;t=73s](https://www.youtube.com/watch?v=2khu3RP0TGE&t=73s)

Wenn Fehlercode 107 kommt, kann es sein, dass die instance-license.data nicht im vorgesehenen Ordner auffindbar ist. In diesem Fall müssen die Instanzen im Thingsboard Lizenzportal nicht nur deaktiviert, sondern ganz gelöscht werden. Das ist nicht weiter tragisch, weil die Instanzen bei jeder neuen Instanz automatisch angelegt werden, solange genügend 'instance counts', also Anzahl erlaubter gleichzeiter Instanzen, zur Verfügung stehen (in meinem Fall 1).

Wenn keine /usr/share/thingsboard/bin/instance-license.data aufzufinden ist, könnte es an folgender Zeile in der docker-compose.yaml liegen:

```
TB_LICENSE_INSTANCE_DATA_FILE: /data/license.data
```

[![image.png](https://wiki.folkerts.it/uploads/images/gallery/2024-05/scaled-1680-/19mimage.png)](https://wiki.folkerts.it/uploads/images/gallery/2024-05/19mimage.png)

Diese Zeile gibt einen alternativen Speicherort für die instance-license.data an. In dem Fall heißt das Kommando, um die hinterlegte Lizenz zu 'vergessen' im Docker Container also

```
rm -f /data/license.data
```

Man kann auch das TB\_LICENSE\_SECRET in ein absichtlich falsches ändern und dann wieder zurück in's richtige. Dann wird auch die license.data neu angelegt, allerdings ist license.data löschen viel einfacher und richtiger.

# Speicherplatz in Treesize Form mit ncdu

[https://www.cyberciti.biz/open-source/install-ncdu-on-linux-unix-ncurses-disk-usage/](https://www.cyberciti.biz/open-source/install-ncdu-on-linux-unix-ncurses-disk-usage/)

[![image.png](https://wiki.folkerts.it/uploads/images/gallery/2024-05/scaled-1680-/DdUimage.png)](https://wiki.folkerts.it/uploads/images/gallery/2024-05/DdUimage.png)

Wenn die Festplatte voll ist, hilft eine Untersuchung mit ncdu, um herauszufinden, wo der Haken ist.

```
sudo apt update
sudo apt install ncdu
```

Beispiele um ncdu zu nutzen:

```
ncdu /etc/
ncdu /tmp/
ncdu /nfs
ncdu $HOME

ncdu / 
^ sucht überall, von Eike empfohlen
```

mit q beenden, mit Pfeiltasten tiefer in die Ordner reingehen. Rechte Pfeiltaste = eine Ebene weiter

# Thingsboard upgrade in Portainer

Um Thingsboard zu upgraden, muss das Start-CMD von start-tb.sh zu upgrade-tb.sh geändert werden. Mit einer 'normalen' docker-compose.yaml gibt man folgende Befehle ein:

```
docker pull thingsboard/tb-postgres
docker compose stop
docker run -it -v ~/.mytb-data:/data --rm thingsboard/tb-postgres upgrade-tb.sh
docker compose rm mytb
docker compose up
```

In Portainer hingegen ist das docker run Kommando so an sich nicht möglich. Daher muss der existierende Container dupliziert werden, um dann den CMD Wert des Containers ändern zu können.

1. Auf den existierende Container gehen (zb Stacks&gt;thingsboard&gt;thingsboard-mytbpe-1) und auf 'duplicate/edit':  
    <div drawio-diagram="117"><img src="https://wiki.folkerts.it/uploads/images/drawio/2024-05/drawing-4-1715626896.png" alt="drawing-4-1715626896.png"/></div>
2. Den neuen Container umbenennen, das Image auf die [nächst aktuellere Version](https://hub.docker.com/r/thingsboard/tb-pe/tags) ändern und den CMD Wert anpassen:  
    <div drawio-diagram="119"><img src="https://wiki.folkerts.it/uploads/images/drawio/2024-05/drawing-4-1715627017.png" alt="drawing-4-1715627017.png"/></div>
    
    <div drawio-diagram="122"><img src="https://wiki.folkerts.it/uploads/images/drawio/2024-05/drawing-4-1715627145.png" alt="drawing-4-1715627145.png"/></div>
3. Container deployen:  
    <div drawio-diagram="123"><img src="https://wiki.folkerts.it/uploads/images/drawio/2024-05/drawing-4-1715627228.png" alt="drawing-4-1715627228.png"/></div>
4. Falls Request failed with status code 500 oder Request failed with status code 400, muss der alte Container oder sogar das ganze Stack erst gestoppt werden, weil auf das gleiche Volume und Network zugegriffen wird:  
    <div drawio-diagram="129"><img src="https://wiki.folkerts.it/uploads/images/drawio/2024-05/drawing-4-1715627743.png" alt="drawing-4-1715627743.png"/></div>
5. Jetzt sollte der neue modifizierte Container deployt werden können. In den Logs kann man den Progress sehen:  
    <div drawio-diagram="127"><img src="https://wiki.folkerts.it/uploads/images/drawio/2024-05/drawing-4-1715627491.png" alt="drawing-4-1715627491.png"/></div>
6. Zum Schluss einfach wieder den Container stoppen und entfernen und wieder das reguläre Stack starten, das dann den ursprünglichen Container startet. Vorher noch in der docker-compose.yaml die neue Imageversion anpassen:  
    <div drawio-diagram="128"><img src="https://wiki.folkerts.it/uploads/images/drawio/2024-05/drawing-4-1715627578.png" alt="drawing-4-1715627578.png"/></div>

# Bitwarden Subdomain URI

[https://community.bitwarden.com/t/subdomain-uri-matching/33906](https://community.bitwarden.com/t/subdomain-uri-matching/33906)

`^https://[a-zA-Z0-9]+\.appname\.company\.com`

# Windows Aero-Shake deaktivieren

1. Gruppenrichtlinien starten
2. Benutzerkonfiguration
3. Desktop
4. Richtlinie "Aero Shake-Mausbewegung zum Minimieren von Fenstern deaktivieren" öffnen und aktivieren

[![image.png](https://wiki.folkerts.it/uploads/images/gallery/2024-07/scaled-1680-/czQimage.png)](https://wiki.folkerts.it/uploads/images/gallery/2024-07/czQimage.png)

keywords   
alle fenster minimieren minimiert schütteln

# tmux

## TMUX Cheatsheet &amp; conf

[https://mutelight.org/practical-tmux](https://mutelight.org/practical-tmux)

#### ~/.tmux.conf

```bash
# Ändere Präfix von STRG+B zu STRG+A
set-option -g prefix C-a
bind-key C-a last-window

set -g mouse on
setw -g aggressive-resize on
```

<table id="bkmrk-shortcut-beschreibun" style="border-collapse:collapse;width:56.9048%;height:234px;"><colgroup><col style="width:36.0313%;"></col><col style="width:63.9687%;"></col></colgroup><tbody><tr><td class="align-center">**Shortcut**</td><td class="align-center">**Beschreibung**</td></tr><tr><td>STRG+A, "</td><td>Split vertikal</td></tr><tr><td>STRG+A, %</td><td>Split horizontal</td></tr><tr><td>STRG+A, ;</td><td>letztes Pane</td></tr><tr><td>STRG+A, c</td><td>Neues Fenster</td></tr><tr><td>STRG+A, p/n</td><td>Previous/Next Fenster</td></tr><tr><td>STRG+A, &amp;</td><td>Schließe Fenster</td></tr><tr><td>  
</td><td>  
</td></tr></tbody></table>

# WLED Error connecting SerialPort

# <bdi class="markdown-title HeaderViewer-module__issueTitle--JbH7o">failed to execute 'open' on 'serialport': failed to open serial port.</bdi>

```
sudo setfacl -m u:eix:rw /dev/ttyUSB0

```

[https://github.com/esphome/issues/issues/4525#issuecomment-2676978792](https://github.com/esphome/issues/issues/4525#issuecomment-2676978792)