pi

Raspberry Pi am Solarfocus Therminator II

Written by  on Juni 12, 2020

Jetzt kann man den “USB Stick” wie beschrieben mounten.
Das Loopdevice sollte dem System schon aus Teil 1 bekannt sein:

losetup -o 32256 /dev/loop0 /media/usbdisk.img

Einhängen am Pi wie gesagt Read Only

/bin/mount -o ro /dev/loop0  /mnt

Es kommt ein CSV File heraus. Die Werte sind mit Strichpunkt getrennt. Und es werden Kommas verwendet statt Punkten, was die Weiterverarbeitung etwas erschwert.

head Logfile_200604.csv
DATE;TIME;KT;RGT;Luftzahl;Statuszeile;Zusatzstatuszeile;R▒cklauftemperatur;RLA-Pumpe;Temperatur X35;AT;LDZ_IST[];LDZ_ZIEL[];LDZ_SOLL[];LDZ_Ausgang;SLK-LZ;SGA Einschubistlz;Istposition Saugsondenumschalt.;Einschubtemperatur;Iststrom Einschub/WMT;Iststrom Einschub HG;Iststrom Austragung HG;Iststrom Austragung 2 HG;Schaltzustand Sensor HG;R▒ttler_Status;R▒ttler_RGT_Merker;R▒ttler_RGT_Abfall;R▒ttler_Impulse_Z▒ndphase;R▒ttler_Impulse_Betrieb;Einschub_Impuls_LDZ;Einsch▒be;Sondereinsch▒be_LZ;Sondereinsch▒be_Start;PTO 1;PTU 1;Pufferpumpe 1;TWS Temperatur 1;TWS-Pumpe 1;RT 1;VLT 1;VLT-Soll 1;HK-Pumpe 1;RT 2;VLT 2;VLT-Soll 2;HK-Pumpe 2;Kollektortemp;Speichertemperatur unten Regelung;Speichertemperatur 1 Solarmodul;Speichertemperatur 2 Solarmodul;Solarpumpenausgang;Solarstatus;Solarstatuszeile;WMZ Durchfluss l/h;WMZ VLT;WMZ RLT;WMZ aktuelle Leistung;RT 3;VLT 3;VLT-Soll 3;HK-Pumpe 3;RT 4;VLT 4;VLT-Soll 4;HK-Pumpe 4;RT 5;VLT 5;VLT-Soll 5;HK-Pumpe 5;RT 6;VLT 6;VLT-Soll 6;HK-Pumpe 6;PTO 2;PTU 2;Pufferpumpe 2;PTO 3;PTU 3;Pufferpumpe 3;TWS Temperatur 2;TWS-Pumpe 2;TWS Temperatur 3;TWS-Pumpe 3;Heiz_Strom_LBS;Heiz_Spannung_LBS;Heiz_PWM_LBS;Offset_LBS;Kommunikationszaehler_Leistungsteil;Leistungsteil_Fehler;HG_Modul_Fehler;HK_1_Modul_Fehler;HK_2_Modul_Fehler;HK_3_Modul_Fehler;DFBM_1_Fehler;DFBM_2_Fehler;DFBM_3_Fehler;SOLAR_Modul_Fehler;FWM_1_Fehler;SSUE_Fehler;DIFF_1_Modul_Fehler;
04.06.20;00:00:08;20,4;26;7,40;8;0;19,5;0;44,3;12,4;0,0;0,0;0,0;0;0,00;999;21;23,8;3;3;0;0;-1;0;99,4;4,9;45;13;6,5;233;0;0;70,2;70,9;0;71,9;0;21,1;21,9;21,0;0;50,0;20,9;21,0;0;10,5;56,1;56,1;43,8;0;0;12;0;130,0;130,0;0,0;53,2;819,2;2,0;0;1707,0;1753,6;2,1;0;976,2;256,5;2,3;0;1034,7;-1185,0;2,4;0;215,3;-3045,0;6208;1278,8;-708,3;2572;1075,9;17028;2765,8;392;0,00;0,05;202;-1,8;0;0;0;0;0;0;0;0;0;0;0;0;0;

Hier nochmal in Übersichtlich und durchnummeriert:
1 DATE
2 TIME
3 KT
4 RGT
5 Luftzahl
6 Statuszeile
7 Zusatzstatuszeile
8 Rücklauftemperatur
9 RLA-Pumpe
10 Temperatur X35
11 AT
12 LDZ_IST[]
13 LDZ_ZIEL[]
14 LDZ_SOLL[]
15 LDZ_Ausgang
16 SLK-LZ
17 SGA Einschubistlz
18 Istposition Saugsondenumschalt.
19 Einschubtemperatur
20 Iststrom Einschub/WMT
21 Iststrom Einschub HG
22 Iststrom Austragung HG
23 Iststrom Austragung 2 HG
24 Schaltzustand Sensor HG
25 Rüttler_Status
26 Rüttler_RGT_Merker
27 Rüttler_RGT_Abfall
28 Rüttler_Impulse_Zündphase
29 Rüttler_Impulse_Betrieb
30 Einschub_Impuls_LDZ
31 Einschübe
32 Sondereinschübe_LZ
33 Sondereinschübe_Start
34 PTO 1
35 PTU 1
36 Pufferpumpe 1
37 TWS Temperatur 1
38 TWS-Pumpe 1
39 RT 1
40 VLT 1
41 VLT-Soll 1
42 HK-Pumpe 1
43 RT 2
44 VLT 2
45 VLT-Soll 2
46 HK-Pumpe 2
47 Kollektortemp
48 Speichertemperatur unten Regelung
49 Speichertemperatur 1 Solarmodul
50 Speichertemperatur 2 Solarmodul
51 Solarpumpenausgang
52 Solarstatus
53 Solarstatuszeile
54 WMZ Durchfluss l/h
55 WMZ VLT
56 WMZ RLT
57 WMZ aktuelle Leistung
58 RT 3
59 VLT 3
60 VLT-Soll 3
61 HK-Pumpe 3
62 RT 4
63 VLT 4
64 VLT-Soll 4
65 HK-Pumpe 4
66 RT 5
67 VLT 5
68 VLT-Soll 5
69 HK-Pumpe 5
70 RT 6
71 VLT 6
72 VLT-Soll 6
73 HK-Pumpe 6
74 PTO 2
75 PTU 2
76 Pufferpumpe 2
77 PTO 3
78 PTU 3
79 Pufferpumpe 3
80 TWS Temperatur 2
81 TWS-Pumpe 2
82 TWS Temperatur 3
83 TWS-Pumpe 3
84 Heiz_Strom_LBS
85 Heiz_Spannung_LBS
86 Heiz_PWM_LBS
87 Offset_LBS
88 Kommunikationszaehler_Leistungsteil
89 Leistungsteil_Fehler
90 HG_Modul_Fehler
91 HK_1_Modul_Fehler
92 HK_2_Modul_Fehler
93 HK_3_Modul_Fehler
94 DFBM_1_Fehler
95 DFBM_2_Fehler
96 DFBM_3_Fehler
97 SOLAR_Modul_Fehler
98 FWM_1_Fehler
99 SSUE_Fehler
100 DIFF_1_Modul_Fehler
Um gezielt einen einzelnen Wert zu holen, habe ich eine Funktion auf der Bash gebastelt:

f_field_nr () {
  VALUE=$(echo $1 | cut -d";" -f"$2")
  echo $VALUE
}

Die vorletze Logzeile hole ich mit diesem Befehl. Die Beistriche werden gleich durch Punkte ersetzt.

X=$(/usr/bin/tail $FILENAME -n2 | /usr/bin/head -n 1 | /bin/sed s/,/./g )

Damit sind die 100 Messwerte zur freien Verfügung. Man kann die einzelnen Werte z.B. an eine API schicken, z.B. die von Thingspeak:

/usr/bin/curl "https://api.thingspeak.com/update?api_key=${APIKEY1}&filed1=$(f_field_nr $X 3)&field2=$(f_field_nr $X 19)"

Oder in eine Datenbank einfügen. Oder an MRTG schicken.

Raspberry Pi am Solarfocus Therminator II

Written by  on Juni 11, 2020

Mit dem gestern in Raspberry Pi 4 als USB Stick dokumentierten Wissen, können wir den Raspberry Pi jetzt an den Solarfocus Therminator II anschließen.
Es handelt sich hier um das alte “Dreh-und-Drück Model” und nicht um die neuere Touchscreen Version.
Zur Vorbereitung muss im Service Menü das Schreiben der Logfiles auf USB aktiviert sein.
Hier endet jede Garantie. Ändern Sie das nur, wenn Sie sicher sind, dass Sie wissen was sie tun!


Was dann passiert ernüchtert erstmal. Der USB Anschluss liefert nicht genug Strom für den Raspberry Pi 4. Vermutlich nur die im ursprünglichen USB Standard vorgesehenen 500mA, was für den Pi einfach nicht ausreicht. Die Folge ist, dass die Steuerung des Ofen durchstartet. Der Pi startet nicht, die Power LED flackert nur.
Ab hier endet jede Garantie. Ändern Sie das nur, wenn Sie sicher sind, dass Sie wissen was sie tun!
Es muss also mehr Strom her, und das ohne den USB-C Anschluss zu verwenden. Der Pi lässt sich über die GPIO Pins versorgen. Einfach die 5 Volt an Pin 4 und GND an Pin 6 hängen. Entsprechende Anleitungen gibt es im Netz. Ein Handyladegerät mit zumindest 1000mA wird benötigt. Da der USB Anschluss am Ofen auch 5V liefert ist es sicher besser wenn Ofen und Pi nicht getrennt voneinander geschaltet werden.
Daher bietet es sich an, die Stromversorgung aus dem Ofen zu verwenden. Der Therminator II hat mit Anschluss X2 einen 230 Volt Ausgang.
Hier endet jede Garantie. Ändern Sie das nur, wenn Sie sicher sind, dass Sie wissen was sie tun!
Ofen stromlos machen! Einen Elektriker beiziehen!

Die Stromversorgung findet bequem neben der Steuerung einen Platz. Das Kabel lässt sich leicht herausfädeln.

Der Pi könnte sicher auch unter die Abdeckung. Da ich aber WLAN verwende, platziere ich den Pi nicht unter der Metallabdeckung.
Mit einer Ausnehmung an der richtigen Stelle, kann auch die Abdeckung wieder an den Ofen.

Raspberry Pi 4 als USB Stick

Written by  on Juni 10, 2020

Ich suche mindestens seit 2016, Solarfocus Bedienteil, nach einem Gerät, dass sich auf der einen Seite wie ein USB Stick verhält und auf der anderen Seite Daten ins Netzwerk schicken kann. Idealerweise über WLAN.
c’t 2020, Heft 10, S.136ff, Voll aufgebohrt, USB-C-Anschluss des Raspberry Pi 4 ausnutzen, präsentiert die Lösung für das Problem.
Man braucht zuerst einen Raspberry Pi 4 mit Raspbian buster.

# /boot/config.txt
# Device Tree Overlay laden
# im Abschnitt [pi4]
dtoverlay=dwc2
# /etc/modules
# Eröffnet die Konfiguration via SysFS
# Am Ende anhängen
libcomposite

Pi neu starten.
Es wird ein Image von einem USB Stick mit vFAT Dateisystem benötigt. Am einfachsten in Windows formatieren und ein Image mit Win32DiskImager erstellen. 2 GB sollten reichen. Ablegen am Pi unter /media/usbdisk.img.
Die Details kommen aus dem Script initgadget der c’t (Download Link oben!).
Ich habe es soweit gekürzt, dass nur der USB Stick emuliert wird. Zu Beginn wird noch das Image vom USB Stick zum Mounten auf der Pi-Seite vorbereitet. Der Teil muss passieren, bevor ein Lock durch die Gegenstelle passiert.

# /usr/local/sbin/initgadget
losetup -o 32256 /dev/loop0 /media/usbdisk.img
cd /sys/kernel/config/usb_gadget/
mkdir -p pi4
cd pi4
echo 0x1d6b > idVendor
echo 0x0104 > idProduct
echo 0x0100 > bcdDevice
echo 0x0200 > bcdUSB
echo 0xEF > bDeviceClass
echo 0x02 > bDeviceSubClass
echo 0x01 > bDeviceProtocol
mkdir -p strings/0x409
cat /sys/firmware/devicetree/base/serial-number > strings/0x409/serialnumber
echo "Raspberry Pi Foundation" > strings/0x409/manufacturer
echo "Raspberry Pi 4" > strings/0x409/product
mkdir -p configs/c.1/strings/0x409
echo 250 > configs/c.1/MaxPower
echo "Config 1: USB Gadget" > configs/c.1/strings/0x409/configuration
mkdir -p functions/mass_storage.usb0
echo 1 > functions/mass_storage.usb0/stall
echo 0 > functions/mass_storage.usb0/lun.0/removable
echo 0 > functions/mass_storage.usb0/lun.0/cdrom
echo 0 > functions/mass_storage.usb0/lun.0/ro
echo 0 > functions/mass_storage.usb0/lun.0/nofua
echo /media/usbdisk.img > functions/mass_storage.usb0/lun.0/file
ln -s functions/mass_storage.usb0 configs/c.1/
udevadm settle -t 5 || :
ls /sys/class/udc > UDC
# Die Initialisierung als Service aktivieren
cp initgadget.service /etc/systemd/system/
systemctl enable initgadget.service
systemctl start initgadget.service

Jetzt kann man das ausprobieren, indem man den Pi an einen Windows Rechner hängt.

Der “USB Stick” taucht im Device Manager auf. Man kann ein Test File anlegen.

Dann am Pi mounten

/bin/mount -o ro /dev/loop0  /mnt

Und die Daten auslesen

Es sei darauf hingewiesen, dass man am Pi jetzt besser nichts zurückschreibt ins Image. FAT ist kein Dateisystem dass für gleichzeitige Zugriffe von verschiedenen Rechnern ausgelegt ist. Daher würde ich am Pi nur Read-only mounten. Und immer wenn man die aktuellen Daten verwenden will, neu mounten.

Webserver am Raspberry Pi

Written by  on Januar 19, 2020

Unter Raspian Buster

Apache2 Webserver
MariaDB Datenbank Server
– Certbot

Upgrade to Raspbian Buster

Written by  on Januar 5, 2020

Falls noch jemand das Upgrade von Raspbian Lite auf Buster nicht durchgeführt hat:
pimylifeup.com/upgrade-raspbian-stretch-to-raspbian-buster

PI Setup Buster

Written by  on Juli 15, 2019

Das ist eine Forsetzung zu PI Setup, aber aktualisiert auf Raspbian Buster.

Win32 Imager
Download Link für Image (Version & Kernel)

Einstellungen am PI:

  1. Deutsche Tastatur
  2. Statische IP
    static ip config am eth0
    /etc/network/interfaces.d/eth0

    auto eth0
    allow-hotplug eth0
    iface eth0 inet static
    address 10.0.XXX.XXX
    netmask 255.255.255.0
    gateway 10.0.XXX.XXX
    dns-nameservers 127.0.0.1
    
  3. SSH aktivieren
    service ssh start
    systemctl enable ssh
    
  4. DHCP Client deaktivieren
    service dhcpcd stop
    systemctl disable dhcpcd
    
  5. # Buster ist noch so neu, man muss bestätigen, dass es OK ist, dass sich das Repository von Testing auf Stable geändert hat
    apt-get update --allow-releaseinfo-change
    apt-get update
    apt-get upgrade
    # nicht einmal das DIG Command ist im Image dabei
    apt-get install dnsutils
    
  6. Pihole setup
  7. Pi-hole mit rekursivem Nameserver
  8. interne DNS Zone aufbauen

Raspbian Auflösung

Written by  on Februar 4, 2019

Wenn am Raspberry Pi beim Booten kein Bildschirm angeschlossen ist, dann wird eine ganz minimale Auflösung eingestellt. Das ist ungut, wenn man nur mit VNC, Teamviewer oder ähnlichem darauf zugreifen möchte.

/boot/config.txt – am Ende anhängen

# HDMI auch ohne Monitor in Betrieb nehmen (optional)
hdmi_force_hotplug=1
# DMT-Betriebsmodus aktivieren
hdmi_group=2
# Auflösung: 1024x768 / 60 Hz
hdmi_mode=16
# Auflösung: 1280x768 / 60 Hz
hdmi_mode=23
# Auflösung: 1366x768 / 60 Hz
hdmi_mode=81
# Auflösung: 1920x1080 / 60 Hz (1080p)
hdmi_mode=82

Nur einen hdmi_mode aktivieren!
Liste möglicher Auflösungen
Quelle

PI Setup

Written by  on August 25, 2018

Win32 Imager
Download Link für Image (Version & Kernel)

Einstellungen am PI:

  1. Deutsche Tastatur
  2. Statische IP
    static ip config am eth0
    /etc/network/interfaces.d/eth0

    auto eth0
    allow-hotplug eth0
    iface eth0 inet static
    address 10.0.XXX.XXX
    netmask 255.255.255.0
    gateway 10.0.XXX.XXX
    dns-nameservers 127.0.0.1
    
  3. SSH aktivieren
    service ssh start
    systemctl enable ssh
    
  4. DHCP Client deaktivieren
    service dhcpcd stop
    systemctl disable dhcpcd
    
  5. Pihole setup
  6. DoH (DNS over HTTPS aktivieren
  7. interne DNS Zone aufbauen

Pi-hole

Written by  on Dezember 3, 2017

Wie kann man mehr aus einer eher bescheidenen Internetanbindung herausholen? Am schnellsten ist der Traffic, der eingespart werden kann. Auch dann wenn genügend Bandbreite vorhanden wäre.
Was könnte man sparen? Spam- ähm… natürlich Werbenetzwerke und bereits bekannte Maleware bieten sich an. Am einfachsten sind Adblocker als Browser-Erweiterung zu verwenden. Aber die bekommt man so schlecht auf alle Geräte, wie zum Beispiel aufs Smart TV oder den Blueray Player. Auch am Handy schaut es eher düster aus mit Adblocking. Wer mehrere Browser verwendet muss schon auf einem Gerät mehrere Plugins einrichten und aktuell halten!
Warum also nicht Adblocking auf DNS-Ebene im ganzen Netzwerk? Exakt das setzt Pi-hole auf einem Raspberry Pi um.
Pi-hole setzt auf dnsmasq und stellt am Besten auch gleich den DHCP Dienst zur Verfügung. Der lässt sich ganz einfach über das Webinterface konfigurieren. Dieses zeigt auch recht interessante Statistiken an.

Ein zusätzlicher Vorteil ist, dass man seine DNS Anfragen über verschiedene Anbieter verteilen kann, so dass die Wahrscheinlichkeit sinkt, dass jemand alle Daten auf einmal bekommt. Und man ist nicht der verordneten Zensur der lokalen DNS Anbieter unterworfen.
Vordefiniert sind die Nameserver von Google, OpenDNS (gehört zu CISCO), Level3, Norton, Comodo und DNS.WATCH. Es steht aber frei einfach eigene zu definieren.

Fixe IP Raspbian

Written by  on April 19, 2016

Fixe IP auf die WLAN Schnittstelle

Erst das WLAN in der grafischen Oberfläche konfigurieren.
Dann in /etc/network/interfaces

allow-hotplug wlan0
iface wlan0 inet static
address 192.168.x.y
netmask 255.255.255.0
gateway 192.168.x.y
dns-nameservers 8.8.8.8 8.8.4.4
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Lässt man den DHCPD Client laufen, bekommt man zusätzlich zur statischen IP eine per DHCP zugeteilt.
Möchte man das nicht, kann der DHCP abgeschaltet werden (als root):

service dhcpcd stop
systemctl disable dhcpcd

Auf der LAN Schnittstelle funktioniert das genau so, nur dass kein wpa_supplicant angegeben werden muss.

Möchte man beide Schnittstellen auf diese Art konfigurieren läuft man in ein Routing Problem.
Es gibt eine Default Route über das LAN interface. Das führt dazu, dass auch die IP am WLAN erst erreichbar ist, sobald eine LAN Verbindung besteht. Lösen ließe sich das mit einer Multihoming Konfiguration mit zwei separaten Routing Tables. Damit lässt sich etwa erreichen, dass Anfragen am jeweils eingehenden Interface beantwortet werden. Das ist aber eher fehleranfällig und lohnt den Aufwand nicht, wenn ohnehin nur eine Schnittstelle wirklich benötigt wird. Eventuell reicht es aber auch schon, ip_forward zu setzen!?

Statische/feste IPv4-Adresse für Raspbian
Configuring WPA2 using wpa_supplicant on the Raspberry Pi

Und noch eine Kleinigkeit – es sollte auch Sichergestellt sein, dass der Pi alle 13 802.11b/g Kanäle unterstützt. Dazu in der /etc/default/crda

REGDOMAIN=DE

Linuxmagazin: Raspberry Pi 3 Model B