# Raspberry Pi Image besorgen
#wget https://downloads.raspberrypi.org/raspios_lite_armhf/images/raspios_lite_armhf-2023-02-22/2023-02-21-raspios-bullseye-armhf-lite.img.xz
wget https://downloads.raspberrypi.com/raspios_lite_armhf/images/raspios_lite_armhf-2023-10-10/2023-10-10-raspios-bookworm-armhf-lite.img.xz
oder
#wget https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2023-02-22/2023-02-21-raspios-bullseye-arm64-lite.img.xz
wget https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2023-10-10/2023-10-10-raspios-bookworm-arm64-lite.img.xz
# R-Pi Imager herunterladen und intallieren:
wget https://downloads.raspberrypi.org/imager/imager_latest_amd64.deb
sudo dpkg -i imager_latest_amd64.deb
rpi-imager
#sudo touch /media//bootfs/ssh
#sync
# SD-Karte aushängen und damit den R-Pi booten
==== Konfiguration ====
Während des Bootvorganges erhält der Raspberry eine IP Adresse vom Router. Diese kann über die entsprechende Weboberfläche des Routers ermittelt werden.
# Grundsystem auf den aktuellen Stand bringen:
ssh -l pi
sudo su
apt-get update && sudo apt-get upgrade
apt-get install aptitude mc apt-transport-https software-properties-common raspi-gpio
raspi-config nonint do_hostname iobroker
raspi-config nonint do_onewire 0
raspi-config nonint do_change_locale de_DE.UTF-8 UTF-8
raspi-config nonint do_expand_rootfs
raspi-config nonint do_update
reboot
# Feste IP für eth0 einstellen:
mcedit /etc/dhcpcd.conf
interface eth0
static ip_address=192.168.10.11/24
static routers=192.168.10.1
static domain_name_servers=192.168.10.1
#
# Seit OS "Bookworm":
nmcli -p connection show
nmcli con mod "Kabelgebundene Verbindung 1" ipv4.addresses 192.168.10.11/24 ipv4.method manual
nmcli con mod "Kabelgebundene Verbindung 1" ipv4.gateway 192.168.10.1
nmcli con mod "Kabelgebundene Verbindung 1" ipv4.dns "192.168.10.1"
reboot
# oder
nmcli c down "Kabelgebundene Verbindung 1" && sudo nmcli c up "Kabelgebundene Verbindung 1"
#
# nicht benötigte Dienste beenden und/oder entfernen:
systemctl disable ModemManager.service
systemctl stop ModemManager.service
apt-get purge modemmanager
#
mkdir -p /mnt/usb-stick
echo "UUID="52ff610a-2612-4021-8a8d-b818b3dba1f4" /mnt/usb-stick ext4 defaults 0 1" >> /etc/fstab
systemctl daemon-reload
mount -a
==== GPIO für USV ====
aptitude install raspi-gpio
# konfiguriere GPIO #18 als Input mit internem Pull-Down:
raspi-gpio set 18 ip pd
# GPIO Zustand abfragen:
raspi-gpio get 18
===== InfluxDB 1.x =====
Quelle: [[https://docs.influxdata.com/influxdb/v1/introduction/install/|https://docs.influxdata.com/influxdb/v1/introduction/install/]]
==== Installation ====
sudo su
#wget -qO- https://repos.influxdata.com/influxdata-archive_compat.key | sudo apt-key add -
#source /etc/lsb-release
#echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
#curl https://repos.influxdata.com/influxdata-archive.key | gpg --dearmor | sudo tee /usr/share/keyrings/influxdb-archive-keyring.gpg >/dev/null
#echo "deb [signed-by=/usr/share/keyrings/influxdb-archive-keyring.gpg] https://repos.influxdata.com/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
wget -q https://repos.influxdata.com/influxdata-archive_compat.key
echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list
apt-get update
apt-get install influxdb
systemctl unmask influxdb.service
systemctl enable influxdb
systemctl start influxdb
systemctl status influxdb
==== Konfiguration ====
sudo su
influx
> CREATE USER "admin" WITH PASSWORD 'influxdbadmin' WITH ALL PRIVILEGES
> CREATE USER "iobroker" WITH PASSWORD 'iobroker'
> CREATE DATABASE "iobroker"
> GRANT ALL ON "iobroker" TO "iobroker"
> exit
#
mcedit /etc/influxdb/influxdb.conf
[http]
enabled = true
bind-address = ":8086"
auth-enabled = true
log-enabled = true
write-tracing = false
pprof-enabled = true
https-enabled = false
#
systemctl restart influxdb
==== Datenbankgröße ermitteln ====
sudo su
du -sh /var/lib/influxdb/data/iobrokerdb/
==== Backups ====
Quelle: [[https://docs.influxdata.com/influxdb/v1/administration/backup_and_restore/#back-up-all-databases|https://docs.influxdata.com/influxdb/v1/administration/backup_and_restore/#back-up-all-databases]]
=== Erstellen ===
sudo su
influxd backup -portable /path/to/backup-destination
# or do it in one line:
cd /; influxd backup -portable /mnt/usb-stick/backup/influxdb/`date +%Y%m%d`
=== Wiederherstellen ====
sudo su
influxd restore -portable /path/to/backup-destination
===== InfluxDB 2.x =====
==== Installation ====
sudo su
cd ~
wget -q https://repos.influxdata.com/influxdata-archive_compat.key
echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list
apt-get update
apt-get install influxdb2
systemctl start influxdb
systemctl status influxdb
==== Konfiguration ====
Die Konfiguration der InfluxDB erfolgt über den Browser via [[http://RASPI-IP:8086|http://RASPI-IP:8086]].
===== Grafana =====
==== Installation ====
sudo su
#wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
#echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
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
apt-get update
# Install the latest OSS release:
apt-get install -y grafana
# Start System Service aka. Server
systemctl daemon-reload
systemctl start grafana-server
systemctl status grafana-server
systemctl enable grafana-server.service
Grafana Server: [[http://IP:3000|http://IP:3000]]
==== Grafana ohne Login ====
mcedit /etc/grafana/grafana.ini
# [auth.anonymous]
enabled = true
systemctl restart grafana-server
==== Backup ====
Quelle: [[http://cactusprojects.com/backup-restore-grafana/|http://cactusprojects.com/backup-restore-grafana/]]
=== Erstellen ===
sudo su
cp /var/lib/grafana/grafana.db /path/to/backup-destination
cp /etc/grafana/grafana.ini /path/to/backup-destination
# or do it in one line:
cd /; mkdir /mnt/usb-stick/backup/grafana/`date +%Y%m%d`; cp /etc/grafana/grafana.ini /mnt/usb-stick/backup/grafana/`date +%Y%m%d`; cp /var/lib/grafana/grafana.db /mnt/usb-stick/backup/grafana/`date +%Y%m%d`
=== Wiederherstellen ===
sudo su
cd /path/to/backup-destination
cp grafana.db /var/lib/grafana/
cp grafana.ini /etc/grafana/
===== ioBroker =====
==== Wiederherstellung ====
Folgende Backup Dateien via Backitup Adapter wieder einsoielen:\\
* iobroker_
sudo su
# automatische Installation:
curl -sLf https://iobroker.net/install.sh | bash -
Nach der Installation ist die ioBroker Instanz erreichbar unter [[http://
# ioBroker starten:
iobroker start
# ioBroker stoppen:
iobroker stop
# ioBrker Infos anzeigen
iobroker info
==== Backups ====
=== Erstellung ===
Siehe unten -> Script oder per 'Backitup' Adapter
=== Wiederherstellung ===
* Verzeichniss '/opt/iobroker/backups' anlegen
* Kopieren des Backups dort hinein
Backups die mit dem Backitup-Adapter erstellt wurden können nachde dem kopieren via Web-Interface wieder eingesielt werden.\\
Alternativ kann auch die Konsole verwendet werden:\\
sudo su
cd /opt/iobroker
iobroker stop
iobroker restore 0
iobroker stop
==== Adapter installieren ====
Als ''Adapter'' werden alle Schnittstellen zu externen aber auch zu internen Datenquellen (z.B. Shelly Sensoren, Temperatur, Luftfeuchte, GPIO, 1-Wire, etc.) und Senken (Shelly Aktoren) bezeichnet.
* influxDB (Datenbank zur Speicherung von Messwerten)
* DS18B20 (Auslesen von 1-Wire Temperatursensoren)
* HABpanel (Steuerung von Aktoren vis Webseite)
* Jeelink-Geräte (Empfangen von 868mHz LaCrosse Temperatur- und Feuchtesensoren (hier z.B. TX29DTH-IT) mit Hilfe eines Jeelink Klones
* MQTT Broker (zur Datenverarbeitung von MQTT-fähigen Sensoren und Aktoren)
* Philips Luftreiniger (für die Anbindung eines Philips Air Purifier 4000i Series (Typ: AC4236/10)
* RPI-Monitor (Nutzung von GPIOs z.B. zum Einlesen eines Reed-Kontaktes für den Gaszähler)
* Skriptausführung (Javascript und Blockly)
* WEB-Server (für HABpanel)
* Shelly
{{:wiki:projekte:iobroker:pasted:20230401-155520.png}}
==== Adapter konfigurieren ====
Die oben aufgeführten Adapter sind nach der Installation unter ''Instanzen'' zu finden und müssen dort konfiguriert werden.
=== 1-Wire ====
== DS18B20 ==
{{:wiki:projekte:iobroker:pasted:20231024-204714.png}}
=== JeeLink ====
TBC - Empfänger bauen und programmieren -> TBC
{{:wiki:projekte:iobroker:pasted:20231024-204958.png}}
{{:wiki:projekte:iobroker:pasted:20231024-205021.png}}
=== MQTT ====
Für IKEA Sensoren --> Die angepasste Firmware gibt es [[https://github.com/Hypfer/esp8266-vindriktning-particle-sensor|hier]].
{{:wiki:projekte:iobroker:pasted:20231024-210526.png}}
=== Philips ====
{{:wiki:projekte:iobroker:pasted:20231024-205139.png}}
=== Gaszähler ====
Reedkontakt am GPIO #17 - Name: ''Gaszähler''\\
{{:wiki:projekte:iobroker:pasted:20231126-153854.png}}
== Blockly ==
{{:wiki:projekte:iobroker:pasted:20240121-121115.png}}
{{:wiki:projekte:iobroker:pasted:20240121-121217.png}}
Und das ganze als XML:
++++ Title |
GasZaehlerstand
0
{"type":"number", "unit":"m³"}
GasZaehlerstandkWh
0
{"type":"number", "unit":"kWh"}
GasTagesverbrauch
0
{"type":"number", "unit":"m³"}
GasTagesverbrauchkWh
0
{"type":"number", "unit":"kWh"}
0 0 * * *
.0
text
Gas Tagesverbrauch am
DD.MM.YYYY
-
day
object
object
1
:
3
3.1234
val
javascript.0.GasTagesverbrauch
m³
javascript.0.GasTagesverbrauch
FALSE
0
javascript.0.GasTagesverbrauchkWh
FALSE
0
rpi2.0.gpio.17.state
false
javascript.0.GasTagesverbrauch
FALSE
ADD
1
val
javascript.0.GasTagesverbrauch
0.01
javascript.0.GasZaehlerstand
FALSE
ADD
1
val
javascript.0.GasZaehlerstand
0.01
javascript.0.GasZaehlerstand
ne
m³ x Zustandszahl X Brennwert
javascript.0.GasZaehlerstandkWh
FALSE
3
3.1234
MULTIPLY
9.866
1
MULTIPLY
1
state.val
0.9613
javascript.0.GasTagesverbrauch
ne
m³ x Zustandszahl X Brennwert
javascript.0.GasTagesverbrauchkWh
FALSE
3
3.1234
MULTIPLY
9.866
1
MULTIPLY
1
state.val
0.9613
++++
=== Stromzähler ====
Zur Erfassung des Stromverbrauches meiner Wohnung verwende ich einen [[https://www.shelly.com/de/products/shop/shelly-pro-3-em-120-a-1|Shelly 3EM Pro]] den ich via Shelly Adapter eingebunden habe.\\
== Blockly ==
{{:wiki:projekte:iobroker:pasted:20240121-123848.png}}
{{:wiki:projekte:iobroker:pasted:20240121-123946.png}}
Und das ganze als XML:
++++ Title |
StromZaehlerstandkWh
0
{"type":"number", "unit":"kWh"}
StromZaehlerstandkWh_gestern
0
{"type":"number", "unit":"kWh"}
StomTagesverbrauchkWh
0
{"type":"number", "unit":"kWh"}
TotalActiveEnergyWh_gestern
0
{"type":"number", "unit":"Wh"}
shelly.0.shellypro3em#c8f09e8314fc#1.EMData0.TotalActiveEnergy
ne
javascript.0.StomTagesverbrauchkWh
FALSE
DIVIDE
1
MINUS
1
val
shelly.0.shellypro3em#c8f09e8314fc#1.EMData0.TotalActiveEnergy
1
val
javascript.0.TotalActiveEnergyWh_gestern
1000
javascript.0.StromZaehlerstandkWh
FALSE
ADD
1
val
javascript.0.StromZaehlerstandkWh_gestern
1
val
javascript.0.StomTagesverbrauchkWh
0 0 * * *
.0
text
Stom Tagesverbrauch am
DD.MM.YYYY
-
day
object
object
1
:
3
3.1234
val
javascript.0.StomTagesverbrauchkWh
kWh
javascript.0.TotalActiveEnergyWh_gestern
FALSE
val
shelly.0.shellypro3em#c8f09e8314fc#1.EMData0.TotalActiveEnergy
javascript.0.StromZaehlerstandkWh_gestern
FALSE
val
javascript.0.StromZaehlerstandkWh
javascript.0.StomTagesverbrauchkWh
FALSE
0
++++
=== InfluxDB ===
{{:wiki:projekte:iobroker:pasted:20231024-210408.png}}
==== Backup durch Script ====
{{:wiki:projekte:iobroker:pasted:20231024-210243.png}}
// Täglich um 03:00 Uhr Nachts wird das Backup ausgeführt. Anpassbar unter "schedule"
var usbstick = "/mnt/usb-stick/backup/"; /*Hier den Pfad zum USB-Stick eintragen*/
function backup() {
exec('iobroker backup',
function (error, stdout, stderr) {console.log('stdout: ' + stdout);});
setTimeout( function() {
exec('mv -v /opt/iobroker/backups/* ' + usbstick,
function (error, stdout, stderr) {console.log('stdout: ' + stdout);});
}, 180000);
}
schedule("0 3 * * *", function(obj){
backup();
});
==== Update und Bugfixing ====
iobroker stop
iobroker update
iobroker fix
# oder curl -sL https://iobroker.net/fix.sh | bash -
iobroker upgrade self
iobroker start