Grafana TV-Mode: Einblenden „Variablen Dropdown Box“

Ich habe für meine Energie-Verwaltung ein Grafana-Dashboard gebaut (Grafana Version 7.5.10). Dabei lässt sich über ein Variablen-Dropdown die Sicherung auswählen (Sehr cooles Grafana-Feature). Das Dashboard binde ich so als iFrame in einer anderen Visualisierung ein. Dafür bietet Grafana verschiedene View-Modi an. Ich vernde den TV-Modus. Dabei werden die Grafana-Menu Icons ausgeblendet.

Leider blendet Grafana im TV-Modus auch diese Dropdown Liste der Variablen mit aus:

Eine Lösung dafür habe ich hier gefunden:

Unter dem Folder

/usr/share/grafana/public/build/

findet man zwei css-Dateien

grafana.dark.<nummer>.css 
grafana.light.<nummer>.css

Bei diesen beiden Files folgendes anhängen

.view-mode--tv .submenu-controls{display: flex !important}

Nun wird die Variablen Drobdown Liste auch im TV-Mode angezeigt:

=> ACHTUNG: Ctrl+F5 nicht vergessen. Sonst wird womöglich noch das alte CSS geladen 😉

Rasperry Pi SD Karte klonen

Hier beschreibe ich, wie man eine SD Karte eines Raspberry PIs aus dem laufenden Betrieb heraus klonen kann

Klone aus dem laufenden Betrieb

Siehe dazu auch den Forum-Eintrag https://forums.raspberrypi.com

  • Raspi mit angeschlossenem Card-Reader (inkl. darin enthaltener neuer SD Karte) starten
  • Anschliessend https://github.com/framps/rpi-clone.git installieren
    Original Repo war https://github.com/billw2/rpi-clone.git. Aber das wird nicht mehr unterhalten.
  • $ git clone https://github.com/framps/rpi-clone.git
    $ cd rpi-clone

Übersicht über die angeschlossenen Disks

lsblk -o NAME,FSTYPE,UUID,PARTUUID


In meinem Beispiel ist die im Raspi installierte SD-Karte „mmcblk0“ und die SD-Karte im USB Card-Reader „sdb“. Jetzt die SD Karte klonen

sudo ./rpi-clone -f sdb

Dies hat den schönen nebenefekt, dass man den Clone auch direkt auf eine kleinere Karte schreiben kann, sofern der genutzte Speicher im Ursprungslaufwerk die Kapazität des Ziellaufwerks nicht übersteigt.

Nun noch überprüfen ob die PARTUUIDs korrekt in cmdline und fstab gesetzt sind. Hierfür kann ein Tool verwendet werden

wget https://raw.githubusercontent.com/framps/raspberryTools/master/syncUUIDs.sh
chmod +x syncUUIDs.sh

sudo ./syncUUIDs.sh /dev/sdb
--- Root PARTUUID 8e8f4b9d-02 already used in /dev/sda1/cmdline.txt
--- Boot PARTUUID 8e8f4b9d-01 already used in /dev/sda2/etc/fstab
--- Root PARTUUID 8e8f4b9d-02 already used in /dev/sda2/etc/fstab

Hint Passwort

Beim letzten Clone hat es das Passwort des Sudo-Users „zerstört“ bzw. ich konnte mich auf der geklonten SD Karte nicht anmelden. Hiermit kann man das Passwort reseten (Ich habe Methode 3 benutzt): https://forums.raspberrypi.com/viewtopic.php?t=319398

Fusion360 Grafik nach sweethome3d

  • Wenn Materialien in Sweethome3d verändert werden sollen, müssen die zu verändernden Bereiche als Komponente in Fusion360 vorhanden sein.
  • Anschliessend in Funsion360 > Export > als STEP exportieren
  • Dann das File in FREECAD importieren
  • Ctrl – A (alles markieren)
  • Nun FreeCAD > Exportieren > als Collada (dae) File
  • Das File nun in Sweethome 3d importieren. Nun können die Farben der Komponenten angepasst werden.

Lyrion Music Server

Als Sonos-User der allerersten Generation war ich begeistert von der Flexibilität und Einfachheit dieses Systems. Nach und nach haben sich die Wolken am Sonos-Himmel verdichtet (siehe Sonos: Gut zu wissen) . Deswegen habe ich mich nach einer Alternative ungeschaut und wurde bei Lyrion Music Server (ehem. Logitech Media Server) fündig.

Das Sonos-System war damals revolultionär. Die Kombination von „Software und Lautsprecher“ macht es unglaublich flexibel. Der grosse Vorteil ist aber geichzeitig auch ein Nachteil. Da sich die Software weiter entwickelt (aus firmenpolitischen Gründen oder auch tatsächlich für neue gute Funktionen), wird auch an die Hardware (in diesem Falle an Prozessor und Arbeitsspeicher) neue Anforderungen gestellt. Die Hardware kann dann irgendwann nicht mehr mithalten und muss ersetzt werden. Dazu kommt dann noch der Fakt, dass auch Sonos am Markt bestehen muss und auf neue Verkäufe angewiesen ist. Das alles ist nicht wirklich nachhaltig.

Meine 10 Sonos-Boxen habe ich deswegen verkauft und mit dem Erlös durch folgendes Setting ersetzt:

  • 10x JBL Control ONE Boxen (passiv) mit Raspberry Pi 3 inkl. HifiBerry
  • Auf den Raspis läuft bei mir Max2Play.
    => Für versiertere User kann auch einfach ein Squeezeplayer installiert werden.
  • 1x LMS auf einem Docker Container
    => Es kann aber auch gerne auf einem der Max2Play Installationen einfach ein Lyrion Music Server „per Mausklick“ gestartet werden.
    => Oder man nimmt sich einen weiteren Raspi und installiert einen dedizierten Lyrion Music Server darauf. Für Installation siehe weiter unten.

Im Prinzip habe ich mir einfach eine Squeezebox gebaut. Ich hätte mir auch einfach eine auf Ricardo besorgen können. Aber ich wollte etwas flexibleres. Der HifiBerry Amp2 liefert 60Watt Leistung. Also genügend um einfache passive Lautsprecher damit zu betreiben. Das ganze kann man als Stereo- oder auch als Mono-Setting konfigurieren.

Wie alle Lösungen hat auch mein Setting Vor- und Nachteile:

  • + Super flexibel, Gruppierungen genau wie bei Sonos möglich
  • + Dank OpenSource wird das System wird auch in 10 Jahren noch genauso lauffähig sein
  • + Keine lästigen „Feature Updates“
  • + Es kann jeder Music-Stream integriert werden. Meine Radio-Streams starten alle direkt ohne lästige Werbe-Jingles
  • + Spotifiy integration
  • + Sehr aktive Community
  • – Initialaufwand und etwas technisches Flair nötig

Mein Setting sieht in „Real Life“ folgendermassen aus:

Noch ein Blick auf die Software Web-Oberfläche, welche auch als auch als App verfügbar ist:

Installation LMS auf einem Raspberry Pi

Für jene die den Lyrion Music Server nicht über eine Max2Play Installation betreiben möchten (wie ich) hier noch die Beschreibung, wie dieser auf einem weiteren Raspberry Pi installiert werden kann.

Voraussetzung:

  • Raspberry Pi OS ist installiert
  • SSH Zugang ist eingerichtet

OS aktualisieren

sudo apt-get update && sudo apt-get dist-upgrade

Audio-Formate installieren

sudo apt-get install libsox-fmt-all libflac-dev libfaad2 libmad0

Download LMS

Die Versionen gibt es hier. Für den Raspi 4 brauchen wir die ARM Verison.

cd 
wget http://downloads.slimdevices.com/nightly/8.3/lms/fe81659879fef1a51537fb579b8e57b6a7b987d9/logitechmediaserver_8.3.0~1630708871_arm.deb
sudo apt install ./logitechmediaserver_8.3.0~1630708871_arm.deb

Log überprüfen, ob alles ok installiert wurde

tail -n 100 /var/log/squeezeboxserver/server.log

Links

Octopi über Spacelynk (lua) ausschalten

Ich betreibe meinen 3D Drucker über einen Octopi. Die ganze Printlandschaft kann ich über einen Shelly-Switch einschalten. Das ausschalten ist aber etwas kniffliger, weil Octopi zuerst sauber ausgeschaltet (shutdown) werden muss, bevor der Shelly-Switch den Strom komplett ausschalten kann.

 

Dazu verwende ich die API, welche von Octopi zu verfügung gestellt wird:

  • API CORS muss aktiviert sein
  • User muss über System rechte verfügen
  • API-Key muss unter dem User erstellt werden. Dieser kann dann für den Post-Request verwendet werden

Folgender Postrequest restartet den server:

curl --location --request POST 'http://octopi.home.arpa/api/system/commands/core/reboot?Host=spacelynk.home.arpa' \

--header 'X-Api-Key: xxxxxxxxxx'

 

Opnsense: VPN Client wechseln

Ich betreibe auf der Opnsense einen OpnVPN Client, der sich mit einem VPN-Anbieter verbindet. Der VPN-Anbieter bietet mehrere Server an, auf welche man connecten kann. Diese können hier definiert werden:

Der VPN-Anbieter ist als Gateway konfiguriert. Um sicherzustellen, dass das Gateway den korrekten Client verwendet, muss dieser in den Assignments zugewiesen werden. Wobei das System pro konfigurierten Client automatisch ein „Network-Port“ erstellt. In diesem Beispiel ist mit „ovpnc3“ die „ExpressVPNClient Switzerland1“ gemeit. Das muss man leider wissen:

  • „ovpn“ = es handelt sich um openvpn
  • c = es handelt sich um einen client (s wäre server)
  • 3 = fortlaufende Nummer.

Grafana/Influxdb/Telegraf/Chronograf

Installation auf einem Armbian, 21.02.3 Focal

Installation Influxdb

Installation wird auch hier beschrieben: https://docs.influxdata.com/influxdb/v1.8/introduction/install/

sudo wget -qO- https://repos.influxdata.com/influxdb.key | gpg --dearmor > /etc/apt/trusted.gpg.d/influxdb.gpg
export DISTRIB_ID=$(lsb_release -si); export DISTRIB_CODENAME=$(lsb_release -sc) 
sudo echo "deb [signed-by=/etc/apt/trusted.gpg.d/influxdb.gpg] https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" > sudo /etc/apt/sources.list.d/influxdb.list

Influxdb installieren

sudo apt-get update && sudo apt-get install influxdb 
sudo service influxdb start

Version auf „hold“ setzen

Bei Influx scheint die Qualität nicht sehr hoch. Nach einem Update von Version 1.8.6 auf 1.8.9 lief die Influxdb nur noch sehr langsam und es hagelte „connection refused“ Fehler. Ich habe deswegen einen downgrade auf die Version 1.8.6 (Ressource) durchgeführt und diese Version nun „fixiert“

wget https://dl.influxdata.com/influxdb/releases/influxdb_1.8.6_armhf.deb
sudo dpkg -i influxdb_1.8.6_armhf.deb
sudo apt-mark hold influxdb

Mit Installation fortfahren

Nun kann auf die Influx-Shell zugegriffen werden

influx

Benutzer anlegen

CREATE USER "admin" WITH PASSWORD '<adminpassword>' WITH ALL PRIVILEGES
CREATE USER "spacelynk" WITH PASSWORD '<userpassword>'

Datenbank anlegen und Berechtigung erteilen

CREATE DATABASE "knxdb"
GRANT ALL ON "knxdb" TO "user"

Influxdb konfigurieren

Das Konfig-File der Influx-DB liegt unter /etc/influxdb/…

sudo vi /etc/influxdb/influxdb.conf

Sicherstellen, dass folgende Punkte gesetzt sind:

[http] 
enabled = true 
bind-address = ":8086" 
auth-enabled = true
log-enabled = true 
write-tracing = false 
pprof-enabled = true 
https-enabled = false 
https-certificate = "/etc/ssl/influxdb.pem"
flux-enabled = true

Service restarten

sudo service influxdb restart

Nachtrag: Installation Influxdb auf armbian 32Bit (cannot allocate memory)

Die Influxdb lief nun x Monate. Nach einiger Zeit viel auf, dass das System heiss lief (>80°C) und im /var/log/syslog folgende Fehlermeldung erschien:

Jun 1 10:40:42 odroidxu4 influxd[24423]: ts=2022-06-01T08:40:42.988192Z lvl=info msg="Error replacing new TSM files" log_id=xxxx engine=tsm1 tsm1_level=1 tsm1_strategy=level trace_id=0aobcfkW000 op_name=tsm1_compact_group db_shard_id=654 error="cannot allocate memory"

Hier handelt es sich um ein InfluxDB-ARM-32-Bit-Fehler. Influx besteht darauf, die gesamte Datenbank in den Speicher abzubilden ist, was fehlschlägt, wenn die Datenbankgröße größer als die adressierbare Speichergröße ist (2 GB auf 32-Bit-Kerneln, ~ 3,6 GB auf 64-Bit-Kerneln, mit 32-Bit-OS).

Da ich ein 32Bit OS auf einem 32Bit-Kernel betreibe, stosse ich auf diesen Fehler, der das gesamte System instabil macht. Teilweise enstanden OS-Freezes daraus.

Fix

Wie hier beschreiben, existiert ein Fix. Ablauf:

Installation go

Als erstes muss auf dem armbian go installiert werden:

mkdir ~/src && cd ~/src 
wget https://dl.google.com/go/<version>.tar.gz
  • Entpacken
sudo tar -C /usr/local -xzf <version>.tar.gz 
rm <version>.tar.gz
  • Go konfigurieren
vi ~/.profile

folgenes hinzufügen:

PATH=$PATH:/usr/local/go/bin
GOPATH=$HOME/go
  • Update shell:
source ~/.profile
  • Test ob alles ok ist
go version

Influxdb aus github ziehen und compilieren

Folgende Instruktionen ausführen => Achtung! Beim checkout die korrekte influx-version ziehen, also jene, die aktuell über die Packet-Installation installiert und dann auf hold gesetzt wurde. Bei mir ist das Version 1.8.6.

git clone https://github.com/simonvetter/influxdb.git
cd influxdb
git checkout origin/1.8.6+big_db_32bit
mkdir build
# target 32-bit ARM architectures, use GOARCH=386 for 32-bit Intel/AMD
export GOARCH=arm
go build -o build/influx_stress cmd/influx_stress/*.go
go build -o build/influx_tools cmd/influx_tools/*.go
go build -o build/influx_inspect cmd/influx_inspect/*.go
go build -o build/influxd cmd/influxd/main.go
go build -o build/influx cmd/influx/main.go

Nun befinden sich die 32-bit binaries im build-verzeichnis:

cd ~/influxdb/build

Als nächstes die „alten“ binaries backupen (sicher ist sicher)

mkdir ~/influxbackup-binaries
sudo cp /usr/bin/influx* ~/influxbackup-binaries/

Nun die neuen binaries über die alten kopieren

sudo service influxdb stop
cd ~/influxdb/build
sudo mv * /usr/bin/
sudo chown root:root /usr/bin/influx*

Jetzt die Konfig so anpassen, dass die DB nicht mehr ins Memory gezwungen wird:

sudo vi /etc/influxdb/influxdb.conf
[data]
    tsm-use-seek = true # use the seek accessor (what this whole PR is about)
    index-version = "tsi1" # use on-disk index files instead of keeping them in-memory
    max-concurrent-compactions = 1 # avoid running multiple compactions at once

[coordinator]
  query-timeout = "60s" # kill runaway queries (you may want to adjust the value depending on your hardware and query set)

Jetzt System restarten

sudo shutdown -r now

Ab sofort sollte die Influx-DB nicht mehr so Speicherhungrig sein und die Systemtemperatur hat sich bei mir auch bei rund 48° eingependelt. Der „cannot allocate memory“ Fehler ist seit dem nicht mehr aufgetaucht => check 🙂

Grafana installieren (OSS Release)

Installation

Installation wird auch hier beschrieben: https://grafana.com/docs/grafana/latest/installation/debian/

sudo apt-get install -y apt-transport-https 

sudo apt-get install -y software-properties-common wget 

wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

sudo apt-get update 

sudo apt-get install grafana

 

Konfiguration

Die Configuration von Grafana findet man hier

Ich hatte nach einem Upgrade von Version 7.5 auf Version 8 das Problem (If you’re seeing this Grafana has failed to load its application files), dass gewisse „Embedded-Browser“ nicht mehr funktionierten. Deswegen verwende ich fix Version 7.5.10. Mit dieser gings noch…Dafür musste ich aber ein Downgrade durchführen und anschliessend das Paket auf „halten“ setzen:

sudo apt-get install grafana=7.5.10
sudo apt-mark hold grafana
sudo vi /etc/grafana/grafana.ini
# Grafana soll als eingebettetes Frame angezeigt werden können:
allow_embedding = true
[auth.anonymous]
# enable anonymous access
enabled = true

# specify organization name that should be used for unauthenticated users
org_name = Home

# specify role for unauthenticated users
org_role = Viewer

# mask the Grafana version number for unauthenticated users
hide_version = false
[date_formats]
# For information on what formatting patterns that are supported https://momentjs.com/docs/#/displaying/

# Default system date format used in time range picker and other places where full time is displayed
full_date = DD-MM-YYYY HH:mm:ss

# Used by graph and other places where we only show small intervals
interval_second = HH:mm:ss
interval_minute = HH:mm
interval_hour = DD/MM HH:mm
interval_day = DD/MM
interval_month = MM-YYYY
interval_year = YYYY
default_timezone = Europe/Zurich

Telegraf installieren

Telegraf wird benutzt um die Modbus-Daten abzufragen und nach influxdb zu senden.

wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add -

source /etc/lsb-release  / ODER source /etc/armbian-release

echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
sudo apt-get update && sudo apt-get install telegraf
sudo service telegraf start

Damit läuft telegraf zum aktuellen Zeitpunkt mit Version 1.20.0. Diese Version scheint mit den Versionen von Grafana und Influxdb sehr gut zu funktionieren (nach rund 2 Monaten Test). Ich halte deswegen auch hier an dieser Version fest:

sudo apt-mark hold telegraf

Influxdb als output plugin konfigurieren

DB und User auf influxdb erstellen

influx -username 'admin' -password '<password>'
CREATE DATABASE "telegraf"
CREATE USER "telegraf" WITH PASSWORD "<userpassword>"
GRANT ALL ON "telegraf" TO "telegraf"

Konfig anpassen

sudo vi /etc/telegraf/telegraf.conf
[[outputs.influxdb]]
urls = ["http://127.0.0.1:8086"] #influxdb und telegraf laufen auf dem selben server
database = "telegraf"
## HTTP Basic Auth
username = "telegraf"
password = "<password>"

Modbus als input plugin konfigurieren

sudo vi /etc/telegraf/telegraf.conf

Alle input Plugins (CPU, etc.) deaktivieren. Anschliessend Modubs konfigrieren:

[[inputs.modbus]]
name = "SE_PowerTagLink_F21"
slave_id = 150
timeout = "5s"
controller = "tcp://<ip>:502"
holding_registers = [
{ name = "PowerTag_Garage - Current C", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3003,3004]}
]
[[inputs.modbus]]
name = "SE_PowerTagLink_Hauszuleitung"
slave_id = 154
timeout = "5s"
controller = "tcp://<ip>:502"
holding_registers = [
{ name = "PowerTag_Hauszuleitung - Current A", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [2999,3000]},
{ name = "PowerTag_Hauszuleitung - Current B", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3001,3002]},
{ name = "PowerTag_Hauszuleitung - Current C", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3003,3004]},
{ name = "PowerTag_Hauszuleitung - Voltage A-N", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3027,3028]},
{ name = "PowerTag_Hauszuleitung - Voltage B-N", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3029,3030]},
{ name = "PowerTag_Hauszuleitung - Voltage C-N", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3031,3032]},
{ name = "PowerTag_Hauszuleitung - Voltage A-B", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3019,3020]},
{ name = "PowerTag_Hauszuleitung - Voltage B-C", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3021,3022]},
{ name = "PowerTag_Hauszuleitung - Voltage C-A", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3023,3024]},
{ name = "PowerTag_Hauszuleitung - Active Power", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3059,3060]},
{ name = "PowerTag_Hauszuleitung - Power Factor", byte_order = "ABCD", data_type = "FLOAT32-IEEE", scale=1.0, address = [3083,3084]},
{ name = "PowerTag_Hauszuleitung - Active Energy No reset", byte_order = "ABCDEFGH", data_type = "INT64", scale=1.0, address = [3203,3204,3205,3206]},
{ name = "PowerTag_Hauszuleitung - Active Energy Resetable", byte_order = "ABCDEFGH", data_type = "INT64", scale=1.0, address = [3255,3256,3257,3258]},
{ name = "PowerTag_Hauszuleitung - Active Energy Write Value", byte_order = "ABCDEFGH", data_type = "INT64", scale=1.0, address = [3259,3260,3261,3262]}
]

Chronograf installieren

Chronograf eignet sich als Query-GUI auf die Influxdb und bietet GUI Unterstützung beim erstellen von InfluxQL und Flux Queries

sudo apt-get install chronograf

Anschliessend Browser URL von chronograf öffnen

http://grafana.home.arpa:8888/

Commands

Zeige influxdb version

influxd version

Login

influx -username <username> -password <password>

Benutzer anzeigen

show users

Zeige alle DBs

show databases

Zeitserie löschen (Beispiel)

DROP SERIES FROM "rawdata" WHERE "name" = 'XTH_U01-01 humidity'

 

Links

 

HC2 Armbian und Logitech Media Server / OS auf HD

Hier beschreibe ich, wie man eine HC2 mit Armbian installiert und einem Logitech Media Server darauf betreibt.

HC2 Armbian Image & Installation HD

Die Installation von Armbian ist eigentlich „outofthebox“. Da die HC2 aber über eine SD Karte verfügt und die Lebensdauer entsprechend beschränkt ist, ist es von Vorteil, die in der HC2 eingebaute Disk als OS-Disk zu verwenden. Man kann leider die HC2 nicht über die HD Vollkommen boot-fähig machen. Fast nicht. Ich beschreibe hier, wie ich das gelöst habe:

Image / SD

  • Download (Focal-Image) & Installation: https://www.armbian.com/odroid-xu4/
  • SSH Standard Login: root  Password: 1234
    • Starte  das Dienstprogramm armbian-config und
    • gehe in den Bereich System -> DTB und
    • wähle die optimierte Kartenkonfiguration für Odroid HC1. Die gleiche Konfiguration gilt auch für HC2 und MC1.

Disc / HD

  • Erstelle auf der HD zwei Partitionen. Eine für das Betriebssystem (40G) und eine für die Daten (Rest)
  • HD identifizieren
sudo fdisk -l
  • Partitionen erstellen
sudo fdisk /dev/sda
d= delete partition
n= create partition
w=write partition
  • recheck
sudo fdisk -l
  • Erstelle Formatierung
sudo mkfs.ext4 -L os /dev/sda1
sudo mkfs.ext4 -L data /dev/sda2
  • Erstelle Mount-Verzeichnisse
sudo mkdir /osFiles
sudo mkdir /mnt/files
  • /etc/fstab anpassen: Mount Patitionen
#Mounts
/dev/sda1 /osFiles ext4 defaults,noatime,nodiratime,commit=600,errors=remount-ro 0 1
/dev/sda2 /mnt/files ext4 defaults,noatime,nodiratime,commit=600,errors=remount-ro 0 1
  • Reboot
  • Files auf neue OS-Partition (/osFiles) kopieren.
    Achtung: Alle Services (wie den logitechmediaserver) vorher beenden
sudo rsync -aAXHv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/osFiles"} / /osFiles
  • SDA uuid (UUID) herausfinden:
sudo blkid

/dev/sda1: LABEL="os" UUID="975a0396-5016-42b3-a66e-fe5276a36797" TYPE="ext4" PARTUUID="262deb28-e8fe-5d4d-b3a4-808b44571e85"
  • Im boot.ini die neue UUID setzen bzw. ersetzen:
sudo vi /boot/boot.ini
.
setenv rootdev "UUID=975a0396-5016-42b3-a66e-fe5276a36797"
.
  • reboot.
  • Wenn alles geklappt hat, sollte neu von sda1 gebootet werden. Check:
mount | grep '/ '
  • sollte folgendes ausgeben
/dev/sda1 on / type ext4 (rw,noatime,errors=remount-ro,commit=600,data=ordered)
  • Über armbian-config können neue U-boot Versionen eingespielt werden. Diese müssen weiterhin auf die SD-Karte gespiehlt werden. Deswegen soll das /boot Verzeichnis weiterhin auf die SD-Karte zeigen:
  • Microsd karte wieder einbinden.
  • erstelle  /mnt/microsd:
sudo mkdir /mnt/microsd
  • fstab erweitern
  • Editiere /etc/fstab, und füge hinzu:

/dev/mmcblk0p1 /mnt/microsd auto defaults 0 0 
/mnt/microsd/boot /boot none defaults,bind 0 0
  • Mount durchführen und prüfen ob korrekt gemountet wird
sudo mount /mnt/microsd && sudo mount /boot
  • Wenn Check:
mount | grep '/boot '
  • sollte folgendes ausgeben
/dev/mmcblk0p1 on /boot type ext4 (rw,relatime)
  • Wenn alles ok ist
sudo reboot

Damit läuft das System nun (grösstenteils 😉 ) auf der HD anstelle der SD. Das entlastet die SD enorm und führt zu einem längeren Leben der SD Karte.

lame installieren:

sudo apt-get install lame

ffmpeg installieren:

sudo apt-get install ffmpeg

RAM-Logging deaktivieren

Armbian installiert out-of-the-box ein RAM-Logging. Dabei wird 50MB Diskplatz als RAM verwendet und nach /var/log gemounted. Für kleine Systeme kann das Sinn machen. Ich verwende hier aber eine 2TB SSD und benötige damit keine RAM-Disk. Insbesondere, weil es immer mal wieder zu Problemen kam, welche in einem System-Freeze endeten. Dabei wurde die RAM-Disk bis 100% gefüllt was dann letzten Endes in einen System-Freeze mündete. Hier wird beschreiben, wie man diese RAM-Disk deaktiviert.

LMS Installation

LMS Download-Link: https://forums.slimdevices.com/showthread.php?98711-Logitech-Media-Server-Versions

Damit der LMS auf dem Armbian Focal läuft, müssen die Perl-Pakete selber kompiliert werden:

cd ~
sudo apt install nasm make gcc rsync patch g++ libc-bin zlib1g-dev libgd-dev libmodule-install-perl
git clone https://github.com/Logitech/slimserver-vendor.git
cd slimserver-vendor/CPAN/
./buildme.sh

Jetzt LMS downloaden und installieren

cd ~
wget http://downloads.slimdevices.com/nightly/8.1/lms/c9adb5f63e54ec0d72e6266e75fb73989f4be345/logitechmediaserver_8.1.2~1614990085_arm.deb
sudo apt install ./logitechmediaserver_8.1.2~1614990085_arm.deb

Den LMS stoppen, da er noch nicht läuft. siehe

tail -f /var/log/squeezeboxserver/server.log
sudo service logitechmediaserver stop

Nun die compilierten Perl-Binaries nach LMS kopieren:

sudo cp -r ~/slimserver-vendor/CPAN/build/arch/5.30/arm-linux-gnueabihf-thread-multi-64int /usr/share/squeezeboxserver/CPAN/arch/5.30/

Und den Logitech Media Server wieder starten

sudo service logitechmediaserver start

Das wars. Damit rennt der LMS auf einer HC2. Brower starten und link aufrufen:

http://ip-adresse:9000

Deezer-Plugin / Titel stoppen rund 50s vor Ende

Beim Einsatz des Deezer-Plugins ergab sich das Problem, dass die Songs rund 50s vor Ende des Titels stoppten und die Wiedergabe zum nächsten Titel spang. Dies kann behoben werden, indem beim LMS die AAC/AAC Wiedergabe deaktiviert wird:Siehe auch: https://github.com/Logitech/slimserver/issues/130#issuecomment-1212912369

ZRAM – Speicher erhöhen

Bei einem System mit wenig RAM-Speicher kann es Sinn machen, den zram Speicher zu erhöhen (siehe https://forum.armbian.com/topic/5565-zram-vs-swap/page/2/#comment-61082)

sudo vi /etc/default/armbian-zram-confi
# configuration values for the armbian-zram-config service
#
# enable the armbian-zram-config service?
ENABLED=true

# Zram swap enabled by default, unless set to disabled
# SWAP=false

# percentage of zram used as swap compared to physically available DRAM.
# Huge overcommitment (300) is possible and sometimes desirable. See
# https://forum.armbian.com/topic/5565-zram-vs-swap/?do=findComment&comment=61082
# and don't forget to adjust $MEM_LIMIT_PERCENTAGE below too.
# ZRAM_PERCENTAGE=50
ZRAM_PERCENTAGE=300

# percentage of DRAM available to zram. If this amount is exceeded the zram
# devices used for swap simply behave as if the device is full. You need to
# adjust/increase this value only if you want to work with massive memory
# overcommitment (ZRAM_PERCENTAGE exceeding 150 for example)
# MEM_LIMIT_PERCENTAGE=50
MEM_LIMIT_PERCENTAGE=300

# create how many zram devices max for swap
# ZRAM_MAX_DEVICES=4

# Which algorithm for zram based swapping. Seems lzo is best choice on ARM:
# https://forum.armbian.com/topic/8161-swap-on-sbc/?do=findComment&comment=61668
# SWAP_ALGORITHM=lzo

# Which algorithm to choose for zram based ramlog partition
# RAMLOG_ALGORITHM=zstd

# Which algorithm to choose for zram based /tmp
# TMP_ALGORITHM=zstd

# Size for zram based /tmp, total memory / 2 by default
# TMP_SIZE=500M

# If defined a separate partition will be used as zram backing device. Be CAREFUL
# which partition you assign and read starting from CONFIG_ZRAM_WRITEBACK in
# https://www.kernel.org/doc/Documentation/blockdev/zram.txt
# ZRAM_BACKING_DEV=/dev/nvme0n2

Links

SL SSH-Zugang

Hier beschreibe ich, wie man Root Zugriff auf einen SL bekommt:

  • Auf dem SL läuft ein SSH-Server, basierend auf dropbear. Um Zugriff zu erlangen, kann die SD-Karte entnommen und in einem Linux gemountet werden.
  • Anschliessend ein Zertifikat erstellen
  • ssh-keygen -b 4096
  • Das Public-Zertifikat, welches gerade erstellt wurde, unter authorized_keys abspeichern
  • tee -a /media/ralwet/73a6c7bb-21a8-49e2-af43-04dd5942473e/etc/dropbear/authorized_keys < ~/.ssh/id_rsa.pub
  • SD-Karte wieder einbauen
  • nun über SSH zugreifen
  • ssh root@<IP>

Sinn und zweck war es, zusätzliche ipk-Pakete  (luaMysql-IPK ) für eine mysql Verbindung per Lua zu installieren:

  • Login auf SL
  • Installieren der drei Pakete
  • opkg install zlib_1.2.11-1_imx6.ipk
    opkg install liblua-mysql_2.2.0-6_imx6.ipk
    opkg install libmysqlclient_5.1.73-1_imx6.ipk

     

 

Links

  • https://oldwiki.archive.openwrt.org/doc/howto/dropbear.public-key.auth
  • https://linux.die.net/man/8/dropbear
  • https://www.systutorials.com/how-to-passwordless-ssh-to-an-openwrt-router/
  • https://openwrt.org/docs/guide-user/additional-software/opkg

ioBroker: Node.js Update / Reinstallation ioBroker

Update 20.2.2024

Neu ist das Update von node auf dem iobroker deutlich vereinfacht worden. Siehe auch hier und hier:

Siehe auch alle Consolen-Commands für iobroker hier.

iob stop             ## für iob fix muss iobroker gestoppt sein
iob fix
iob nodejs-update xx ## (mit xx eine GERADE Major Node.js version - Ungerade Versionen sind Entwicklerversionen)
sudo reboot

iob upgrade          ## bei Bedarf gleich alle Adapter mit aktualisieren

Wenn iobroker als lxc betrieben wird, muss das update-commando als iobroker ausgeführt werden:

su iobroker -s /bin/bash -c 'iob nodejs-update 20'

Auf dem LXC Container scheint das iobroker update-script nicht zu funktionieren. Also über die Pakete installieren:

NODE_MAJOR=20

echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

apt update

apt upgrade

Deprecated:

Ich betreibe seit einigen Jahren ioBroker, welches auf nodejs basiert. Heute war es an der Zeit die Nodejs Version von 8 auf 12 anzuheben, was leider nicht ganz ohne Probleme funktionierte. Hier fasse ich kurz zusammen, welche Schritte bei meiner Installation nötig waren. Die Schritte basieren auf diesem Howto.

Die einzige, im Howto beschriebenen und für mich funktionierende Lösung für das Update war, die komplette Reinstallation des ioBrokers. Dabei wird zuerst die neue Node.js Version installiert. Dann ein Backup des iobroker-data Verzeichnisses gezogen, die ioBroker-Installation gelöscht, neu installiert und dann das Backup wieder zurück gespielt:

Installation neue Node.js Version 12

cd /opt/iobroker
iobroker stop
cd

# install nodejs
curl -sLf https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

# install iobroker
curl -sLf https://iobroker.net/install.sh | bash -

Bei einer Aktualisierung von Node.js müssen bereits installierte JavaScript- Module im ioBroker-Ordner aktualisiert werden, da sonst Fehler bei deren Ausführung auftreten. Hier traten bei mir dann die Probleme auf. Die einzige bei mir funktionierende Lösung war, den ioBkoker neu zu installieren:

Backup und Neuinstallation ioBroker

  • Backup des iobroker-data Verzeichnisses nach „Home“ ziehen
  • Die alte Installation löschen
  • ioBroker neu installieren
cp -r /opt/iobroker/iobroker-data ~/iobroker-data 
sudo rm -r /opt/iobroker/ 
sudo mkdir /opt/iobroker
cd /opt/iobroker
curl -sL https://iobroker.net/install.sh | bash -

ioBroker wird nach der Installation wieder gestartet. Wir stoppen ioBroker deswegen wieder:

iobroker stop

Nun löschen wir das neu erstellte iobroker-data Verzeichnis und kopieren das Backup

rm -r /opt/iobroker/iobroker-data
cp -r ~/iobroker-data /opt/iobroker/iobroker-data

Während meinen Installations-Bemühungen habe ich festgestellt, dass die Berechtigungen immer wieder durcheinander gehen. Es existiert deswegen ein korrektur-Script, welches die Berechtigungen des ioBrokers wieder gerade zieht. Es ist ratsam dieses jetzt durchzuführen:

cd /opt/iobroker
curl -sL https://iobroker.net/fix.sh | bash -

Jetzt den ioBroker neu starten

iobroker start

Der Start kann jetzt sehr lange dauern. Der ioBroker merkt jetzt, dass die Adapter (gem. Backup) fehlen und installiert diese neu nach.

Um zu schauen, wo die Installation steht, kann man das log konsultieren

tail -f /opt/iobroker/log/iobroker.current.log

Ein Adapter (zigbee) liess sich jetzt immer noch nicht installieren. Diesen habe ich dann noch manuell installiert:

cd /opt/iobroker
iobroker stop
sudo -H npm install iobroker.zigbee --unsafe-perm

Ganz zum Schluss dann nochmals die Berechitigungen gerade ziehen, um sicher zu gehen…

cd /opt/iobroker
curl -sL https://iobroker.net/fix.sh | bash -

Das wars. Jetzt den Raspi neu booten und sich über die neue ioBroker-Installation freuen 🙂

sudo reboot