Home Assistant – Server Monitoring mit Open Hardware Monitor

Wer zuhause einen Server betreibt hat häufig früher oder später den Wunsch diesen auch zu monitoren. So können Probleme früh erkannt werden und im Fehlerfall eine Benachrichtigung per E-Mail oder Push Nachricht auf das Handy erfolgen. Wird bereits eine Hausautomatisierung mit Home Assistant betrieben hat man bereits alles an der Hand um diesen Task zu erledigen. Aufbereitet kann dies dann wie auf dem Bild rechts aussehen.

Mit einem „Ping“ Sensor kann der Server im regelmäßigen Intervall angepingt werden und seine Up-Time überwacht werden. Außerdem lassen sich mit dem Open Hardware Monitor die Hardware überwachen. Dazu zählt u.a. die Temperatur der CPU, dessen Auslastung, die Umdrehungsgeschwindigkeit der Lüfter oder der Füllstand der Festplatten.





Open Hardware Monitor installieren

Der Open Hardware Monitor ist eine kostenlose Open Source Software zum Monitoren der Hardware. Die Installation beschränkt sich auf das Entpacken des Archives und Ausführen der „OpenHardwareMonitor.exe“ als Administrator. Anschließend sollten noch einige Einstellungen zum AutoStart vorgenommen werden und der Webserver aktiviert werden. Er ermöglicht, das neben der Windows-Oberfläche eine Webseite mit allen Werten vorhanden ist. http://localhost:8085/

Options -> Start minimized
Options -> Minimize to tray
Options -> Minimize on close
Options -> Run on Windows Startup

Options -> Remote Webserver -> Run















Windows Firewall konfigurieren

Damit die Open Hardware Monitor Daten abgerufen werden können muss noch der Port 8085 (TCP) in der Windows Firewall freigegeben werden. Am schnellsten kommst du zur Windows Firewall Management Console über das „Ausführen“ Fenster
Windows Taste + R -> "wf.msc" eintippen -> Ok
Dort dann auf „Eingehende Regeln“ und „Neue Regel…“.

Home Assistant Konfiguration

In Home Assistant ist die Integration schnell erledigt. Es muss lediglich ein neuer Sensor vom Typ „openhardwaremonitor“ in der „/config/configuration.yaml“ hinzugefügt werden. Dies ist z.B. über den Web-Editor möglich.

sensor:
  - platform: openhardwaremonitor
    host: 192.168.1.10

Wer auch den Online Status / UpTime des Servers überwachen möchte pingt diesen zyklisch mit dem BinarySensor „ping“ an:

binary_sensor:
  - platform: ping
    name: 'NAS Status'
    host: 192.168.1.10
    count: 2
    scan_interval: 60

Anschließend muss Home Assistant neu gestartet werden.

Um eine Visualisierung wie bei dem Screenshot am Anfang des Artikels zu bekommen verende ich die Custom Components Vertical Stack In Card und Bar Card. Die Entity Namen variieren je nach Hardware und können unter dem Menüpunkt Entwicklerwerkzeuge -> Zustände nach geschlagen werden.

type: custom:vertical-stack-in-card
cards:
  - type: entity
    entity: binary_sensor.farm_two
  - type: horizontal-stack
    cards:
      - type: gauge
        entity: sensor.farm_two_intel_pentium_silver_j5040_load_cpu_total
        min: 0
        max: 100
        name: CPU Load
      - type: gauge
        entity: sensor.farm_two_intel_pentium_silver_j5040_temperatures_cpu_package
        min: 0
        max: 100
        name: CPU Temp
      - type: gauge
        entity: sensor.farm_two_generic_memory_load_memory
        min: 0
        max: 100
        name: Memory Load
  - type: divider
  - type: custom:bar-card
    entities:
      - entity: sensor.farm_two_intenso_ssd_sata_iii_load_used_space
        animation:
          state: 'on'
        name: 'C: System'
        icon: mdi:harddisk
    columns: '0'
    animation:
      state: 'on'
    direction: right
    height: '100'
  - type: divider
  - type: entities
    entities:
      - icon: mdi:web
        name: Open Hardware Monitor
        type: weblink
        url: http://192.168.1.10:8085/

Möchtest du den Home Assistant Server überwachen so schau dir diesen Artikel an.

Home Assistant – Reolink IP Kamera einbinden

Hardware

Bei der Auswahl einer Reolink Kamera für die Integration in Home Assistant muss etwas darauf aufgepasst werden, dass diese auch mit Home Assistant zusammen arbeitet. Bei dem in diesem Tutorial Plugin werden unten auf der Seite einige Modelle gelistet die nicht funktionieren. z.B. gibt es von der E1 Pro verschiedene Varianten. Die normale geht nicht, die „Zoom“ sollte aber funktionieren. Im wesentlichen liegt dies daran das Reolink bei einigen Kameras auf ein Hauseigenes Protokoll setzt. Es ist daher wichtig eine Kamera zu kaufen die das standardisierte RTSP (Real Time Streaming Protocol) unterstützt.

Kamera in das Netzwerk integrieren

Viele der Kameras können wahlweise über Ethernet Kabel oder WLAN angeschlossen werden.

  • Ethernet: Hier empfiehlt sich der Reolink Client für Windows. Er kann die Kamera im Netzwerk finden und einrichten. Wichtig ist ihr eine feste IP-Adresse zu zuweisen, damit die Kamera immer unter der selben Adresse für Home Assistant erreichbar ist.
  • WLAN: Die WLAN Einrichtung geht am einfachsten über die Handy App. Hierbei wird ein QR Code unter der Kamera gescannt. Anschließend werden die WLAN Zugangsdaten eingetragen und die APP generiert hieraus einen QR Code. Dieser beinhaltet die WLAN Zugangsdaten und wird dann mit der Kamera abgefilmt. Dieses liest die Zugangsdaten aus und wählt sich in das Netzwerk ein. Anschlie0end sollte der Kamera noch eine feste IP gegeben werden. Dies geht z.B. mit der oben beschriebenen Windows Anwendung

Home Assistant Integration

Wir nutzen für die Integration der Kamera die „Home Assistant Reolink custom integration“. Am einfachsten lässt sich diese mittels HACS in Home Assistant installieren. Dazu gehst du wie unten beschrieben vor. Alternativ kannst du die Integration auch manuell installieren. Diese muss letztlich nur in das Verzeichnis „/config/custom_components/reolink_dev“ der Home Assistant Installation kopiert werden. Dazu kannst du z.B. einen Samba Server auf dem Home Assistant einrichten und über Netzwerk zugreifen.

  1. Klicke auf ACS im Home Assistant Menü
  2. Klicke auf Integrationen
  3. Klicke auf die drei Punkte in der oberen rechten Ecke
  4. und wählst „Benutzerdefinierte Repositories“
  5. Kopiere die Repository URL (https://github.com/fwestenberg/reolink_dev) in die DialogBox und
  6. wähle Integration
  7. Klicke Hinzufügen
  8. Klicke unten rechts auf den Button „durchsuchen und herunterladen von Repositories“ und suche nach Reolink
  9. Repostory hinzufügen und Home Assistant anschließend neu starten

Zum Hinzufügen der Kamera gehst du wie folgt vor:
Einstellungen -> Geräte & Dienste -> Integration hinzufügen (rechts unten) -> Reolink IP Camera eingeben und hinzufügen.

Anschließend musst du noch deine IP Adresse der Kamera einfügen und dessen Zugangsdaten. Nun sollte die Kamera als Entität in Home Assistant vorhanden sein.

Home Assistant – 7,5″ E-Paper Display (Waveshare) mit ESPHome ansteuern – Wetterstation

In diesem Tutorial beschreibe ich wie ein Waveshare e-Paper Display über ESPHome mit Home Assistant verbunden wird und als Wetterstation und zum Anzeigen weiterer Sensor Daten verwendet werden kann.

Hardware

  • E-Paper Display: Waveshare 7.5 Inch E-Paper Display HAT Module V2 Kit 800×480 Resolution. Das Display führt einen SPI Anschluss über ein Flachbandkabel heraus und kann ohne Lötarbeiten mit dem unten genannten ESP32 Driver Board verbunden werden.

  • ESP32 Driver Board: Waveshare Universal e-Paper Driver Board mit Wifi und Bluetooth. Das Board erlaubt den direkten Anschluss des Display über SPI. Wichtig ist hier die ESP32 Version zu kaufen. Es gibt auch ein ESP8266 Driver Board das ich zuerst gekauft habe. Dieses hat aber für das 7,5″ E-Paper Display nicht genug Leistung.
  • Gehäuse: Waveshare 7.5inch e-Paper Raw Panel Case. Das Gehäuse ist perfekt auf das Display abgestimmt.

  • Es wird mit Magneten zusammengehalten, so das das Display sehr schnell ein- und ausgebaut werden kann. Ich habe den ESP32 einfach auf der Rückseite montiert und mit Holz und etwas Farbe einen Ständer dran gebaut. Siehe obige Bilder. Sehr Flache Kontroller finden ggf. auch im Gehäuse Platz.

Software Konfiguration

Datenquelle – Home Assistant Weather Integration

Als Datenquelle für die Wetterinformationen nutze ich die Home Assistant Weather Integration. Diese ist in der Regel standardmäßig in Home Assitant integriert. Dabei handelt es sich um folgende Kachel im UI:

Gespeist wird die Kachel über den Sensor „weather.home“ den du in den „Entwicklerwerkzeuge -> Zustände“ finden solltest:

Um die Wetterdaten an das Display zu senden habe ich zwei neue Template Sensoren angelegt die die Werte als CSV (Comma Separated Values) dem Display zu Verfügung stellen. Die Sensoren müssen in der „config/configuration.yaml“ Datei eingetragen werden.

sensor:
  - platform: template
    sensors:
      epaper_weather_actual:
        #weahtericon;temperature;humidity,pressure;wind_speed
        value_template: "{{states('weather.home')}};{{state_attr('weather.home', 'temperature') | replace('.',',') }};{{state_attr('weather.home', 'humidity') | replace('.',',') }};{{state_attr('weather.home', 'pressure') | replace('.',',') }};{{state_attr('weather.home', 'wind_speed') | replace('.',',') }}"
      epaper_weather_forecast:
        value_template: "{{as_timestamp(strptime(state_attr('weather.home', 'forecast')[0]['datetime'], '%Y-%m-%dT%H:%M')) | timestamp_custom('%a') }};{{state_attr('weather.home', 'forecast')[0]['condition']}};{{state_attr('weather.home', 'forecast')[0]['temperature']| replace('.',',') }};{{state_attr('weather.home', 'forecast')[0]['templow']| replace('.',',') }};{{as_timestamp(strptime(state_attr('weather.home', 'forecast')[1]['datetime'], '%Y-%m-%dT%H:%M')) | timestamp_custom('%a') }};{{state_attr('weather.home', 'forecast')[1]['condition']}};{{state_attr('weather.home', 'forecast')[1]['temperature']| replace('.',',') }};{{state_attr('weather.home', 'forecast')[1]['templow']| replace('.',',') }};{{as_timestamp(strptime(state_attr('weather.home', 'forecast')[2]['datetime'], '%Y-%m-%dT%H:%M')) | timestamp_custom('%a') }};{{state_attr('weather.home', 'forecast')[2]['condition']}};{{state_attr('weather.home', 'forecast')[2]['temperature']| replace('.',',') }};{{state_attr('weather.home', 'forecast')[2]['templow']| replace('.',',') }};{{as_timestamp(strptime(state_attr('weather.home', 'forecast')[3]['datetime'], '%Y-%m-%dT%H:%M')) | timestamp_custom('%a') }};{{state_attr('weather.home', 'forecast')[3]['condition']}};{{state_attr('weather.home', 'forecast')[3]['temperature']| replace('.',',') }};{{state_attr('weather.home', 'forecast')[3]['templow']| replace('.',',') }};{{as_timestamp(strptime(state_attr('weather.home', 'forecast')[4]['datetime'], '%Y-%m-%dT%H:%M')) | timestamp_custom('%a') }};{{state_attr('weather.home', 'forecast')[4]['condition']}};{{state_attr('weather.home', 'forecast')[4]['temperature']| replace('.',',') }};{{state_attr('weather.home', 'forecast')[4]['templow']| replace('.',',') }}"
      epaper_sunrise:
        value_template: "{{ as_timestamp(strptime(state_attr('sun.sun', 'next_dawn'), '%Y-%m-%dT%H:%M')) | timestamp_custom('%H:%M') }}"
      epaper_sunset:
        value_template: "{{ as_timestamp(strptime(state_attr('sun.sun', 'next_dusk'), '%Y-%m-%dT%H:%M')) | timestamp_custom('%H:%M') }}"

ESP32 mit ESPHome einrichten

Das Display habe ich mit ESPHome eingerichtet. D.h. du must die ESPHome Integration in Home Assistant installieren und den ESP32 Mikrokontroller hinzufügen. Dazu verbindest du diesen mittels USB mit Home Assistant und gehst in die ESPHome Oberfläche:

Einstellungen -> Add-ons, Backups & Supervisor -> ESPHome -> Benutzeroberfläche öffnen

Hier kannst du dann mit mit „New Device“ den Mikrokontroller als ESP32 hinzufügen und diesem einen Namen geben. Siehe nachfolgende Screenshots:



Sobald der ESP32 in ESPHome integriert ist, sollte Home Assistant diesen als neue Integration finden. „Einstellungen -> Geräte & Dienste -> Integrationen“. Hier muss die Integration hinzugefügt werden, damit das Display auf die Wetterdaten von Home Assistant zugreifen kann.

ESPHome Display Konfiguration

Das Display nutzt Google Open Sans Font für die Schriften und Material Design Icon Font um z.B. die Wetter Bilder zu zeigen. Diese müsst ihr herunterladen und in den Order „config\esphome\fonts“ legen. Am einfachsten geht dies wenn ihr Samba auf dem Home Assistant einrichtet und dann über das Netzwerk auf die Verzeichnisse zugreift.
\\HOMEASSISTANT_IP\config\esphome\fonts

In der Konfiguration nutze ich die UniCodes der Bilder. Dies ist etwas robuster ein falsch eingestelltes Encoding der Konfigurationsdatei so keine Probleme bereitet. Die Unicodes der Material Design Icons kannst du hier finden.
Nachfolgend findest du meine ESPHome Konfiguration die eine Uhrzeit, Sonnen Auf- und Untergangzeiten, UpTime, WLAN Signalstärke und natürlich die Wetterdaten anzeigt:

esphome:
  name: epaper75

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
  password: "OTAPW"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Epaper75 Fallback Hotspot"
    password: "FALLBACKPW"

captive_portal:


# Example configuration entry
spi:
  clk_pin: 13
  mosi_pin: 14

# --- Fonts --------------------------------------------------------------------  
font:
  - file: 'fonts/OpenSans-Bold.ttf'
    id: openSansBold_font
    size: 20
    glyphs:
      ['&', '@', '!', '?', ',', '.', '"', '%', '(', ')', '+', '-', '_', ':', '°', '0',
       '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
       'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
       'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
       'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
       'u', 'v', 'w', 'x', 'y', 'z', 'å', 'ä', 'ö', 'ü', 'Ä', 'Ö', 'Ü', '/', '€', '’', 'ß']

  - file: 'fonts/OpenSans-Bold.ttf'
    id: watch_font
    size: 90
    glyphs:
      [':', ".", '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
      
  # https://pictogrammers.github.io/@mdi/font/6.5.95/    Unicodes
  - file: 'fonts/materialdesignicons-webfont.ttf'
    id: materialdesign_icons_25
    size: 25
    glyphs: [
      "\U000F050F", # mdi-thermometer
      "\U000F0F55", # mdi-home-thermometer-outline
      "\U000F0F54", # mdi-home-thermometer
      "\U000F058E", # mdi-water-percent
      "\U000F029A", # mdi-gauge
      "\U000F059B", # mdi-weather-sunset
      "\U000F059C", # mdi-weather-sunrise
      "\U000F10C2", # mdi-thermometer-high
      "\U000F10C3"  # mdi-thermometer-low
      ]
      
  - file: 'fonts/materialdesignicons-webfont.ttf' 
    id: materialdesign_icons_32
    size: 32
    glyphs: [
      "\U000F091F", # mdi-wifi-strength-1
      "\U000F0922", # mdi-wifi-strength-2
      "\U000F0925", # mdi-wifi-strength-3
      "\U000F0928", # mdi-wifi-strength-4
      "\U000F092B", # mdi-wifi-strength-alert-outline
      
      "\U000F0590", # weather-cloudy
      "\U000F0F2F", # weather-cloudy-alert
      "\U000F0E6E", # weather-cloudy-arrow-right
      "\U000F0591", # weather-fog
      "\U000F0592", # weather-hail
      "\U000F0F30", # weather-hazy
      "\U000F0898", # weather-hurricane
      "\U000F0593", # weather-lightning
      "\U000F067E", # weather-lightning-rainy
      "\U000F0594", # weather-night
      "\U000F0F31", # weather-night-partly-cloudy
      "\U000F0595", # weather-partly-cloudy
      "\U000F0F32", # weather-partly-lightning
      "\U000F0F33", # weather-partly-rainy
      "\U000F0F34", # weather-partly-snowy
      "\U000F0F35", # weather-partly-snowy-rainy
      "\U000F0596", # weather-pouring
      "\U000F0597", # weather-rainy
      "\U000F0598", # weather-snowy
      "\U000F0F36", # weather-snowy-heavy
      "\U000F067F", # weather-snowy-rainy
      "\U000F0599", # weather-sunny
      "\U000F0F37", # weather-sunny-alert
      "\U000F14E4", # weather-sunny-off
      "\U000F059A", # weather-sunset
      "\U000F059B", # weather-sunset-down
      "\U000F059C", # weather-sunset-up
      "\U000F0F38", # weather-tornado
      "\U000F059D", # weather-windy
      "\U000F059E" # weather-windy-variant
      ]
      
  - file: 'fonts/materialdesignicons-webfont.ttf' 
    id: materialdesign_icons_50
    size: 80
    glyphs: [
      "\U000F0590", # weather-cloudy
      "\U000F0F2F", # weather-cloudy-alert
      "\U000F0E6E", # weather-cloudy-arrow-right
      "\U000F0591", # weather-fog
      "\U000F0592", # weather-hail
      "\U000F0F30", # weather-hazy
      "\U000F0898", # weather-hurricane
      "\U000F0593", # weather-lightning
      "\U000F067E", # weather-lightning-rainy
      "\U000F0594", # weather-night
      "\U000F0F31", # weather-night-partly-cloudy
      "\U000F0595", # weather-partly-cloudy
      "\U000F0F32", # weather-partly-lightning
      "\U000F0F33", # weather-partly-rainy
      "\U000F0F34", # weather-partly-snowy
      "\U000F0F35", # weather-partly-snowy-rainy
      "\U000F0596", # weather-pouring
      "\U000F0597", # weather-rainy
      "\U000F0598", # weather-snowy
      "\U000F0F36", # weather-snowy-heavy
      "\U000F067F", # weather-snowy-rainy
      "\U000F0599", # weather-sunny
      "\U000F0F37", # weather-sunny-alert
      "\U000F14E4", # weather-sunny-off
      "\U000F059A", # weather-sunset
      "\U000F059B", # weather-sunset-down
      "\U000F059C", # weather-sunset-up
      "\U000F0F38", # weather-tornado
      "\U000F059D", # weather-windy
      "\U000F059E" # weather-windy-variant
    ]


# --- Display Layout -----------------------------------------------------------
display:
  - platform: waveshare_epaper
    cs_pin: 15
    dc_pin: 27
    busy_pin: 25
    reset_pin: 26
    model: 7.50inv2
    update_interval: 60s
    lambda: |
     int x, y;
     
     // Grid
     it.line(0, 108, 800, 108); // Horizontal header
     it.line(0, 440, 800, 440); // Horizontal footer
     it.line(266, 108, 266, 440); // Vertical first line
     it.line(532, 108, 532, 440); // Vertical second line
     
    
     // Sunrise / Sunset
     it.printf(5, 40, id(materialdesign_icons_25), TextAlign::BASELINE_LEFT, "\U000F059C");
     it.printf(35, 40, id(openSansBold_font), TextAlign::BOTTOM_LEFT, id(epaper_sunrise).state.c_str());
      
     it.printf(5, 70, id(materialdesign_icons_25), TextAlign::BASELINE_LEFT, "\U000F059B");
     it.printf(35, 70, id(openSansBold_font), TextAlign::BOTTOM_LEFT, id(epaper_sunset).state.c_str());
     
     // Temperature inside / outside
     it.printf(100, 35, id(materialdesign_icons_25), TextAlign::BASELINE_LEFT, "\U000F0F54"); 
     //it.printf(130, 40, id(openSansBold_font), TextAlign::BOTTOM_LEFT, "%s °C", id(temperature_inside).state.c_str()); // use your own temp sensor
     
     it.printf(100, 65, id(materialdesign_icons_25), TextAlign::BASELINE_LEFT, "\U000F0F55"); 
     //it.printf(130, 70, id(openSansBold_font), TextAlign::BOTTOM_LEFT, "%s °C", id(temperature_outside).state.c_str());// use your own temp sensor
     
     //Time
     it.strftime(540, 100, id(watch_font),TextAlign::BOTTOM_LEFT, "%H:%M", id(time_homeassistant).now());
     it.strftime(540, 110, id(openSansBold_font),TextAlign::BOTTOM_LEFT, "%A, %d.%m.%y, KW %W", id(time_homeassistant).now());
      
     // Current weather 
     // https://www.home-assistant.io/integrations/weather/
     // weahtericon;temperature;humidity,pressure;wind_speed
     // ex. data:   cloudy;5,9;50;1025,6;16,9

     std::map <std::string, std::string> weatherMap =  { 
      std::make_pair("exceptional","\U000F0F2F"),
      std::make_pair("cloudy","\U000F0590"),
      std::make_pair("cloudy-alert","\U000F0F2F"),
      std::make_pair("fog","\U000F0591"),
      std::make_pair( "hail","\U000F0592"),
      std::make_pair( "hazy","\U000F0F30"),
      std::make_pair( "hurricane","\U000F0898"),
      std::make_pair( "lightning","\U000F0593"),
      std::make_pair( "lightning-rainy","\U000F067E"),
      std::make_pair( "night","\U000F0594"),
      std::make_pair( "clear-night","\U000F0594"),
      std::make_pair( "night-partly-cloudy","\U000F0F31"),
      std::make_pair( "partly-cloudy","\U000F0595"),
      std::make_pair( "partlycloudy","\U000F0595"),
      std::make_pair( "partly-lightning","\U000F0F32"),
      std::make_pair( "partly-rainy","\U000F0F33"),
      std::make_pair( "partly-snowy","\U000F0F34"),
      std::make_pair( "partly-snowy-rainy","\U000F0F35"),
      std::make_pair( "pouring","\U000F0596"),
      std::make_pair( "rainy","\U000F0597"),
      std::make_pair( "snowy","\U000F0598"),
      std::make_pair( "snowy-heavy","\U000F0F36"),
      std::make_pair( "snowy-rainy","\U000F067F"),
      std::make_pair( "sunny","\U000F0599"),
      std::make_pair( "sunny-alert","\U000F0F37"),
      std::make_pair( "sunny-off","\U000F14E4"),
      std::make_pair( "tornado","\U000F0F38"),
      std::make_pair( "windy","\U000F059D"),
      std::make_pair( "windy-variant","\U000F059E")};
      
     if(id(epaper_weather_actual).has_state()) {
       std::string actualWeatherCSV = id(epaper_weather_actual).state; //("cloudy;5,9;50;1025,6;16,9");
       ESP_LOGI("Weather today", "%s", actualWeatherCSV.c_str());
       std::size_t current, previous = 0;
       char delim = ';';
       current = actualWeatherCSV.find(delim);
       x = 5; y = 200;
       for (int i=0; i<5; i++) {
           const char * value = actualWeatherCSV.substr(previous, current - previous).c_str();
           if(i == 0) { // icon
             std::string unicodeWeatherIcon = weatherMap.at(value);
             it.printf(x , y, id(materialdesign_icons_50), TextAlign::BASELINE_LEFT, unicodeWeatherIcon.c_str()); 
             y = 120;
             x = x + 90;
           } else if (i == 1) { // temperature
              it.printf(x, y, id(openSansBold_font), TextAlign::BASELINE_LEFT,"%s  °C", value);
           } else if (i == 2) { // humidity
              it.printf(x, y, id(openSansBold_font), TextAlign::BASELINE_LEFT,"%s %s", value, "%");
           } else if (i == 3) { // pressure
              it.printf(x, y, id(openSansBold_font), TextAlign::BASELINE_LEFT,"%s PA", value);
           } else if (i == 4) { // windpeed
              it.printf(x, y, id(openSansBold_font), TextAlign::BASELINE_LEFT,"%s m/s", value);
           }
           y += 25;
           previous = current + 1;
           current = actualWeatherCSV.find(delim, previous);
       }
     }
     
     // Weather Forecast
     if(id(epaper_weather_forecast).has_state()) {
       std::string forecastWeatherCSV = id(epaper_weather_forecast).state; // Mon;sunny;16,5;5,1;Tue;sunny;17,2;6,8;Wed;sunny;15,4;2,7;Thu;sunny;15,3;4,6;Fri;partlycloudy;16,0;3,5
       ESP_LOGI("Weather forecast", "%s", forecastWeatherCSV.c_str());
       std::size_t current, previous = 0;
       char delim = ';';
       current = forecastWeatherCSV.find(delim);
       x = 5; y = 270;
       int nextRow =0;
       for (int i=0; i<20; i++) {
           const char * value = forecastWeatherCSV.substr(previous, current - previous).c_str();
           if(i == 0 || i == 4 || i == 8 || i == 12 || i == 16) { // Weekday
              it.printf(x, y, id(openSansBold_font), TextAlign::BASELINE_LEFT,"%s", value);
           } else if (i == 1 || i == 5 || i == 9 || i == 13 || i == 17) { // icon
             it.printf(x + 50  , y, id(materialdesign_icons_32), TextAlign::BASELINE_LEFT, weatherMap.at(value).c_str()); 
           } else if (i == 2 || i == 6 || i == 10 || i == 14 || i == 18) { // Temp high
              it.printf(x + 100 , y, id(openSansBold_font), TextAlign::BASELINE_LEFT,"%s°C", value);
           } else if (i == 3 || i == 7 || i == 11 || i == 15 || i == 19) { // Temp low
              it.printf(x + 170, y, id(openSansBold_font), TextAlign::BASELINE_LEFT,"%s °C", value);
           }
           nextRow = nextRow + 1;
           if (nextRow == 4) {
             y += 28;
             nextRow = 0;
           }
           previous = current + 1;
           current = forecastWeatherCSV.find(delim, previous);
       }
     }
      
     // -- Footer ---
     //IP Adress
     if (id(ip_address).has_state()) {
         it.printf(5, 470, id(openSansBold_font), TextAlign::BASELINE_LEFT, "IP: %s", id(ip_address).state.c_str());
     }
      
     // WiFi Signal Strength
     if(id(wifisignal).has_state()) {
       x = 210, y = 475;
       if (id(wifisignal).state >= -50) {
           it.print(x, y, id(materialdesign_icons_32), TextAlign::BOTTOM_RIGHT, "\U000F0928");
           ESP_LOGI("WiFi", "Exellent");
       } else if (id(wifisignal).state  >= -60) {
           it.print(x, y, id(materialdesign_icons_32), TextAlign::BOTTOM_RIGHT, "\U000F0925");
           ESP_LOGI("WiFi", "Good");
       } else if (id(wifisignal).state  >= -67) {
           it.print(x, y, id(materialdesign_icons_32), TextAlign::BOTTOM_RIGHT, "\U000F0922");
           ESP_LOGI("WiFi", "Fair");
       } else if (id(wifisignal).state  >= -70) {
           it.print(x, y, id(materialdesign_icons_32), TextAlign::BOTTOM_RIGHT, "\U000F091F");
           ESP_LOGI("WiFi", "Weak");
       } else {
           it.print(x, y, id(materialdesign_icons_32), TextAlign::BOTTOM_RIGHT, "\U000F092B");
           ESP_LOGI("WiFi", "Unlikely");
       }
     }
     
     // ESP Home UpTime
     if (id(uptime_human).has_state()) {
         it.printf(520, 470, id(openSansBold_font), TextAlign::BASELINE_LEFT, "UpTime: %s", id(uptime_human).state.c_str());
     }
     
     
     
    

# --- Sensors ------------------------------------------------------------------
sensor:

    # ESP Home UpTime
  - platform: uptime
    id: uptime_sensor
    update_interval: 60s
    on_raw_value:
      then:
        - text_sensor.template.publish:
            id: uptime_human
            state: !lambda |-
              int seconds = round(id(uptime_sensor).raw_state);
              int days = seconds / (24 * 3600);
              seconds = seconds % (24 * 3600);
              int hours = seconds / 3600;
              seconds = seconds % 3600;
              int minutes = seconds /  60;
              seconds = seconds % 60;
              return (
                (days ? String(days) + ":" : "000:") +
                (hours ? String(hours) + ":" : "00:") +
                (minutes ? String(minutes) + ":" : "00:") +
                (String(seconds) + "")
              ).c_str();  
  - platform: wifi_signal
    id: wifisignal
    update_interval: 60s

text_sensor:
  # ESP WLAN IP Address
  - platform: wifi_info
    ip_address:
      name: "${name} IP Address"
      id: ip_address
  # ESP Home UpTime
  - platform: template
    id: uptime_human
    icon: mdi:clock-start
  # Weather forecast 
  - platform: homeassistant
    id: epaper_weather_actual
    entity_id: sensor.epaper_weather_actual
    internal: true
  - platform: homeassistant
    id: epaper_weather_forecast
    entity_id: sensor.epaper_weather_forecast
    internal: true
  - platform: homeassistant
    id: epaper_sunrise
    entity_id: sensor.epaper_sunrise
    internal: true
  - platform: homeassistant
    id: epaper_sunset
    entity_id: sensor.epaper_sunset   
    internal: true

time:
  - platform: homeassistant
    id: time_homeassistant

Home Assistant – Benzinpreise anzeigen

Tankerkönig biete eine REST API mit der aktuelle Spritpreise abgefragt werden können. Die Integration in Home Assistant gestaltet sich einfach, da bereits ein Plugin verfügbar ist. Um die Spritpreise als Sensor zur Verfügung zu stellen reichen folgende Schritte:

  • Zunächst must du einen API Schlüssel für die Nutzung der Tankerkönig API beantragen. Das geht auf der Tankerkönig Webseite bei dem Menüpunkt „API-Key“.
  • Mit dem API-Key kannst du nun alle Tankstellen im Umkreis von x Kilometern um einen Punkt abfragen. Dazu must du in der unteren URL deinen gewünschten Längen und Breitengrad eingeben. Diesen findest du z.B. mit Google Maps heraus, indem du in der Karte einen Rechtsklick machst. In dem PopUp Menü stehen dann oben die Koordinaten und lassen sich direkt in die Zwischenablage kopieren. Der Parameter „rad“ gibt den Radius in Kilometern um deinen Punkt an in dem die Tankstellen aufgelistet werden sollen und „key“ ist dein beantragter API Key.
    https://creativecommons.tankerkoenig.de/json/list.php?lat=51.297&lng=6.850&rad=1.5&sort=dist&type=all&apikey=00000000-0000-0000-0000-000000000002
    
  • Um die Tankstellen in Home Assistant zu integrieren must du noch die Tankerkönig Integration in der configurations.yaml eintragen und festlegen welche Tankstellen mit welchem Kraftstofftyp, in welchem Intervall abgefragt werden sollen. Nach dem Ändern der Konfiguration muss Home Assistant neu gestartet werden.

    tankerkoenig:
      api_key: "00000000-0000-0000-0000-000000000002"
      fuel_types:
        - "e5" 
      scan_interval: "0:10:01"
      stations:
        - 79fb1f24-bebb-489e-841f-728f9053b555
        - 7e4c09ab-ab7d-4a13-af99-d043a611e410
      show_on_map: true
    
  • Nun solltest du für jede iengetragene Tabkstelle einen Sensor finden. Diese beginnen mit „sensor.tankerkoenig_“. Kontrollieren kannst du dies z.B. in der Liste der Sensoren bei „Entwicklerwerkzeuge -> Zustände“. Eine Integration in die GUI sieht in der einfachsten Form so aus.
  • Pro Tipp: Ich hatte es schon zwei mal das alle Tankerkönig Sensoren nicht verfügbar waren. Dies lag bei mir daran, das eine der Tankstellen in meiner Liste eine neue ID erhalten hatte. Dies kommt z.B. vor wenn eine Tankstelle von einer anderen Marke übernommen wird. Hier scheint das Home Assistant Plugin nicht sehr fehlertolerant programmiert zu sein, so das dann alle Sensoren nicht verfügbar sind. In einem solchen Fall empfiehlt es sich daher einmal seine konfigurierten Tankstellen IDs mit denen aus der Umkreissuche abzugleichen.

Home Assistant – Netzwerkfreigaben für Dateien mit Samba

Um auf die Konfigurationsdateien auf dem Home Assistant direkt unter Windows zugreifen zu können, empfiehlt es sich, diese per Netzwerkfreigabe zur Verfügung zu stellen. Unter Linux sorgt die Samba für die Unterstützung des SMB/CIFS Protokolls für die Netzwerkfreigaben. Samba kannst du einfach als Erweiterung aus dem Home Assistant Add-On Store laden:

Einstellungen -> Add-ons, Backups & Supervisor -> Add-on Store 
-> "Samba" (Im Suchfeld eingeben) -> Installieren

In der Konfiguration des Plugins musst du dann noch dein Arbeitsgruppen-Namen deines Windows Netzwerkes eintragen, sowie deinen Windows-Account, mit dem du dich auf die Home Assistant Netzwerkfreigabe verbinden möchtest. Bei den „Allowed Hosts“ kannst du die Netzwerksegmente einstellen, die Zugriff erhalten. In der Regel fällt dein privates Netzwerk bereits in den unten angegebenen Bereich.

workgroup: WORKGROUP
username: USER
password: PASSWORD
allow_hosts:
  - 10.0.0.0/8
  - 172.16.0.0/12
  - 192.168.0.0/16
veto_files:
  - ._*
  - .DS_Store
  - Thumbs.db
  - icon?
  - .Trashes
compatibility_mode: false
interface: eth0

Nun ist alles eingerichtet und du kannst einfach auf die Dateien des Home Assistant zugreifen, indem du im Windows Dateiexplorer den UNC Pfad deines Home Assistant eingibst.

\\IP_ADRESSE_HOME_ASSISTANT

Unter „Computer -> Netzlaufwerk verbinden“ kannst du der Netzwerkfreigabe auch einen permanenten Laufwerksbuchstaben zuweisen.

Die zentrale Konfiguration von Home Assistant findest du im Verzeichnis „config“ in der Datei „configurations.yaml“. Custom Components werden im Verzeichnis „config/custom_components“ abgelegt. Diese können komfortabel mit HACS installiert werden, oder manuell in das Verzeichnis kopiert werden.

Home Assistant – Browserbasierte Konfiguration

Die Konfiguration von Home Assistant erfolgt mittels YAML Syntax in der Datei „/config/configuration.yaml“. Wenn YAML für dich neu ist der wichtige Hinweis, dass die Verschachtelung über Leerzeichen erreicht wird und diese daher für eine korrekt formatierte Datei wichtig ist. Achte also immer auf die Einrückungen.

Du kannst die Datei direkt auf deinem Home Assistant Server editieren. z.B. indem du auf diesen mittels SSH, FTP oder Samba (CIFS Windows Share) zugreifst. Komfortabler geht dies aber direkt über die Home Assistant Weboberfläche mithilfe des „File Editor“ Plugins. Das Plugin zeigt dir auch oben rechts mit einem roten Icon wenn deine Datei nicht YAML konform ist.

Das Plugin ist Ruck Zuck installiert:

Einstellungen -> Add-ons, Backups & Supervisor -> Add-on Store -> "File Editor" (Im Suchfeld eingeben) -> Installieren

Ein Klick auf „Benutzeroberfläche öffnen“ startet den Editor.

Das Ordnersymbol oben rechts lässt dich die zentrale Konfigurationsdatei „/config/configuration.yaml“ auswählen.

Home Assistent – Systemmonitor für CPU, RAM, HDD etc.

Mit dem in Home Assistent integrierten Sensor Systemmonitor lassen sich auf einfache weise CPU und Arbeitsspeicher Auslastung sowie Festplattenverbrauch anzeigen sowie weitere Werte anzeigen. Eine komplette Übersicht über die möglichen Sensoren findest du auf der Systemmonitor Seite.

Der Systemmonitor muss in die Konfigurationsdatei „/config/configuration.yaml“ als Sensor eingetragen werden. Dazu kann z.B. das nachträglich zu installierende Plugin „File Editor“ verwendet werden. „Supervisor -> Installierte Add-ons -> File Editor“. Ist der File Editor noch nicht installiert kann dies im Add-on Store nachgeholt werden.

sensor:
  - platform: systemmonitor
    resources:
      - type: processor_use
      - type: processor_temperature
      - type: load_1m		
      - type: load_5m		
      - type: load_15m	
      - type: memory_free
      - type: memory_use
      - type: memory_use_percent
      - type: disk_use
        arg: /
      - type: disk_free
        arg: /
      - type: disk_use_percent
        arg: /
      - type: network_in
        arg: eth0
      - type: network_out
        arg: eth0
      - type: last_boot

In der „Übersicht“ können die neuen Sensoren nun z.B. mit einer „Elemente“ Karte hinzugefügt werden. Diese verfügt auch über einen Code Editor in dem der unten stehende Code für die Sensor Entities übernommen werden kann. Wer es etwas Facy haben will schaut sich einmal History Graph an.

type: entities
entities:
  - entity: sensor.last_boot
  - entity: sensor.disk_free
  - entity: sensor.disk_use
  - entity: sensor.disk_use_percent
  - entity: sensor.processor_temperature
  - entity: sensor.processor_use_percent
  - entity: sensor.load_1m
  - entity: sensor.load_5m
  - entity: sensor.load_15m
  - entity: sensor.network_in_eth0
  - entity: sensor.network_out_eth0
title: Systemmonitor

Home Assistent (Hass.io) Installation auf dem Raspberry Pi

Mit Hass.io steht für den Raspberry Pi eine einfach zu installierende Home Assistant Version zu Verfügung. Bei Hass.io handelt es sich um komplett Paket aus Linux Betriebssystem und bereits installiertem Home Assistant. Home Assistant ist Open Source und biete eine herstellerübergreifende Integration von Smarthome Komponenten. Das System lässt sich einfach über eine Weboberfläche verwalten, aktualisieren und mit Add-ons, die über einen „Add-on Store“ bereit gestellt werden, erweitern.

Inhaltsverzeichnis

Hardware

Home Assistant läuft auf dem Raspberry Pi ab Version 3. Da das System 24/7 läuft ist der Raspberry Pi mit seinem geringen Strombedarf die perfekte Basis für die Smarthome zentrale. Ihr braucht folgende Komponenten:

Installation

Die Basis Installation von Hass.io ist sehr einfach. Du must nur das passende Image auf eine SD Karte schreiben und deinen Raspberry Pi damit starten. Zum Schreiben des Images kannst du die Software Balena Etcher verwenden. Sie erlaubt dir das Schreiben von Image Dateien von der Festplatte oder kann alternativ diese auch selber herunterladen.

Alle Hass.io Releases sind auf GitHub verfügbar. Hier kannst du das Image passend zu deinem Raspberry Pi herunterladen. Für einen Raspberry Pi 4 wäre dies z.B. die Datei „haos_rpi4-6.2.img.xz“. Wir wählen den Weg Etcher das Image für uns herunterzuladen „Flash from URL“ und kopieren daher nur den Download Link von Github und fügen ihn in Etcher ein:

Etcher lädt nun das Image herunter. Über „Select Target“ kann dann die Ziel SD Card ausgewählt werden. Häufig ist diese auch schon korrekt vor belegt wenn nur eine SD Karte im System gefunden wurde.

Mit einem Klick auf „Flash!“ startet dann der eigentlich Schreibvorgang auf die SD Card.

Wenn alles geklappt hat solltest du diesen Screen bekommen

Nachdem Hass.io auf die SD Kargte geschrieben wurde must du nur noch die SD Karte in den Raspberry Pi stecken, das Netzwerkkabel einstecken und ihn anschließend durch einstecken des Stromkabels starten.

Nach einigen Minuten solltest du Home Assistant über den Browser erreichen. Die Adresse ist „homeassistant.local:8123“ oder „homeassistant:8123“. Solltest du nicht auf Home Assistant kommen, probiere ihn direkt über die IP Adresse (http://X.X.X.X:8123) die der Raspberry Pi von deinem Router bekommen hat zu erreichen. Viele Router wie z.B. die Fritzbox bieten eine Übersichtseite über alle verbundenen Geräte mitsamt ihren IP Adressen.

Chia Farming mit dem Raspberry Pi 4 und Ubuntu

Dieses Tutorial zeigt dir, wie du energiesparsames Chia Farming mit dem Raspberry Pi 4, Ubuntu und externen USB Festplatten betreiben kannst. Die Konfiguration ist zudem sehr leise aufgrund des verwendeten passiven Raspberry Pi Gehäuses. Wie du Plots für diesen Farming PC erstellst erfährst du hier.

Hardware

In dem Build verwende ich folgende Hardware:

  • Raspberry Pi 4: Raspberry Pi 4 Modell B; 4 GB, ARM-Cortex-A72 4 x, 1,50 GHz, 4 GB RAM, WLAN-ac, Bluetooth 5, LAN, 4 x USB, 2 x Micro-HDMI
  • Passives Alu Gehäuse: Lüfterloses Vollaluminium Gehäuse für den Raspbery Pi. Mein aktuelles Lieblingsgehäuse mit guten Preis-Leistungsverhältnis
  • WD My Book 8 TB USB 3.0: Externe USB 3.0 8TB Festplatte
  • Netzteil: Raspberry Pi 4 USB-C Netzteil, 5.1V, 3A
  • SanDisk 64GB Micro SD Card: Micro SD Card mit 64 GB. Aus eigener Erfahrung würde ich keine kleinere Karte nehmen, da du aufgrund der schnell wachsenden Blockchain sonst schnell an die Grenzen des Speicherplatzes stößt.
  • Micro HDMI Adapter

Ubuntu Desktop Installation

  1. Als Betriebssystem für den Raspberry Pi verwenden wir Ubuntu Desktop 21.04 mit Gnome Desktop. Dieses kannst du einfach mit Raspberry Pi Imager herunterladen und auf die SD Card schreiben.
  2. Stecke die SD Card in den Raspberry Pi und schließe Tastatur, Maus, Bildschirm und Netzwerkkabel. Der Raspberry Pi startet sobald das Stromkabel eingesteckt wird. Zur Ubuntu Installation must du nur den Setup Anweisungen folgen.
  3. Abschließend bietet es sich an die System Software zu Aktualisieren. Öffne dazu ein Terminal (Strg+Alt+T) und gebe folgende Befehle ein:
    sudo apt update

    sudo apt upgrade -y

Chia Installation

Chia.net stellt für Ubuntu ein .deb Package zur Verfügung. Die Installation kann daher einfach grafisch erfolgen. Dazu lädst du mit dem bereits installierten Firefox das Installer Package „Ubuntu/Debian ARM“ von der Chia Download Seite herunter. Wichtig ist hier das ARM Package zu nehmen, da der Raspberry PI eine ARM CPU besitzt.
Die heruntergeladene Datei findest du dann im Download Verzeichnis das du über den „Files“ Browser links in der Menüleiste erreichst. Ein Rechtsklick auf das Installer Package erlaubt dir im Kontext Menü die Installation von Chia über den Menüpunkt „Open with Software Install“. Siehe Screenshot:

In dem Menü links unten solltest du nun den installierten Chia Client finden und starten können. Da sich der Raspberry Pi nur zum Farmen eignet und nicht zum erstellen von neuen Plots gehe ich davon aus, das du bereits eine Chia Wallets besitzt. Diese kannst du einfach über den Menüpunkt „Import from Mnemonics (24 words)“ importieren.

Da der Raspbery Pi sich nur zum Farmen eignet, gehe ich davon aus das du eine Ploting Maschine hast, die bereits mit der Chia Blockchain synchronisiert ist. Da dieser Vorgang sehr lange dauert, empfehle ich dir die Blockchain von diesem Computer auf den Raspberry Pi zu kopieren. Dies spart dir einige an Zeit. Schaue dazu bei den Tipps & Tricks rein. Alternativ kannst du den Raspberry Pi auch einfach laufen lassen bis Chia fertig synchronisiert ist.

Festplatten mounten

Erstelle ein Verzeichnis in das die Festplatte mit den Chia Plots gemountet werden soll. z.B. auf der Konsole (Strg+Alt+T) mit folgenden Befehl:
sudo mkdir /mnt/MOUNTNAME

Im Ubuntu Software Menü findest du die Anwendung „Disks“. Mit dieser kannst du die USB Festplatte in das neue Verzeichnis mounten. Dazu klickst du die Festplatte an, gehst dann auf das Zahnradsymbol und wählst „Edit Mount Options…“

Hier wählst du dann „Mount at system startup“ und „Show in user interface“. Bei „Mount Point“ gibst du nun das zuvor angelegte Verzeichnis an. Nach einem Neustart des Raspbery Pi solltn nun die Plots auf der USB Festplatte in dem Verzeichnis verfügbar sein. Dies kannst du z.B. auf der Konsole prüfen oder mit dem Ubuntu File Browser.
Console:
cd /mnt/MOUNTNAME

ls -la

Im Chia Client kannst du die Plots nun im Menü „Plots“ –> „Add Plot Directory“ hinzufügen.

Statische IP Adresse einstellen

Der Farming Raspi sollte im Netzwerk immer unter der IP Adresse erreichbar sein. Dies erleichtert die Administration. Einstellen kannst du dies im Ubuntu Settings Menü „Settings -> Network -> IPv4“. Siehe Screenshot. Die IP Adresse muss natürlich zu deinem Netzwerk passen.
ama

Screen Sharing – Bildschirmfreigabe mit VNC

In Ubuntu ist die Bildschirmfreigabe mit dem VNC Protokoll integriert. Diese kannst du hier aktivieren „Settings -> Sharing -> Screen Sharing“ aktivieren. Siehe Screenshot:

Als Client kann z.B. der VNC Connect von Real VNC verwendet werden. Leider ist das Screensharing recht buggy. Folgende Probleme mit dem Screen sharing habe ich festgestellt und bislang noch keine Zeit für Lösungen gefunden:

  • Nach einem Neustart des Raspberry geht das hinterlegte Passwort verloren und muss neu eingegeben werden
  • Es muss scheinbar ein Bildschirm und Tastatur angeschlossen sein damit es funktioniert
  • Wird der VNC Connect Client verwendet muss in den Optionen „Bildqualität -> hoch“ gewählt werden. Andernfalls sieht man kein Bild.

Bleibt mir noch zu sagen: Happy Farming!

Chia – Tipps und Tricks

Chia Consolen Anwendung

Viele Aufgaben lassen sich auch ohne GUI auf der Konsole erledigen. Die dazu nötige Executable findest du hier:

Windows:
C:\Users\USERNAME\AppData\Local\chia-blockchain\app-1.2.2
Ein guten Einstieg bietet die Chia Hilfe:
chia.exe -h

Linux:
/usr/lib/chia-blockchain/resources/app.asar.unpacked/daemon
Ein guten Einstieg bietet die Chia Hilfe:
./chia -h

Chia Keys anzeigen

Mit folgendem Befehl kannst du dir deine Chia Adressen anzeigen lassen. Wie du zur Chia.exe kommst siehst du im oberen Punkt.
chia keys show

Ergebnis:

Fingerprint: 12345678
Master public key (m): 12345678
Farmer public key (m/12381/8444/0/0): 12345678
Pool public key (m/12381/8444/1/0): 12345678
First wallet address: 12345678

Blockchain und Wallet auf anderen Computer übertragen

Das Herunterladen der Chia Blockchain dauert mitunter viele Stunden oder gar Tage. Wird nun eine zweite Maschine benötigt, z.B. zum Farmen, ist es Sinnvoll diese Zeit einzusparen. Zum Glück lässt sich die Blockchain und die Wallet von einem Computer auf den anderen übertragen. Dies geht auch zwischen Windows und Linux Systemen. Getestet mit Windows 10 und Ubuntu 20.04.
Dazu must du nur die beiden Verzeichnisse „db“ und „wallet“ kopieren. Du findest sie in folgendem Verzeichnis:

Windows (im User Verzeichnis):
C:\Users\USERNAME\.chia\mainnet

Linux (im User Verzeichnis. Falls die Ubuntu GUI verwendet wird. Strg + H drücken um dir die versteckten Verzeichnisse anzuzeigen):

~/.chia/mainnet

Logfiles anschauen

Chia erstellt standardmäßig Logfiles. Diese sind hilfreich um zu Prüfen ob alles Rund läuft, oder um im Fehlerfall eine schnellere Fehlerbehebung zu ermöglichen. Das Standard Log Level ist WARNING. Dieses kann nach INFO geändert werden um mehr Informationen zu erhalten. Die Konfiguration findet sich hier:

C:\Users\USERNAME\.chia\mainnet\config\config.yaml

Suche hier die Zeile
log_level = WARNING
und ändere sie auf INFO. Anschließend muss der Chia Client neu gestartet werden. Beim editieren der Datei must du Aufpassen die Formatierung nicht zu ändern. Bei dem verwendeten YAML Format ist die Einrückung der Zeilen für die Funktion wichtig!

Sobald Chia neu gestartet ist, solltest du hier das Log File sehen. Chia verwendet Logfile Rotation. d.h. es werden nach einiger Zeit mehrere Logfiles erstellt und das älteste gelöscht.
C:\Users\USERNAME\.chia\mainnet\log\debug.log

Verbindungsprobleme beheben

In der Regel sollte der Chia Client ohne manuelle Einstellungen am Router funktionieren. Sollte es doch einmal Probleme mit der Verbidnung geben, kannst du eine Portweiterleitung von Port 8444 am Router anlegen, die auf deinen Chia Rechner verweist.
Weitere Fehlerquellen die du checken kannst sind die Windows Firewall oder dein Virenscanner.

Im Chia Client kannst du unter „Full Node -> Connections -> Connect to other Peers“ versuchen weitere Peer Adressen hinzuzufügen:

node.chia.net:8444
node-eu.chia.net:8444
node-apne.chia:8444

Energieoption für Festplatte anpassen

Die Chia Blockchain fragt regelmäßig die Challenges für den nächsten Block ab. Dazu werden die Plots auf der Festplatte gescannt und ggf. ein Hashwert geliefert der zu der Challenge passt. Diesem Vorgang steht nur eine gewisse Zeit zur Verfügung. Antwortet das System nicht schnell genug verfällt die Chance die Challenge zu gewinnen. Daher sollten die Festplatten auf denen die Plots liegen immer Laufen um die Zugriffszeit so gering wie möglich zu halten. Unter Windows kann man dies in den Energie Optionen einstellen.

Systemsteuerung 🠖 Hardware und Sound 🠖 Energieoptionen 🠖 Energiesparplan bearbeiten