<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Automatisierung Archive - Das ist die Welt von Thomas</title>
	<atom:link href="https://www.schiffler.eu/thema/automatisierung/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.schiffler.eu/thema/automatisierung/</link>
	<description>meine Gedanken, mal strukturiert, mal nicht ...</description>
	<lastBuildDate>Thu, 02 Jul 2026 10:57:35 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://www.schiffler.eu/wp-content/uploads/2025/07/cropped-Profilfoto_2024-32x32.png</url>
	<title>Automatisierung Archive - Das ist die Welt von Thomas</title>
	<link>https://www.schiffler.eu/thema/automatisierung/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Blue Connect GO in Home Assistant integrieren — Pool-Werte komplett lokal überwachen</title>
		<link>https://www.schiffler.eu/blue-connect-go-in-home-assistant-integrieren-pool-werte-komplett-lokal-ueberwachen/</link>
					<comments>https://www.schiffler.eu/blue-connect-go-in-home-assistant-integrieren-pool-werte-komplett-lokal-ueberwachen/#comments</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Fri, 05 Jun 2026 07:07:57 +0000</pubDate>
				<category><![CDATA[IT-Know How]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Codeschnipsel]]></category>
		<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Homeassistant]]></category>
		<category><![CDATA[Ober-Olm]]></category>
		<category><![CDATA[Pool]]></category>
		<category><![CDATA[Wasserqualität]]></category>
		<category><![CDATA[werbung]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=2982</guid>

					<description><![CDATA[<p>Mein Pool steht (fast komplett). Wasser drin, Pumpe läuft, pH-Dosierung tut ihren Job. Die misst Temperatur, pH und ORP — &#8230; <a href="https://www.schiffler.eu/blue-connect-go-in-home-assistant-integrieren-pool-werte-komplett-lokal-ueberwachen/" class="more-link">More <span class="screen-reader-text">Blue Connect GO in Home Assistant integrieren — Pool-Werte komplett lokal überwachen</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/blue-connect-go-in-home-assistant-integrieren-pool-werte-komplett-lokal-ueberwachen/">Blue Connect GO in Home Assistant integrieren — Pool-Werte komplett lokal überwachen</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Mein <a href="https://www.schiffler.eu/thema/pool/" type="post_tag" id="326">Pool</a> steht (fast komplett). Wasser drin, Pumpe läuft, pH-Dosierung tut ihren Job. Die <a href="https://amzn.to/42m8CYD" target="_blank" title="Blue Connect Go" alt="Blue Connect Go">Blue Connect GO*</a> misst Temperatur, pH und ORP — alles schön. Bis du merkst: die Werte gibt&#8217;s nur über die App. Auf dem Handy. Wenn du Lust hast, gerade nachzusehen. Genau das wollte ich nicht, also habe ich angefangen, die <a href="https://amzn.to/42m8CYD" target="_blank" title="Blue Connect Go" alt="Blue Connect Go">Blue Connect GO*</a> in <a href="https://www.schiffler.eu/thema/homeassistant/" type="post_tag" id="285">Home Assistant</a> zu integrieren.</p>



<p class="wp-block-paragraph">Was am Ende rausgekommen ist: ein Dashboard, das mir zu jeder Zeit zeigt, wo der Pool steht — und auf einen Blick verrät, ob ich Chlor nachwerfen oder pH-Minus dazugeben soll. Komplett lokal, ohne Cloud-Abo, ohne App-Klickerei.</p>



<p class="wp-block-paragraph">Hier ist der ganze Weg, den ich gegangen bin. Inklusive eines hässlichen Stolpersteins, an dem ich fast einen halben Tag verloren habe.</p>



<h2 class="wp-block-heading">Was die Blue Connect GO eigentlich macht</h2>



<p class="wp-block-paragraph">Die <a href="https://amzn.to/42m8CYD" target="_blank" title="Blue Connect Go" alt="Blue Connect Go">Blue Connect GO*</a> ist eine kleine, weiße Boje, die du einfach ins Poolwasser wirfst. Sie schwimmt da rum und misst kontinuierlich drei Werte, die für die Wasserqualität relevant sind:</p>



<ul class="wp-block-list">
<li><strong>Temperatur</strong> — was du eh schon weißt, aber im Tagesverlauf interessant für die Solarheizung</li>



<li><strong>pH-Wert</strong> — entscheidend dafür, ob das Chlor seine Arbeit machen kann</li>



<li><strong>ORP (Oxidations-Reduktions-Potential)</strong> — der eigentliche Indikator dafür, ob die Desinfektion (Chlor) ausreicht</li>
</ul>



<p class="wp-block-paragraph">Statt einzelnen Teststreifen oder Photometer-Messungen bekommst du also dauerhaft frische Werte ohne Aufwand. Die Boje hat einen kleinen Akku (per USB ladbar), einen Bewegungssensor (Schütteln weckt sie aus dem Schlaf) und eine Bluetooth-Low-Energy-Schnittstelle zum Auslesen.</p>



<p class="wp-block-paragraph">Klingt erstmal nach einem klaren Win — und das ist es auch. Aber: Der Hersteller verkauft das Ding als Teil seines App-Ökosystems. Du installierst die BlueRiiot-App, hältst dein Handy einmal pro Tag in die Nähe der Boje, und die App synchronisiert die Werte in eine Cloud.</p>



<p class="wp-block-paragraph">Und genau da fängt es an, mich zu stören.</p>



<h2 class="wp-block-heading">Warum ich es nicht bei der App lassen wollte</h2>



<p class="wp-block-paragraph">Drei Gründe, warum das App-Setup für mich nicht funktioniert:</p>



<ol class="wp-block-list">
<li><strong>Manuelles Auslesen.</strong> Ich muss aktiv mit dem Handy hinrennen. Macht in der Praxis vielleicht zweimal die Woche jemand. Eigentlich will ich aber wissen, ob heute Morgen um 8 Uhr der pH-Wert nach dem nächtlichen Regen abgesoffen ist.</li>



<li><strong>Daten liegen in der Cloud.</strong> Wer die Werte sehen will, braucht Account, App, Verbindung. Wenn ich in Home Assistant ein Dashboard für meine Frau bauen will, geht das nicht ohne Umwege.</li>



<li><strong>Keine Automatisierungen.</strong> Ich kann keinen Alarm bauen, der mir bei ORP unter 600 mV eine Push-Notification schickt. Ich kann nichts mit den Daten machen, was über Anzeigen hinausgeht.</li>
</ol>



<p class="wp-block-paragraph">Mein Anspruch: Werte sollen automatisch und ohne Cloud in <a href="https://www.schiffler.eu/thema/homeassistant/" type="post_tag" id="285">Home Assistant</a> landen, da kann ich dann alles damit machen, was ich will.</p>



<h2 class="wp-block-heading">Die Lösung in einem Satz</h2>



<p class="wp-block-paragraph">Ein <a href="https://amzn.to/4af2V1H" target="_blank" title="ESP32" alt="ESP32">ESP32*</a> sitzt im Pool-Häuschen, hört per Bluetooth die Boje ab und schiebt die Werte per WLAN in Home Assistant.</p>



<p class="wp-block-paragraph">Funktional sieht das so aus:</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large has-lightbox"><img fetchpriority="high" decoding="async" width="1024" height="683" src="https://www.schiffler.eu/wp-content/uploads/2026/06/blueconnect_homeassistant_esp32-1024x683.png" alt="" class="wp-image-2989" srcset="https://www.schiffler.eu/wp-content/uploads/2026/06/blueconnect_homeassistant_esp32-1024x683.png 1024w, https://www.schiffler.eu/wp-content/uploads/2026/06/blueconnect_homeassistant_esp32-300x200.png 300w, https://www.schiffler.eu/wp-content/uploads/2026/06/blueconnect_homeassistant_esp32-768x512.png 768w, https://www.schiffler.eu/wp-content/uploads/2026/06/blueconnect_homeassistant_esp32.png 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<pre class="wp-block-code"><code>&#091;Blue Connect GO im Pool] --BLE--&gt; &#091;ESP32 im Pool-Häuschen] --WLAN--&gt; &#091;Home Assistant]
</code></pre>



<p class="wp-block-paragraph">Der <a href="https://amzn.to/4af2V1H" target="_blank" title="ESP32" alt="ESP32">ESP32*</a> läuft mit der <strong>ESPHome</strong>-Firmware. ESPHome ist ein Framework, mit dem du den ESP per YAML-Datei konfigurierst, statt selbst Firmware-Code zu schreiben. Du legst fest, welche Sensoren der ESP haben soll, welche Daten er aufnimmt, was er damit macht — fertig.</p>
</div>
</div>



<p class="wp-block-paragraph">Der entscheidende Trick: ESPHome hat eine fertige Komponente, die per BLE Geräte in der Umgebung scannen und auslesen kann. Du sagst ihr &#8222;verbinde dich mit MAC <code>XX:XX:XX:XX:XX:XX</code> und lies UUID <code>f3300003-…</code> aus&#8220;, und sie macht das.</p>



<p class="wp-block-paragraph">Die Bedienung der Boje (Aufwecken zur Messung) läuft per BLE-Write, das geht auch über ESPHome — sodass Home Assistant via Button die Boje aktiv zu einer Messung zwingen kann.</p>



<h2 class="wp-block-heading">Hardware-Stückliste</h2>



<p class="wp-block-paragraph">Was du brauchst:</p>



<ul class="wp-block-list">
<li><strong>ESP32</strong> — ich habe das <a href="https://amzn.to/4af2V1H" target="_blank" title="ESP32" alt="ESP32">AZDelivery NodeMCU Dev Kit C 3er-Pack bei Amazon*</a> genommen, ca. 20 Euro. Drei Stück, damit du Ersatz hast. Modell ohne externe Antenne reicht, wenn der ESP nicht weiter als ein paar Meter von Pool und WLAN entfernt steht.</li>



<li><strong>Gehäuse</strong> — ich habe ein passendes <a href="https://www.printables.com/model/89375-esp32-nodemcu-dev-kit-c-case" target="_blank" rel="noreferrer noopener">3D-Druck-Modell von Printables</a> genommen. Falls du keinen Drucker hast: ein normales Universal-Plastikgehäuse für 3-4 Euro tut es auch.</li>



<li><strong>Micro-USB-Kabel + 5V-Netzteil</strong> — hast du wahrscheinlich rumliegen.</li>



<li><strong>Eine bereits eingerichtete Home-Assistant-Instanz.</strong></li>
</ul>



<p class="wp-block-paragraph">Gesamtinvestition: rund 20 Euro plus etwas Zeit. Verglichen mit anderen Pool-Smarthome-Lösungen ist das ein Witz.</p>



<h2 class="wp-block-heading">Phase 1: ESPHome installieren</h2>



<p class="wp-block-paragraph">In Home Assistant musst du das <strong>ESPHome Device Builder Add-on</strong> installieren. Achtung — nicht zu verwechseln mit der ESPHome-Integration (die brauchst du erst später, automatisch). Pfad:</p>



<p class="wp-block-paragraph"><code>Einstellungen → Add-ons → Add-on Store → "ESPHome Device Builder" → Installieren → Starten → "Im Sidebar anzeigen"</code></p>



<p class="wp-block-paragraph">Danach hast du in der Seitenleiste einen ESPHome-Menüpunkt. Da arbeitest du jetzt.</p>



<h2 class="wp-block-heading">Phase 2: Secrets pflegen</h2>



<p class="wp-block-paragraph">Bevor du das erste Gerät anlegst, im ESPHome-Dashboard oben rechts auf <strong>Secrets</strong> klicken und folgende Einträge ergänzen:</p>



<pre class="wp-block-code"><code>wifi_ssid: "DEIN_WLAN_NAME"
wifi_password: "DEIN_WLAN_PASSWORT"
ota_password: "selbst-gewähltes-Passwort-für-OTA-Updates"
pool_proxy_pool_api_key: "32-Byte-Base64-String"
</code></pre>



<p class="wp-block-paragraph">Den API-Key kannst du dir generieren lassen, indem du ein Dummy-Gerät anlegst — ESPHome erzeugt da automatisch einen, den du dann kopierst.</p>



<h2 class="wp-block-heading">Das Vorgehen in zwei Schritten — warum nicht direkt die große Config</h2>



<p class="wp-block-paragraph">Bevor wir in die YAMLs einsteigen, kurz das Vorgehen, damit du nicht in dieselbe Falle läufst wie ich am Anfang:</p>



<p class="wp-block-paragraph">Du flashst den ESP <strong>zweimal</strong>. Erstmal mit einer <strong>reduzierten Discovery-Konfiguration</strong>, deren einziger Zweck es ist, die MAC-Adresse der Boje rauszufinden. Dann packst du den ESP ans Pool-Häuschen, sammelst die MAC, kommst zurück und flashst noch einmal — diesmal mit der <strong>finalen Konfiguration</strong>, die alles macht: BLE-Verbindung zur Boje, Auslesen der Werte, Button zum manuellen Triggern, alles.</p>



<p class="wp-block-paragraph">Warum nicht direkt die große Config? Weil ohne MAC-Adresse die Hälfte davon ohnehin nicht funktioniert. Und weil der Discovery-Schritt ein zeitlich begrenzter Hack ist (das <code>on_ble_advertise</code>-Lambda aus dem nächsten Abschnitt), den du danach wieder rauswerfen willst.</p>



<p class="wp-block-paragraph">Konkret:</p>



<ol class="wp-block-list">
<li><strong>Discovery-Flash per USB am Schreibtisch</strong> — ESP mit der reduzierten YAML beschreiben</li>



<li><strong>ESP ans Pool-Häuschen bringen</strong> — Strom dran, WLAN-Reichweite zur Boje sicherstellen</li>



<li><strong>MAC im Log auslesen</strong> — der Discovery-Lambda macht&#8217;s sichtbar</li>



<li><strong>Zurück zum Rechner</strong> — MAC in die finale YAML eintragen</li>



<li><strong>Finaler OTA-Flash</strong> — über WLAN, kein Kabel mehr nötig</li>



<li><strong>ESP wieder zurück ans Pool</strong> — Werte tropfen rein</li>
</ol>



<p class="wp-block-paragraph">Punkte 2 und 6 fallen weg, wenn dein Schreibtisch sowieso in Reichweite des Pools ist. Bei mir liegen ca. 15 Meter dazwischen, also zwei Wege.</p>



<h2 class="wp-block-heading">Phase 3: Discovery-Flash per USB</h2>



<p class="wp-block-paragraph">Im ESPHome-Dashboard auf <strong>New Device</strong> klicken, Namen vergeben (bei mir: <code>pool-proxy-pool</code>), Board ESP32 Generic auswählen. ESPHome generiert eine minimale YAML — die ersetzt du komplett durch das hier:</p>



<pre class="wp-block-code"><code>substitutions:
  device_name: pool-proxy-pool
  friendly_name: "Pool Proxy – Pool"

esphome:
  name: ${device_name}
  friendly_name: ${friendly_name}

esp32:
  board: esp32dev
  framework:
    type: esp-idf

logger:
  level: DEBUG
  logs:
    esp32_ble_tracker: DEBUG

api:
  encryption:
    key: !secret pool_proxy_pool_api_key

ota:
  - platform: esphome
    password: !secret ota_password

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

captive_portal:

esp32_ble_tracker:
  scan_parameters:
    interval: 320ms
    window: 300ms
    active: true
  on_ble_advertise:
    then:
      - lambda: |-
          for (auto uuid : x.get_service_uuids()) {
            if (uuid.to_string().find("f3300001") != std::string::npos) {
              ESP_LOGI("ble_scan", "BOJE: %s RSSI=%d", x.address_str().c_str(), x.get_rssi());
            }
          }
</code></pre>



<p class="wp-block-paragraph">Diese Konfig macht <strong>nur ein einziges Ding</strong>: BLE-Pakete scannen und immer dann eine Log-Zeile schreiben, wenn ein Gerät mit der Blue-Connect-Service-UUID <code>f3300001-…</code> empfangen wurde. Mehr nicht. Keine Sensoren, keine Buttons, keine Logik — der ESP ist hier nur Lauscher.</p>



<p class="wp-block-paragraph">Den ESP per USB anschließen, im ESPHome-Dashboard <strong>Install → Plug into computer running ESPHome dashboard</strong>. Beim ersten Build dauert das ein paar Minuten, weil ESPHome erstmal die Toolchain runterzieht. Danach hast du eine funktionierende Firmware drauf.</p>



<p class="wp-block-paragraph">USB wieder abziehen, ESP ins Gehäuse, Netzteil dran, ab ins Pool-Häuschen.</p>



<h2 class="wp-block-heading">Phase 4: Die MAC-Adresse der Boje finden</h2>



<p class="wp-block-paragraph">Wenn du jetzt im ESPHome-Dashboard auf <strong>Logs</strong> klickst, siehst du den Live-Log des ESP. Mit etwas Geduld (und einer aufgeweckten Boje — dazu gleich) tauchen Zeilen auf wie:</p>



<pre class="wp-block-code"><code>&#091;I]&#091;ble_scan]: BOJE: 00:A0:xx:D0:xx:xx RSSI=-67
&#091;I]&#091;ble_scan]: BOJE: 00:A0:xx:D0:xx:xx RSSI=-69
</code></pre>



<p class="wp-block-paragraph">Die hexadezimale Zahl vor dem RSSI ist die MAC-Adresse deiner Boje. Notieren, kopieren, fertig. Falls nichts kommt: Boje einmal kräftig schütteln (der Beschleunigungssensor weckt sie aus dem Schlaf), wieder reinwerfen — und sicherstellen, dass die BlueRiiot-App komplett geschlossen ist. Die Boje erlaubt nämlich nur <strong>eine</strong> BLE-Verbindung gleichzeitig, eine offene App-Verbindung blockt den ESP.</p>



<p class="wp-block-paragraph">Und damit zur Frage, die du dir vermutlich gerade stellst: <strong>Warum sieht die Discovery-Konfig oben so seltsam aus?</strong> Warum der ungewöhnliche <code>on_ble_advertise</code>-Lambda? Warum <code>window: 300ms</code> statt der überall im Netz herumliegenden <code>window: 30ms</code>?</p>



<p class="wp-block-paragraph">Antwort: weil mich das einen halben Tag gekostet hat herauszufinden.</p>



<p class="wp-block-paragraph">Mein Log mit der naiven Standard-Konfig aus dem Forum-Tutorial sah anfangs so aus:</p>



<pre class="wp-block-code"><code>&#091;esp32_ble_tracker]: Scanner State: RUNNING
&#091;esp32_ble_tracker]: Connecting: 0, discovered: 0
</code></pre>



<p class="wp-block-paragraph">Und danach: nichts. Stundenlang. Weder die Boje, noch mein Handy welches direkt daneben lag noch sonst irgend ein Bluetooth-Device. Komplette Funkstille trotz aktivem Scanner.</p>



<p class="wp-block-paragraph">Ich habe alles durchgekärrt, was man durchkärren kann: Log-Level von INFO auf DEBUG, dann auf VERBOSE. Verschiedene BLE-Submodule auf VERBOSE gesetzt. Framework von esp-idf auf arduino umgestellt. Build-Cache geleert. USB-Flash mit Erase. Alles ohne Erfolg.</p>



<p class="wp-block-paragraph">Erst nach Stunden bin ich auf zwei Probleme gestoßen, die niemand in den Tutorials und Forenbeiträgen erwähnt — und die deshalb fest in die Discovery-Config oben eingebaut sind:</p>



<p class="wp-block-paragraph"><strong>Problem 1: Das Default-Scan-Window ist zu kurz.</strong></p>



<p class="wp-block-paragraph">Die meisten Beispiele aus dem Netz haben <code>window: 30ms</code> bei <code>interval: 320ms</code>. Das bedeutet: Der ESP horcht 30 Millisekunden, schweigt dann 290 Millisekunden, horcht wieder. Das sind 9 Prozent aktive Hörzeit. Für ständig sendende Geräte (Beacons, Tags) reicht das. Für die Blue Connect GO, die nur sporadisch im Aufweck-Modus Pakete sendet, ist das viel zu wenig — du verpasst die meisten Sendeimpulse.</p>



<p class="wp-block-paragraph">Mit <code>window: 300ms</code> horcht der ESP zu 94 Prozent der Zeit. Akku-Verbrauch interessiert hier nicht, der ESP hängt eh am Netzteil.</p>



<p class="wp-block-paragraph"><strong>Problem 2: ESPHome verschluckt die &#8222;Found device&#8220;-Logs.</strong></p>



<p class="wp-block-paragraph">Das war der wirklich gemeine Teil. Selbst nachdem das Scan-Window vergrößert war, kam im Log immer noch nichts. Erst nach langem Recherchieren bin ich draufgekommen: In der ESPHome-Version, die ich genutzt habe (2026.6.0-dev), werden die Standard-<code>Found device</code>-Logs vom <code>esp32_ble_tracker</code> schlicht nicht mehr ausgegeben. Der Stack arbeitet, der Scanner findet Geräte — aber im Log siehst du nichts davon.</p>



<p class="wp-block-paragraph">Lösung: eigene Log-Zeile per Lambda erzwingen. Genau das ist der <code>on_ble_advertise</code>-Block in der Discovery-Config. Er sagt: &#8222;Bei jedem empfangenen BLE-Advertising-Paket schau, ob das Gerät die Service-UUID <code>f3300001-…</code> mitsendet. Wenn ja, schreib mir eine Zeile ins Log mit MAC und Signalstärke.&#8220; Die UUID <code>f3300001-…</code> ist der eindeutige Marker für die Blue Connect GO — andere BLE-Geräte werden also ignoriert.</p>



<p class="wp-block-paragraph">Mit beiden Fixes drin fand mein ESP die Boje innerhalb von zwei Sekunden. Ohne die Fixes hätte ich vermutlich noch den nächsten Tag gesucht und wäre überzeugt gewesen, dass mein ESP einen kaputten Bluetooth-Chip hat. Hatte er nicht. Software-Problem.</p>



<h2 class="wp-block-heading">Phase 5: Die finale Konfiguration aufspielen</h2>



<p class="wp-block-paragraph">Jetzt ersetzt du im ESPHome-Dashboard die Discovery-Konfig durch die finale. Die ist deutlich länger, weil sie alles macht, was du wirklich brauchst:</p>



<ul class="wp-block-list">
<li>BLE-Verbindung zur Boje aufbauen (mit deiner MAC)</li>



<li>Beim Empfang von Werten die Rohdaten dekodieren (Temperatur in <code>°C</code>, pH, ORP in mV)</li>



<li>Einen Button bereitstellen, mit dem du die Boje manuell zu einer Messung triggern kannst</li>



<li>Diagnostik-Sensoren (WLAN-Signal, BLE-Signal zur Boje, Laufzeit)</li>
</ul>



<p class="wp-block-paragraph">Hier der komplette YAML-Block zum Copy-Paste — du musst nur an drei Stellen ran: die beiden <code>MAC_DER_BOJE</code>-Platzhalter durch deine echte MAC ersetzen, und die <code>device_name</code>-/<code>friendly_name</code>-Substitutionen an deinen Pool anpassen, falls du einen anderen Namen willst.</p>



<pre class="wp-block-code"><code>substitutions:
  device_name: pool-proxy-pool
  friendly_name: "Pool Proxy – Pool"

esphome:
  name: ${device_name}
  friendly_name: ${friendly_name}
  on_boot:
    priority: -100           # läuft ganz am Ende, wenn WiFi/BLE-Stack initialisiert sind
    then:
      - delay: 5min
      - logger.log: "Initiale Messung 5 min nach Boot wird ausgelöst"
      - button.press: btn_measure

esp32:
  board: esp32dev
  framework:
    type: esp-idf

logger:
  level: DEBUG
  logs:
    esp32_ble: DEBUG
    esp32_ble_tracker: DEBUG
    esp32_ble_client: DEBUG
    ble_client: DEBUG

api:
  encryption:
    key: !secret pool_proxy_pool_api_key

ota:
  - platform: esphome
    password: !secret ota_password

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

captive_portal:

esp32_ble_tracker:
  scan_parameters:
    interval: 320ms
    window: 300ms          # &#x26a0; NICHT 30ms — sonst werden Advertising-Pakete verpasst (siehe Troubleshooting)
    active: true

globals:
  # Flag für "Messung wurde angefordert, aber BLE war nicht verbunden" — wird beim
  # nächsten on_connect abgearbeitet. Kein restore_value, damit nach Reboot kein
  # Geister-Trigger hängenbleibt.
  - id: pool_measure_pending
    type: bool
    restore_value: no
    initial_value: 'false'

interval:
  # Turnusmäßige Messung alle 4h. Feuert erstmals 4h nach Boot — die erste Messung
  # kurz nach dem Start übernimmt der on_boot-Trigger (siehe esphome:-Block).
  - interval: 4h
    then:
      - logger.log: "Turnusmäßige Messung (alle 4h) wird ausgelöst"
      - button.press: btn_measure

ble_client:
  - mac_address: "00:A0:50:D0:53:0F"   # MAC der Blue Connect GO Boje
    id: ble_client_pool
    on_connect:
      then:
        - logger.log: "BLE verbunden"
        - if:
            condition:
              lambda: 'return id(pool_measure_pending);'
            then:
              - logger.log: "Gequeuter Messung-Trigger wird jetzt gesendet"
              - delay: 500ms   # GATT braucht kurz nach Connect, sonst evtl. "not connected"-Race
              - ble_client.ble_write:
                  id: ble_client_pool
                  service_uuid: 'F3300001-F0A2-9B06-0C59-1BC4763B5C00'
                  characteristic_uuid: 'F3300002-F0A2-9B06-0C59-1BC4763B5C00'
                  value: &#091;0x01]
              - lambda: 'id(pool_measure_pending) = false;'
    on_disconnect:
      then:
        - logger.log: "BLE getrennt"

button:
  - platform: template
    name: "${friendly_name} Messung auslösen"
    id: btn_measure   # von on_boot + interval angesprochen für Auto-Messungen
    on_press:
      then:
        # Pending-Flag-Logik: wenn BLE gerade verbunden → sofort schreiben.
        # Sonst Flag setzen, ble_client erledigt es beim nächsten on_connect.
        - if:
            condition:
              lambda: 'return id(ble_client_pool).connected();'
            then:
              - logger.log: "BLE verbunden — Messung sofort triggern"
              - ble_client.ble_write:
                  id: ble_client_pool
                  service_uuid: 'F3300001-F0A2-9B06-0C59-1BC4763B5C00'
                  characteristic_uuid: 'F3300002-F0A2-9B06-0C59-1BC4763B5C00'
                  value: &#091;0x01]
            else:
              - logger.log: "BLE nicht verbunden — Messung wird beim nächsten Connect ausgeführt"
              - lambda: 'id(pool_measure_pending) = true;'
  - platform: restart
    name: "${friendly_name} Neustart"
    entity_category: diagnostic
  - platform: safe_mode
    name: "${friendly_name} Safe Mode"
    entity_category: diagnostic

sensor:
  - platform: template
    name: "${friendly_name} Temperatur"
    id: sensor_pool_temperature
    unit_of_measurement: "°C"
    state_class: measurement
    device_class: temperature
    accuracy_decimals: 2
  - platform: template
    name: "${friendly_name} pH"
    id: sensor_pool_ph
    state_class: measurement
    accuracy_decimals: 2
  - platform: template
    name: "${friendly_name} ORP"
    id: sensor_pool_orp
    unit_of_measurement: "mV"
    state_class: measurement
    accuracy_decimals: 0
  - platform: wifi_signal
    name: "${friendly_name} WLAN Signal"
    update_interval: 60s
    entity_category: diagnostic
  - platform: uptime
    name: "${friendly_name} Laufzeit"
    entity_category: diagnostic
  - platform: ble_rssi
    mac_address: "00:A0:xx:D0:xx:xx"   # gleiche MAC wie ble_client oben
    name: "${friendly_name} Boje BLE Signal"
    icon: mdi:signal-variant
    filters:
      - sliding_window_moving_average:   # glättet Ausreißer, ruhigerer Dashboard-Wert
          window_size: 5
          send_every: 1
      - heartbeat: 30s                    # mind. alle 30s einen Wert publizieren, auch ohne neues Paket

binary_sensor:
  - platform: template
    name: "${friendly_name} Boje verbunden"
    icon: mdi:bluetooth-connect
    lambda: 'return id(ble_client_pool).connected();'

text_sensor:
  - platform: wifi_info
    ip_address:
      name: "${friendly_name} IP"
      entity_category: diagnostic
  - platform: ble_client
    id: pool_reading_data
    name: "${friendly_name} raw data"
    internal: true
    ble_client_id: ble_client_pool
    service_uuid: 'F3300001-F0A2-9B06-0C59-1BC4763B5C00'
    characteristic_uuid: 'F3300003-F0A2-9B06-0C59-1BC4763B5C00'
    notify: true
    update_interval: never
    on_notify:
      then:
        - lambda: |-
            std::string rawhex = format_hex_pretty((uint8_t *) x.c_str(), x.size()).c_str();
            ESP_LOGD("raw_hex", "Rohdaten der Boje: %s", rawhex.c_str());

            float temperature = (float)((int16_t)(x&#091;2]&lt;&lt; 8) + x&#091;1])/100;
            id(sensor_pool_temperature).publish_state(temperature);

            float raw_ph = (float)( (int16_t) (x&#091;4]&lt;&lt; 8) + x&#091;3]);
            float ph = (float)( (int16_t) (2048 - raw_ph)) / 232  + 7;
            id(sensor_pool_ph).publish_state(ph);

            float orp = (float)( (int16_t) (x&#091;6]&lt;&lt; 8) + x&#091;5]);
            id(sensor_pool_orp).publish_state(orp/4);</code></pre>



<p class="wp-block-paragraph"><strong>Was hat sich gegenüber der Discovery-Konfig geändert?</strong></p>



<ul class="wp-block-list">
<li>Der <code>on_ble_advertise</code>-Lambda ist <strong>weg</strong> — der war nur für die MAC-Suche da, jetzt würde er nur noch das Log spammen.</li>



<li>Ein <code>ble_client</code>-Block sagt dem ESP: &#8222;Verbinde dich aktiv mit dieser MAC.&#8220;</li>



<li>Drei <code>sensor</code>-Templates für Temperatur, pH und ORP — die werden vom Lambda am Ende mit den dekodierten Werten gefüttert.</li>



<li>Ein <code>button</code>-Block, der per BLE-Write die Boje zu einer Messung triggert (das ist die UUID <code>F3300002</code>, &#8222;Schreibe <code>[0x01]</code> rein&#8220; = &#8222;Wach auf und miss&#8220;).</li>



<li>Eine initiale Messung direkt nach dem Start des ESPs wurde hinzugefügt</li>



<li>Der ESP initiiert alle 4 Stunden automatisiert eine Messung so dass wir in jedem Fall Tagesverlaufswerte haben</li>



<li>Ein <code>text_sensor</code> mit <code>ble_client</code>-Platform, der auf die UUID <code>F3300003</code> lauscht (das ist die &#8222;Messwerte-Charakteristik&#8220; der Boje) und beim Eintreffen neuer Daten die Roh-Bytes per Lambda in <code>°C</code>, pH und mV umrechnet. Die Formel im Lambda ist nicht von mir, sondern aus dem <a href="https://community.simon42.com/t/wasserwerte-mittels-blueconnect-im-ha-anzeigen/4151" target="_blank" rel="noreferrer noopener">Forumsbeitrag von community.simon42.com</a>, wo jemand die Boje reverse-engineered hat.</li>
</ul>



<p class="wp-block-paragraph"><strong>Flashen ab jetzt drahtlos.</strong> Da der ESP schon im Netz hängt (von der Discovery-Konfig), brauchst du kein USB-Kabel mehr. <strong>Install → Wirelessly</strong> im ESPHome-Dashboard reicht. Der Flash läuft über die OTA-Verbindung, dauert ca. 30 Sekunden.</p>



<h2 class="wp-block-heading">Werte landen in Home Assistant</h2>



<p class="wp-block-paragraph">Nach dem finalen Flash erscheint dein Gerät automatisch in Home Assistant unter <code>Einstellungen → Geräte &amp; Dienste</code>. Die Sensoren sind angelegt, allerdings noch leer — die Boje muss erstmal eine Messung machen.</p>



<p class="wp-block-paragraph">Dafür hat ESPHome dir aus dem YAML einen Button gebaut: <code>button.pool_proxy_pool_messung_auslosen</code>. Wenn du den drückst, sendet der ESP einen BLE-Write an die Boje, die daraufhin eine Messung startet und die frischen Werte zurücksendet. Sekunden später hast du Temperatur, pH und ORP in Home Assistant.</p>



<p class="wp-block-paragraph">Damit kannst du dir jetzt auch eine Automatisierung bauen, die den Button alle paar Stunden automatisch drückt — bei mir alle 2 Stunden zwischen 8 und 22 Uhr.</p>



<h2 class="wp-block-heading">Phase 6: Das Dashboard</h2>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Reine Sensoren in der Geräte-Übersicht sind unsexy. Was du willst, ist ein Dashboard mit Gauges, die sofort zeigen, ob alles im grünen Bereich ist.</p>



<p class="wp-block-paragraph">Drei Gauges nebeneinander für die schnelle Übersicht. Das Spannende dabei: pH und ORP sind keine &#8222;je höher desto besser&#8220;-Werte, sondern haben einen <strong>Optimum-Bereich in der Mitte</strong> — drunter ist schlecht (zu wenig Chlor / saurer Pool), drüber ist auch schlecht (zu viel Chlor / basischer Pool). Eine klassische Glockenkurve.</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large has-lightbox"><img decoding="async" width="1024" height="601" src="https://www.schiffler.eu/wp-content/uploads/2026/06/blueconnect_homeassistant_dashboard-1024x601.png" alt="" class="wp-image-2984" srcset="https://www.schiffler.eu/wp-content/uploads/2026/06/blueconnect_homeassistant_dashboard-1024x601.png 1024w, https://www.schiffler.eu/wp-content/uploads/2026/06/blueconnect_homeassistant_dashboard-300x176.png 300w, https://www.schiffler.eu/wp-content/uploads/2026/06/blueconnect_homeassistant_dashboard-768x451.png 768w, https://www.schiffler.eu/wp-content/uploads/2026/06/blueconnect_homeassistant_dashboard.png 1102w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>
</div>



<p class="wp-block-paragraph">In Home Assistant kannst du das mit der <code>segments</code>-Eigenschaft einer Gauge-Karte abbilden:</p>



<pre class="wp-block-code"><code>- type: gauge
  entity: sensor.pool_proxy_pool_orp
  name: Chlor (ORP)
  unit: mV
  min: 400
  max: 1000
  needle: true
  segments:
    - from: 400
      color: '#db4437'   # rot - zu wenig
    - from: 600
      color: '#ffa600'   # gelb - niedrig
    - from: 650
      color: '#43a047'   # grün - optimal
    - from: 750
      color: '#ffa600'   # gelb - hoch
    - from: 900
      color: '#db4437'   # rot - zu viel
</code></pre>



<p class="wp-block-paragraph">So bekommst du auf einen Blick eine Ampel — wenn der Zeiger im grünen Mittelteil steht, ist alles gut. Wenn er nach links oder rechts wandert, sehe ich sofort, was zu tun ist.</p>



<p class="wp-block-paragraph">Das Gleiche für pH (Optimum 7,0 bis 7,4) und ein einfacheres Gauge für Temperatur (wo höher zwar nicht &#8222;schlecht&#8220; ist, aber irgendwann unangenehm warm wird). Dazu noch ein History-Graph für die Werte der letzten 24 Stunden und ein Button-Block für die manuelle Messung — fertig ist die Übersicht.</p>



<h2 class="wp-block-heading">Phase 7: Dosier-Empfehlungen aus den Werten ableiten</h2>



<p class="wp-block-paragraph">Das eigentliche Killer-Feature, dass mir spätestens nach drei Tagen klargemacht hat, dass sich der ganze Aufwand gelohnt hat: Eine <strong>dynamische Markdown-Karte</strong>, die mir basierend auf den aktuellen Werten konkret sagt, was ich nachdosieren muss.</p>



<p class="wp-block-paragraph">Bei mir steht da dann zum Beispiel:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Chlor — Zu niedrig (635 mV) — ~50 g Calciumhypochlorit (65%) nachdosieren</p>



<p class="wp-block-paragraph">pH — Im Sollbereich (7,21) — keine Korrektur nötig</p>
</blockquote>



<p class="wp-block-paragraph">Funktioniert über inline Jinja-Templates in der Markdown-Card, die die aktuellen Sensorwerte lesen und stufenbasiert eine Empfehlung ausspucken. Wichtig: ORP ist kein direkter Chlorwert, sondern ein Indikator — die Mengenempfehlungen sind also Schätzungen, basierend auf Faustregeln für mein Pool-Volumen (32 Kubikmeter). Lieber konservativ dosieren und nochmal messen, als überdosieren.</p>



<p class="wp-block-paragraph">Die Logik in Kurzform:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>ORP-Wert</th><th>Maßnahme</th><th>Granulat-Menge (65%)</th></tr></thead><tbody><tr><td>&lt; 550 mV</td><td>Schock-Chlorung</td><td>~150 g</td></tr><tr><td>550–650 mV</td><td>Nachdosieren</td><td>~50 g</td></tr><tr><td>650–750 mV</td><td>im Sollbereich</td><td>nichts</td></tr><tr><td>&gt; 750 mV</td><td>Pause</td><td>nichts</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Analog für pH mit pH-Plus (Soda) und pH-Minus (Natriumhydrogensulfat).</p>



<p class="wp-block-paragraph">Die Karte zeigt mir genau das, was ich brauche, in genau dem Moment, in dem ich aufs Dashboard schaue. Statt jedes Mal selbst zu überlegen, welche Mengen für meinen Pool passen.</p>



<h2 class="wp-block-heading">Was ich gelernt habe</h2>



<p class="wp-block-paragraph">Drei Dinge, die ich beim nächsten ESPHome-BLE-Projekt vom ersten Moment an mitnehmen werde:</p>



<p class="wp-block-paragraph"><strong>Das Scan-Window großzügig auslegen.</strong> Die 30-Millisekunden-Defaults aus den Foren sind für ständig sendende Beacons gedacht — für sporadisch sendende Messgeräte brauchst du 200 bis 300 Millisekunden, sonst verpasst du sie schlicht.</p>



<p class="wp-block-paragraph"><strong>Beim Debugging immer ein eigenes Log-Statement reinhauen.</strong> Wenn der ESPHome-eigene Log dir gar keine Geräte zeigt, baust du einen Lambda mit <code>ESP_LOGI</code> rein. Das ist 30 Sekunden Aufwand, gibt dir aber Gewissheit, dass der Stack läuft. Ohne diesen Schritt hätte ich noch deutlich länger gesucht.</p>



<p class="wp-block-paragraph"><strong>Vor dem Hardware-Tausch zweimal nachprüfen.</strong> Ich war zwei Stunden lang überzeugt, dass mein ESP32 einen defekten BLE-Chip hat, und wollte schon ein anderes Board aus dem Karton holen. War alles Software. Hardware ist seltener kaputt, als man denkt.</p>



<h2 class="wp-block-heading">Fazit</h2>



<p class="wp-block-paragraph">Die Blue Connect GO in Home Assistant zu integrieren ist machbar an einem Nachmittag — wenn man die zwei Stolpersteine kennt, die ich oben beschrieben habe. Wenn nicht, kann es schnell ein Tag werden.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large has-lightbox"><img decoding="async" width="819" height="1024" src="https://www.schiffler.eu/wp-content/uploads/2026/06/blueconnect_homeassistant_mobile-819x1024.png" alt="" class="wp-image-2992" srcset="https://www.schiffler.eu/wp-content/uploads/2026/06/blueconnect_homeassistant_mobile-819x1024.png 819w, https://www.schiffler.eu/wp-content/uploads/2026/06/blueconnect_homeassistant_mobile-240x300.png 240w, https://www.schiffler.eu/wp-content/uploads/2026/06/blueconnect_homeassistant_mobile-768x960.png 768w, https://www.schiffler.eu/wp-content/uploads/2026/06/blueconnect_homeassistant_mobile.png 1122w" sizes="(max-width: 819px) 100vw, 819px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Was du am Ende hast, ist aber genau das, was die Hersteller-App nicht bietet: Werte ohne Cloud, jederzeit verfügbar, kombinierbar mit anderen Home-Assistant-Daten (PV-Überschuss-Steuerung der Pumpe, Solarheizungs-Logik, Push-Notifications bei kritischen Werten). Die rund 20 Euro für den ESP32 sind verglichen mit dem Nutzen ein Witz.</p>



<p class="wp-block-paragraph">Und ehrlich: Das Beste an dem Setup ist nicht die Technik, sondern das morgendliche Ritual. Kaffee in der Hand, kurzer Blick aufs Tablet — alles grün, schwimmen kann gleich losgehen. Statt früher: App aufmachen, mit dem Handy zum Pool, warten bis sich was synct, lesen, zurückgehen. Das nervt schon nach drei Tagen.</p>



<p class="wp-block-paragraph">Der komplette YAML-Code steht oben in den Phasen 3 und 5 als Copy-Paste-Vorlage drin. Wer Fragen hat, einen Tipp loswerden oder eine andere Boje am Start hat — schreib mir gerne, ich freu mich über Erfahrungsaustausch.</p>
</div>
</div>
<p>Der Beitrag <a href="https://www.schiffler.eu/blue-connect-go-in-home-assistant-integrieren-pool-werte-komplett-lokal-ueberwachen/">Blue Connect GO in Home Assistant integrieren — Pool-Werte komplett lokal überwachen</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/blue-connect-go-in-home-assistant-integrieren-pool-werte-komplett-lokal-ueberwachen/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>1 Jahr Bitcoin Mining mit Solarstrom – eine ehrliche Bilanz</title>
		<link>https://www.schiffler.eu/1-jahr-bitcoin-mining-mit-solarstrom-eine-ehrliche-bilanz/</link>
					<comments>https://www.schiffler.eu/1-jahr-bitcoin-mining-mit-solarstrom-eine-ehrliche-bilanz/#comments</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Fri, 20 Mar 2026 08:15:00 +0000</pubDate>
				<category><![CDATA[IT-Know How]]></category>
		<category><![CDATA[Antminer]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Bitcoin]]></category>
		<category><![CDATA[Erfahrungsbericht]]></category>
		<category><![CDATA[Mining]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=2864</guid>

					<description><![CDATA[<p>Vor einem Jahr startete das Experiment. Heute ziehe ich Bilanz zum Bitcoin Mining PV-Überschuss &#8211; und die fällt anders aus &#8230; <a href="https://www.schiffler.eu/1-jahr-bitcoin-mining-mit-solarstrom-eine-ehrliche-bilanz/" class="more-link">More <span class="screen-reader-text">1 Jahr Bitcoin Mining mit Solarstrom – eine ehrliche Bilanz</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/1-jahr-bitcoin-mining-mit-solarstrom-eine-ehrliche-bilanz/">1 Jahr Bitcoin Mining mit Solarstrom – eine ehrliche Bilanz</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Vor einem Jahr startete das Experiment. Heute ziehe ich Bilanz zum Bitcoin Mining PV-Überschuss &#8211; und die fällt anders aus als erhofft.</p>



<p class="wp-block-paragraph"><strong>Kurz zur Einordnung:</strong> Im Juni 2025 habe ich mein Selbstexperiment „Bitcoin Mining mit PV-Überschuss&#8220; gestartet. Ein Antminer S19j Pro, gesteuert über Home Assistant, betrieben mit dem Überschuss meiner 14,4 kWp PV-Anlage. Nach einem Jahr ist es Zeit für ein ehrliches Fazit. Spoiler: Es wird kein Jubelartikel.</p>



<h2 class="wp-block-heading">Der Rückblick – was ist passiert?</h2>



<p class="wp-block-paragraph">Wer die bisherigen Artikel verfolgt hat, kennt das Setup: Antminer S19j Pro mit Braiins OS, gesteuert über Home Assistant, angeschlossen über einen SONOFF POW320D Smart Schalter. Die Fronius Wechselrichter liefern die PV-Daten, Home Assistant berechnet den Überschuss und regelt den Miner automatisch hoch und runter. Das Ganze steht in der Garage – im Haus wäre es schlicht nicht auszuhalten, sowohl von der Lautstärke als auch von der Abwärme.</p>



<p class="wp-block-paragraph">Über den Sommer 2025 lief das System richtig gut. An sonnigen Tagen sprang der Miner morgens an, wurde je nach Überschuss zwischen 1.000 und 2.800 Watt geregelt und ging abends wieder in den Standby. Die Automatisierung funktionierte zuverlässig und brauchte nach der initialen Einrichtung kaum noch Pflege.</p>



<p class="wp-block-paragraph">Dann kam der Herbst. Und mit ihm die ernüchternde Erkenntnis: keine Sonne, kein Mining. Im Winter ging praktisch gar nichts – die PV-Anlage lieferte gerade genug für den Eigenverbrauch, an Überschuss für den Miner war nicht zu denken. Der Antminer stand also monatelang still.</p>



<h2 class="wp-block-heading">Die Technik – läuft wie eine Eins</h2>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_5-1024x559.png" alt="" class="wp-image-2866" srcset="https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_5-1024x559.png 1024w, https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_5-300x164.png 300w, https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_5-768x419.png 768w, https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_5.png 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Das muss man klar sagen: technisch ist das Projekt ein voller Erfolg. Der <a href="https://www.schiffler.eu/thema/antminer/" type="post_tag" id="287">Antminer S19j Pro</a> läuft seit einem Jahr ohne einen einzigen Ausfall. Das Braiins OS macht seinen Job, die<a href="https://www.schiffler.eu/thema/heimautomatisierung/" type="post_tag" id="145"> Home Assistant Automatisierung</a> regelt zuverlässig und die gesamte Kette von PV-Wechselrichter über die <a href="https://www.schiffler.eu/bitcoin-miner-automatisiert-regeln-pv-ueberschuss-antminer-home-assistant/" type="post" id="2739">Automatisierung </a>bis zum Miner funktioniert problemlos.</p>
</div>
</div>



<p class="wp-block-paragraph">Ich betreibe den Miner bewusst nicht auf Volllast, sondern maximal bei 2.800 Watt. Das schont die Hardware – die Chip-Temperatur bleibt entspannt bei rund 66 Grad – und bringt ein gutes <a href="https://www.schiffler.eu/effizienz-im-bitcoin-mining-wie-viel-watt-pro-ths/" type="post" id="2674">Verhältnis aus Hashrate und Effizienz</a>. Der Sprung auf die vollen 3.250 Watt bringt nur marginal mehr Hashrate bei deutlich höherer Temperatur und schlechterer Effizienz.</p>



<h2 class="wp-block-heading">Pool-Mining – die ernüchternde Rechnung</h2>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Im Sommer 2025 lief der Miner über verschiedene Mining-Pools. Ich habe einige ausprobiert – Antpool, Braiins Pool, F2Pool, CloverPool – und die Erträge verglichen. Ein realistischer Tagesertrag lag bei rund 0,00003 BTC, wenn der Miner etwa 8 Stunden bei gutem Sonnenschein laufen konnte.</p>



<p class="wp-block-paragraph">Klingt erstmal nach „immerhin etwas&#8220;. Aber rechnen wir das mal durch:</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large has-lightbox"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_2-1024x559.png" alt="Bitcoin allein auf weiter Flur" class="wp-image-2869" srcset="https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_2-1024x559.png 1024w, https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_2-300x164.png 300w, https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_2-768x419.png 768w, https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_2.png 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>
</div>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Kennzahl</th><th>Wert</th></tr></thead><tbody><tr><td>Tagesertrag (ca. 8h Mining)</td><td>~0,00003 BTC</td></tr><tr><td>BTC-Kurs aktuell</td><td>~60.000 €</td></tr><tr><td>Tagesertrag in Euro</td><td>~1,80 €</td></tr><tr><td>Stromverbrauch (8h × 2 kW Ø)</td><td>~16 kWh</td></tr><tr><td>Einspeisevergütung (selbst reduziert)</td><td>~5–8 ct/kWh</td></tr><tr><td>Entgangene Einspeisung</td><td>~0,80 – 1,28 €</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Selbst bei der durch das Solarspitzengesetz reduzierten Einspeisevergütung ist der direkte Vergleich ernüchternd. Ja, an manchen Stunden gibt es gar keine Vergütung wegen negativer Börsenpreise – da macht Mining Sinn. Aber in der Gesamtbetrachtung über den Tag ist der Vorteil gegenüber dem Einspeisen minimal bis nicht vorhanden. Und das bei einem BTC-Kurs, der seit letztem Jahr von rund 95.000 € auf aktuell rund 60.000 € gefallen ist.</p>



<p class="wp-block-paragraph"><strong>Die bittere Wahrheit:</strong> Der BTC-Kurs ist im Vergleich zum Vorjahr deutlich gefallen. Was letztes Jahr schon knapp war, rechnet sich heute noch weniger. Die wenigen Satoshi, die über Pool-Mining zusammenkommen, sind in Euro umgerechnet weniger wert als die entgangene Einspeisevergütung – selbst bei den durch das Solarspitzengesetz gedrückten Sätzen.</p>



<h2 class="wp-block-heading">Der Wechsel zum Solo-Mining – Lotto mit Sonnenstrom</h2>



<p class="wp-block-paragraph">Ende der Saison 2025 habe ich die Konsequenz gezogen und vom Pool- auf Solo-Mining umgestellt. Der Miner läuft jetzt über den CK Pool im Solo-Modus.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large has-lightbox"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_3-1024x559.png" alt="Bitcoin Mining - ein Lotterie Ticket" class="wp-image-2868" srcset="https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_3-1024x559.png 1024w, https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_3-300x164.png 300w, https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_3-768x419.png 768w, https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_3.png 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Die Überlegung dahinter ist simpel: Wenn sich Pool-Mining finanziell nicht rechnet, kann ich auch gleich auf das große Los setzen. Die Chance, mit meiner Hashrate einen eigenen Block zu finden, ist extrem gering – aber der Gewinn wäre mit der aktuellen Block-Belohnung von 3,125 BTC (also knapp 190.000 €) ein absoluter Gamechanger.</p>
</div>
</div>



<p class="wp-block-paragraph">Wo stehe ich aktuell? Mein Miner hat bisher 40,02 Gigashares berechnet. Mein bester Share lag bei 1,56 Terashares – das klingt beeindruckend, ist aber noch ungefähr Faktor 40 vom Ziel entfernt. Es ist Lotto. Vielleicht habe ich morgen Glück, vielleicht nie. Aber der Strom ist da, der Miner steht in der Garage, und die Kosten für den Betrieb sind quasi null.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Solo-Mining mit PV-Überschuss ist im Grunde ein Lotterielos, das man mit Sonnenstrom bezahlt. Der Einsatz ist virtuell, der mögliche Gewinn real.</p>
</blockquote>



<h2 class="wp-block-heading">Würde ich den Miner nochmal kaufen?</h2>



<p class="wp-block-paragraph"><strong>Klare Antwort: Nein.</strong></p>



<p class="wp-block-paragraph">Die rund 700 Euro Anschaffungskosten lassen sich über <a href="https://www.schiffler.eu/bitcoin-mining-pool-test-2025-fuer-pv-ueberschuss/" type="post" id="2711">Pool-Mining</a> nur über viele Jahre wieder reinholen – wenn überhaupt. Ich hatte auch kurz überlegt, auf einen moderneren Antminer S21 Pro umzusteigen, der bei gleicher Leistungsaufnahme fast die doppelte Hashrate liefert. Aber die Anschaffungskosten sind so viel höher, dass sich die Rechnung erneut nicht aufgeht.</p>



<p class="wp-block-paragraph">Mein Miner ist jetzt da, also läuft er weiter. Die Preise für gebrauchte S19-Modelle sind mittlerweile auch ziemlich am Boden – teilweise unter 600 Euro. Das sagt einiges über den Markt aus.</p>



<h2 class="wp-block-heading">Mein Fazit nach einem Jahr</h2>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph"><strong>Was gut funktioniert:</strong> Die Technik ist absolut solide. Home Assistant mit dem Miner-Plugin, Braiins OS und die PV-Anbindung über Fronius – alles läuft stabil und wartungsfrei. Wer Spaß an Heimautomatisierung und Technik hat, bekommt hier ein tolles Projekt. Die Automatisierung des Miners über PV-Überschuss funktioniert zuverlässig und man lernt extrem viel über Mining, Hashrates, Pools und das Bitcoin-Netzwerk.</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_4-1024x559.png" alt="" class="wp-image-2867" srcset="https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_4-1024x559.png 1024w, https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_4-300x164.png 300w, https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_4-768x419.png 768w, https://www.schiffler.eu/wp-content/uploads/2026/03/miner_recap_4.png 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>
</div>



<p class="wp-block-paragraph"><strong>Was nicht funktioniert:</strong> Die wirtschaftliche Seite. Pool-Mining rechnet sich bei einem einzelnen S19j Pro mit PV-Überschuss nicht – schon gar nicht bei einem BTC-Kurs von 60.000 €. Der Miner steht im Winter still, und selbst im Sommer sind die Erträge in Euro geringer als das, was man über die Einspeisevergütung bekommen hätte. Solo-Mining ist ein reines Glücksspiel.</p>



<h2 class="wp-block-heading">Meine Empfehlung</h2>



<p class="wp-block-paragraph">Wenn mich heute jemand fragt, ob er sich einen Miner für den PV-Überschuss kaufen soll, ist meine analytische Antwort klar: <strong>Nein, tu es nicht.</strong> Die Chancen sind zu gering und die Rechnung geht in den allermeisten Fällen nicht auf.</p>



<p class="wp-block-paragraph">Aber – und das ist das große Aber – wenn du es als Hobby betrachtest, Spaß an der Technik hast und den Miner als eine Art Lotterielos mit Sonnenstrom siehst: why not? Der Strom ist da, die laufenden Kosten sind quasi null, und die kleine Chance auf einen Solo-Block macht das Ganze zumindest spannend.</p>



<p class="wp-block-paragraph">Sollte ich morgen einen Block finden, sieht die Welt natürlich komplett anders aus. Dann schreibe ich hier einen ganz anderen Artikel. Bis dahin bleibt es bei dem, was es ist: ein spannendes Technikprojekt mit einer ernüchternden wirtschaftlichen Bilanz.</p>



<p class="wp-block-paragraph"><strong>TL;DR:</strong> Nach einem Jahr Bitcoin Mining mit PV-Überschuss ist das Fazit klar: technisch top, wirtschaftlich flop. Pool-Mining bringt weniger als die Einspeisevergütung, Solo-Mining ist Lotto. Ich würde mir keinen Miner mehr kaufen – lasse meinen aber weiterlaufen, weil der Strom ohnehin da ist. Wer es als Hobby sieht und die ~700 € investieren will: kann man machen. Wer Geld verdienen will: Finger weg.</p>



<p class="wp-block-paragraph"><em>Wie sind Deine Erfahrungen nach einem Jahr Bitcoin Mining? Hast Du ähnliche Erfahrungen gemacht oder siehst Du das komplett anders? Ich freue mich auf den Austausch in den Kommentaren!</em></p>



<p class="wp-block-paragraph"></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/1-jahr-bitcoin-mining-mit-solarstrom-eine-ehrliche-bilanz/">1 Jahr Bitcoin Mining mit Solarstrom – eine ehrliche Bilanz</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/1-jahr-bitcoin-mining-mit-solarstrom-eine-ehrliche-bilanz/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Heizungssteuerung mit openHab und Google Kalender automatisieren</title>
		<link>https://www.schiffler.eu/heizungssteuerung-mit-openhab-google-kalender/</link>
					<comments>https://www.schiffler.eu/heizungssteuerung-mit-openhab-google-kalender/#respond</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Wed, 29 Nov 2023 06:20:15 +0000</pubDate>
				<category><![CDATA[IT-Know How]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Codeschnipsel]]></category>
		<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Heizung]]></category>
		<category><![CDATA[openHAB]]></category>
		<category><![CDATA[werbung]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=2001</guid>

					<description><![CDATA[<p>Alle Heizkörper hier im Haus sind mit Homematic IP Heizkörperthermostaten ausgestattet welche über die CCU3 Zentrale gesteuert wurden. Nachdem die &#8230; <a href="https://www.schiffler.eu/heizungssteuerung-mit-openhab-google-kalender/" class="more-link">More <span class="screen-reader-text">Heizungssteuerung mit openHab und Google Kalender automatisieren</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/heizungssteuerung-mit-openhab-google-kalender/">Heizungssteuerung mit openHab und Google Kalender automatisieren</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Alle Heizkörper hier im Haus sind mit <a href="https://amzn.to/3MXrkxm" target="_blank" rel="noreferrer noopener sponsored nofollow">Homematic IP Heizkörperthermostaten</a> ausgestattet welche über die <a href="https://amzn.to/40Xf99q" target="_blank" rel="noreferrer noopener sponsored nofollow">CCU3 Zentrale</a> gesteuert wurden. Nachdem die gesamte Steuerung hier über openHab durchgeführt wird war es im Winter 2023 an der Zeit die Systeme zu vereinen. Hier seht Ihr wie ich die Heizungssteuerung mit openHab auf Basis des Google Kalenders umgesetzt habe. </p>



<h2 class="wp-block-heading">openHab Zeitsteuerung über den Google Kalender?</h2>



<p class="wp-block-paragraph"><a href="https://www.schiffler.eu/thema/openhab/">OpenHab </a>ist aus meiner Sicht ein echt einfaches System zur Heimautomatisierung. Wenn es allerdings um das Thema Zeitsteuerung geht ist hier wirklich Nachholbedarf. Es existiert keine einfache Möglichkeit um flexibel Geräte zu unterschiedlichen Zeiten mit eigenen Befehlen zu versorgen. </p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large has-lightbox"><img loading="lazy" decoding="async" width="1024" height="707" src="https://www.schiffler.eu/wp-content/uploads/2023/11/heizungssteuerungCalendarWochensicht-1024x707.png" alt="Heizungssteuerung mit openHab - Kalenderansicht" class="wp-image-2013" srcset="https://www.schiffler.eu/wp-content/uploads/2023/11/heizungssteuerungCalendarWochensicht-1024x707.png 1024w, https://www.schiffler.eu/wp-content/uploads/2023/11/heizungssteuerungCalendarWochensicht-300x207.png 300w, https://www.schiffler.eu/wp-content/uploads/2023/11/heizungssteuerungCalendarWochensicht-768x530.png 768w, https://www.schiffler.eu/wp-content/uploads/2023/11/heizungssteuerungCalendarWochensicht.png 1230w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Durch den Einsatz des <a href="https://www.openhab.org/addons/bindings/icalendar/" target="_blank" rel="noreferrer noopener">iCalendar Bindings</a> und ein paar Zeilen Code ist es mir gelungen die Steuerung der Heizung über den Kalender umzusetzen. </p>



<p class="wp-block-paragraph">Das Screenshot hier zeigt, wie der aktuelle Wochenplan aussieht. Im Gegensatz zu so manch andere Lösung die man im Internet so findet habe ich mich dafür entschieden nur Statusänderungen im Kalender zu hinterlegen und auf diese Events per Script zu reagieren. </p>



<p class="wp-block-paragraph">Jeder Kalendereintrag steht also für eine gewünschte Änderung der Temperatur am Thermostat. Somit können flexibel alle Räume zu unterschiedlichen Zeiten nach meinen Wünschen gesteuert werden. </p>
</div>
</div>



<h2 class="wp-block-heading">eigenen Kalender anlegen</h2>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Im ersten Schritt habe ich in meinem bestehenden Kalender einen neuen Kalender nur für die Steuerung meiner Heizung angelegt. Immerhin möchte ich die Einträge zur Steuerung nicht in meinem normalen Kalender sehen und getrennt verwalten. Dies funktioniert recht einfach <a href="https://calendar.google.com/calendar/u/0/r/settings/createcalendar?pli=1" target="_blank" rel="noreferrer noopener">über diesen Link</a>. </p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure data-wp-context="{&quot;galleryId&quot;:&quot;6a6bbc338759b&quot;}" data-wp-interactive="core/gallery" class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure data-wp-context="{&quot;imageId&quot;:&quot;6a6bbc338764d&quot;}" data-wp-interactive="core/image" data-wp-key="6a6bbc338764d" class="wp-block-image size-full has-lightbox wp-lightbox-container"><img loading="lazy" decoding="async" width="763" height="497" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" data-id="2017" src="https://www.schiffler.eu/wp-content/uploads/2023/11/calendarAnlage_1.png" alt="Kalender anlegen" class="wp-image-2017" srcset="https://www.schiffler.eu/wp-content/uploads/2023/11/calendarAnlage_1.png 763w, https://www.schiffler.eu/wp-content/uploads/2023/11/calendarAnlage_1-300x195.png 300w" sizes="auto, (max-width: 763px) 100vw, 763px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Kalender anlegen</figcaption></figure>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a6bbc33877b0&quot;}" data-wp-interactive="core/image" data-wp-key="6a6bbc33877b0" class="wp-block-image size-full has-lightbox wp-lightbox-container"><img loading="lazy" decoding="async" width="1081" height="460" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" data-id="2016" src="https://www.schiffler.eu/wp-content/uploads/2023/11/calendarAnlage_2.png" alt="iCal Adresse kopieren" class="wp-image-2016" srcset="https://www.schiffler.eu/wp-content/uploads/2023/11/calendarAnlage_2.png 1081w, https://www.schiffler.eu/wp-content/uploads/2023/11/calendarAnlage_2-300x128.png 300w, https://www.schiffler.eu/wp-content/uploads/2023/11/calendarAnlage_2-1024x436.png 1024w, https://www.schiffler.eu/wp-content/uploads/2023/11/calendarAnlage_2-768x327.png 768w" sizes="auto, (max-width: 1081px) 100vw, 1081px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">private Adresse kopieren</figcaption></figure>
</figure>
</div>
</div>



<p class="wp-block-paragraph">Wir geben dem Kalender einen Namen, die gewünschte Zeitzone und speichern diesen. Für die Einbindung in das Binding benötigen wird nur die iCal Adresse. Hierfür gibt es im unteren Bereich eine &#8222;Privatadresse im iCal-Format&#8220; welche über das entsprechende Kopieren-Icon in die Zwischenablage kopiert werden kann. </p>



<h2 class="wp-block-heading">iCalendar Binding installieren und Kalender verbinden</h2>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-full has-lightbox"><img loading="lazy" decoding="async" width="821" height="716" src="https://www.schiffler.eu/wp-content/uploads/2023/11/calendarAnlage_3.png" alt="iCalendar Binding in openHab einrichten" class="wp-image-2023" srcset="https://www.schiffler.eu/wp-content/uploads/2023/11/calendarAnlage_3.png 821w, https://www.schiffler.eu/wp-content/uploads/2023/11/calendarAnlage_3-300x262.png 300w, https://www.schiffler.eu/wp-content/uploads/2023/11/calendarAnlage_3-768x670.png 768w" sizes="auto, (max-width: 821px) 100vw, 821px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Nachdem wir das <a href="https://www.openhab.org/addons/bindings/icalendar/" target="_blank" rel="noreferrer noopener">iCalendar Binding</a> in openHab installiert haben legen wir ein neues Item vom Typ &#8222;Kalender&#8220; an. Dieses Binding dient den späteren Filtern als Gateway und stellt die Verbindung zwischen openHab und dem Kalender her. </p>



<p class="wp-block-paragraph">Ins Feld &#8218;URL&#8216; tragen wir die URL ein, welche wir uns im vorherigen Schritt kopiert haben. Der Aktualisierungsintervall kann ruhig etwas länger sein, in meinem Fall sind es 30 Minuten. Dies bedeutet so viel wie dass das Plugin alle 30 Minuten nach neuen Terminen im Kalender schaut und diese herunterlädt. </p>



<p class="wp-block-paragraph">Nach dem Speichern ist das Plugin auch schon fertig konfiguriert und die Kalendereinträge werden heruntergeladen.</p>
</div>
</div>



<p class="wp-block-paragraph">Schön, doch was nun? Wir haben nun einen Google Kalender in welchen wir Termine einstellen können. Dazu ein Binding welches dafür sorgt, dass diese Termine nach openHab geladen werden. Damit nun die einzelnen Räume gesteuert werden müssen benötigen wir noch ein wenig Konfiguration für jeden einzelnen Raum &#8230;</p>



<h2 class="wp-block-heading">openHab iCalendar Filter verwenden um Räume zu steuern</h2>



<p class="wp-block-paragraph">Um die  Heizungssteuerung mit openHab umzusetzen habe ich mir im ersten Schritt Überlegt, wie ich meine Kalendereinträge gestalten möchte. Um es möglichst einfach zu halten habe ich mich dazu entschieden, je Verändungsevent einen Kalendereintrag zu erstellen. Wenn ich also z.B. im Büro die Heizung morgens um 6:30 Uhr auf 21 Grad stellen möchte und am Nachmittag um 17 Uhr wieder auf 17 Grad dann benötige ich hierfür 2 Kalendereinträge. Ich nutze hierbei den Titel des Kalendereintrages und hinterlege hier den Raum sowie die gewünschte Temperatur. Ein Eintrag mit dem Titel &#8218;Büro: 21&#8216; sorgt dafür, dass das Thermostat im Büro auf 21 Grad, ein Titel &#8218;Büro: 17&#8216; dass das Büro auf 17 Grad geändert wird.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Um die Kalendereinträge des eines Raumes in openHab verfügbar zu haben, habe ich mir je Raum ein Item vom Typ <a href="https://www.openhab.org/addons/bindings/icalendar/#configuration-for-eventfilter" target="_blank" rel="noreferrer noopener">icalendar:eventfilter</a> angelegt. </p>



<p class="wp-block-paragraph">Der Filter selbst nutzt als Bridge das zuvor angelegte Item vom Typ &#8222;Kalender&#8220;. Die Anzahl Kalendereinträge habe ich mit 1 und den Aktualisierungsinterval mit 15 Minuten definiert. Der Filter selbst wurde als Textbasierter Filter auf Basis des Betreff / Title angelegt. Der Suchausdruck entspricht in meinem Fall dem Raumname, hier also &#8218;Büro&#8216; als Text. </p>



<p class="wp-block-paragraph">Diese Konfiguration sorgt dafür, dass im neu angelegten Item 3 Channels angelegt werden. Diese Channels beinhalten die Daten des nächsten Kalendereintrages mit den Werte Startzeit, Endezeit und Titel.</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-full has-lightbox"><img loading="lazy" decoding="async" width="728" height="847" src="https://www.schiffler.eu/wp-content/uploads/2023/11/iCalendarEventfilter.jpg" alt="iCalendar Eventfilter anlegen" class="wp-image-2027" srcset="https://www.schiffler.eu/wp-content/uploads/2023/11/iCalendarEventfilter.jpg 728w, https://www.schiffler.eu/wp-content/uploads/2023/11/iCalendarEventfilter-258x300.jpg 258w" sizes="auto, (max-width: 728px) 100vw, 728px" /></figure>
</div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large has-lightbox"><img loading="lazy" decoding="async" width="1024" height="284" src="https://www.schiffler.eu/wp-content/uploads/2023/11/calendarItemOnModel-1024x284.jpg" alt="iCalendar Eventfilter Channel in Model" class="wp-image-2029" srcset="https://www.schiffler.eu/wp-content/uploads/2023/11/calendarItemOnModel-1024x284.jpg 1024w, https://www.schiffler.eu/wp-content/uploads/2023/11/calendarItemOnModel-300x83.jpg 300w, https://www.schiffler.eu/wp-content/uploads/2023/11/calendarItemOnModel-768x213.jpg 768w, https://www.schiffler.eu/wp-content/uploads/2023/11/calendarItemOnModel-1536x427.jpg 1536w, https://www.schiffler.eu/wp-content/uploads/2023/11/calendarItemOnModel.jpg 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Diese Channels lege ich mir als Points in meinem Model in den jeweiligen Raum. Das ist zwar nicht zwingend notwendig, erleichtert mir aber die Übersicht und die mögliche Fehlersuche.</p>



<p class="wp-block-paragraph"><strong>Wichtig</strong>: An dieser Stelle unbedingt auf die Namensnotation achten. Das Script erwartet den Prefix &#8218;Calendar_Events__&#8216; gefolgt vom Raumname mit dem Suffix &#8218;_Titel&#8216; und &#8218;_Start&#8216;. </p>
</div>
</div>



<p class="wp-block-paragraph">Dieses Vorgehen muss nun für jeden Raum den ich steuern möchte dupliziert werden. Sprich für jeden Raum benötige ich einen eventfilter und die entsprechenden Points im Model damit das nachfolgende Script funktioniert. </p>



<h2 class="wp-block-heading">Heizungssteuerung mit openHab &#8211; das Script</h2>



<p class="wp-block-paragraph">Nachdem die Vorarbeiten nun erledigt sind benötigt es noch ein kleines Script (Rule) welches die Werte der jeweiligen Räume abruft und die Änderungen an den Thermostaten durchführt. Ich habe mich hierbei für einen cronjob entschieden welcher jede Minute läuft und die Werte überprüft:</p>



<pre class="wp-block-code"><code>import java.time.format.DateTimeFormatter
import org.openhab.core.model.script.ScriptServiceUtil

rule "Heizungssteuerung - cron"
	when
		Time cron "5 * * * * ?"
	then
		val roomList = newArrayList('Buro', 'Wohnzimmer', 'Bad_EG', 'Kinderzimmer', 'Schlafzimmer', 'Kueche')
			
		roomList.forEach&#91; itemName |
			if (itemName != "") {
				var itemToManage = "Heizung__" + itemName + "_Set_Temperature"
				
				var calValue = "Calendar_Events__" + itemName + "_Titel"
				var calStart = "Calendar_Events__" + itemName + "_Start"
				
				var newValue = ScriptServiceUtil.getItemRegistry.getItem(calValue).getState.toString
				
				if (newValue != "UNDEF") {
					newValue = newValue.substring(newValue.indexOf(" ")).trim
					
					var currentValue = ScriptServiceUtil.getItemRegistry.getItem(itemToManage).getState.toString
					currentValue = currentValue.substring(0, currentValue.indexOf(" "))

					var currentStart = ScriptServiceUtil.getItemRegistry.getItem(calStart).getStateAs(DateTimeType).zonedDateTime.withZoneSameInstant((new DateTimeType).zonedDateTime.getZone).format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm"))

					if (currentStart.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm")) == now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm"))) {
						logInfo("Heizungssteuerung", "neue Temperatur " + itemToManage + "= " + newValue)
						sendCommand(itemToManage, newValue)
					} 
				}
			}			
		]
end</code></pre>



<p class="wp-block-paragraph">Das Script läuft alle 5 Minuten. Hierbei durchläuft es in einer Schleife alle definierten Räume und prüft, ob eine neue Temperatur eingestellt werden soll. Wichtig ist hierbei die bereits erwähnte Namensnotation der Items. Im ersten Schritt wird geprüft, ob ein neuer Wert eingestellt werden soll. Falls dies der Fall ist prüfen wir ob die aktuelle Uhrzeit der gewünschten Uhrzeit entspricht. Falls auch dieses Kriterium zutrifft setzen wir den entsprechenden Wert am <a href="https://amzn.to/3uGvQty" target="_blank" rel="noreferrer noopener sponsored nofollow">Heizkörperthermostat</a> über den sendCommand Befehl.</p>



<h2 class="wp-block-heading">Zeisteuerung in openHab mit dem Google Calendar &#8211; Fazit</h2>



<p class="wp-block-paragraph">Anfangs dreht ich mich ein wenig im Kreis bis ich die Funktionen der einzelnen Bindings im Detail verstanden hatte und mich langsam dem gewünschten Ziel näherte. Inzwischen läuft die Heizungssteuerung mit openHab über die <a href="https://amzn.to/46yNnkI" target="_blank" rel="noreferrer noopener sponsored nofollow">Homematic IP Komponenten</a> sehr verlässlich. Durch die Planung über meinen Kalender kann ich quasi nebenbei die Zeitpläne von überall aus bearbeiten und bin sehr flexibel geworden. </p>
<p>Der Beitrag <a href="https://www.schiffler.eu/heizungssteuerung-mit-openhab-google-kalender/">Heizungssteuerung mit openHab und Google Kalender automatisieren</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/heizungssteuerung-mit-openhab-google-kalender/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Green-IT auch zuhause &#8211; Stromsparen durch Zeitsteuerung</title>
		<link>https://www.schiffler.eu/green-it-auch-zuhause-stromsparen-durch-zeitsteuerung/</link>
					<comments>https://www.schiffler.eu/green-it-auch-zuhause-stromsparen-durch-zeitsteuerung/#respond</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Thu, 13 Jul 2023 16:52:00 +0000</pubDate>
				<category><![CDATA[IT-Know How]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Green-IT]]></category>
		<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[qnap]]></category>
		<category><![CDATA[werbung]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=1887</guid>

					<description><![CDATA[<p>Schon lange kämpfe ich mich mit dem Gedanken an meiner IT-Infrastruktur hier zuhause ein wenig was zu ändern. Die ständig &#8230; <a href="https://www.schiffler.eu/green-it-auch-zuhause-stromsparen-durch-zeitsteuerung/" class="more-link">More <span class="screen-reader-text">Green-IT auch zuhause &#8211; Stromsparen durch Zeitsteuerung</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/green-it-auch-zuhause-stromsparen-durch-zeitsteuerung/">Green-IT auch zuhause &#8211; Stromsparen durch Zeitsteuerung</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Schon lange kämpfe ich mich mit dem Gedanken an meiner IT-Infrastruktur hier zuhause ein wenig was zu ändern. Die ständig laufenden NAS-Systeme und Server sind teils so gar nicht nötig und verbrauchen unnötige Ressourcen. Nachdem ich beruflich auch ein wenig mit dem Thema Green-IT zu tun bekommen habe musste ich also auch zuhause ein wenig umdenken. </p>



<h2 class="wp-block-heading">Was ist die Ausgangssituation?</h2>



<p class="wp-block-paragraph">Seit vielen Jahren betreibe ich eine <a href="https://www.portrait-service.com/portrait-archiv/funktionsweise/" target="_blank" rel="noreferrer noopener">Online Bildagentur</a> welche Fotografen die Möglichkeit bietet Ihren Kunden Fotos (z.B. aus einem Kindergartenshooting) anzubieten. Hierzu laden die Fotografen die Fotos in Originalgröße hoch, der Endkunde kann diese bestellen und ich kümmere mich um die Bereitstellung der Downloads oder die Produktion der Bilder. Hier fallen viele Daten an welche bei mir auf diversen NAS-Systemen gespeichert werden. Gleichzeitig müssen zu diesem Zweck diverse Aufgaben erledigt werden, wofür ich einen <a href="https://www.schiffler.eu/neuer-homeserver-ryzen-9-3900x-mit-128gb/" target="_blank" rel="noreferrer noopener">eigenen Server</a> in Betrieb haben. </p>



<p class="wp-block-paragraph">Daneben habe ich natürlich auch noch &#8222;private&#8220; Daten. Diese liegen auf einem weiteren NAS-System. </p>


<div class="wp-block-image">
<figure class="aligncenter size-large has-lightbox"><img loading="lazy" decoding="async" width="1024" height="517" src="https://www.schiffler.eu/wp-content/uploads/2023/07/202307_infrastructue-1024x517.png" alt="grobe Infrastruktur des Heimnetzes" class="wp-image-1890" srcset="https://www.schiffler.eu/wp-content/uploads/2023/07/202307_infrastructue-1024x517.png 1024w, https://www.schiffler.eu/wp-content/uploads/2023/07/202307_infrastructue-300x152.png 300w, https://www.schiffler.eu/wp-content/uploads/2023/07/202307_infrastructue-768x388.png 768w, https://www.schiffler.eu/wp-content/uploads/2023/07/202307_infrastructue.png 1255w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Die für die Bildagentur benötigten NAS-Systeme sind heute schon die meiste Zeit aus. Diese werden vom Server per Wake on Lan aktiviert sofern diese benötigt werden (also z.B. für eine Bestellproduktion). Nach der Produktion werden die NAS-Systeme über einen Shellbefehl heruntergefahren. </p>



<p class="wp-block-paragraph">Der Server und das eigene NAS-System laufen jedoch aktuell jeden Tag und rund um die Uhr.</p>



<h2 class="wp-block-heading">Green-IT doch wie?</h2>



<p class="wp-block-paragraph">In der Regel ist es so, dass die Bildagentur sich nachts langweilt. Also muss das System hier eigentlich gar nicht laufen. Einzig die zusätzlichen System wie Jira, Gitlab etc. werden ab und an mal gebraucht, das ist aber auch zu vernachlässigen. Also entschied ich mich, den Server zwischen 22 und 5 Uhr morgens zu deaktivieren. Gleiches soll mit dem NAS für die privaten Daten passieren. Die Frage ist nur, wie stelle ich das an?</p>



<h2 class="wp-block-heading">Schritt 1: rtcwake für den Debian-Server</h2>



<p class="wp-block-paragraph">Eher durch Zufall bin ich auf ein Systemtool namens &#8218;rtcwake&#8216; gestossen. Dieses Standardwerkzeug ermöglicht es einen Debian-Server auzuschalten und, falls gewünscht, nach einer definierten Zeit wieder einzuschalten. Das Tool &#8218;rtcwake&#8216; ist ein fester Bestandteil des Standardpaketes &#8218;util-linux&#8216; welches eigentlich auf jedem System per Default installiert ist. Durch die Ausführung des folgenden Befehles fährt der Server herunter und startet 2 Minuten (120 Sekunden) nachdem dieser ausgeschaltet ist wieder. </p>



<pre class="wp-block-code"><code>sudo rtcwake -m off -s 120</code></pre>



<p class="wp-block-paragraph">Der Paramenter &#8218;-m&#8216; bestimmt &#8218;wie Tief&#8216; der Server in den Schlafmodus gehen soll. In meinem Fall entscheid ich mich für den &#8218;tiefsten&#8216; Wert &#8218;off&#8216;. Eine genaue Aufstellung der einzelnen Optionen ist z.B. im <a href="https://wiki.ubuntuusers.de/rtcwake/" target="_blank" rel="noreferrer noopener">Ubuntu Wiki</a> zu finden. </p>



<p class="wp-block-paragraph">Ich habe mich für einen Cronjob entschieden welcher jeden Tag um 22 Uhr läuft und den Server per &#8218;rtcwake&#8216; für 6,5 Stunden (also 23400 Sekunden) schlafen legt. Das funktioniert sehr zuverlässig. </p>



<h2 class="wp-block-heading">Schritt 2: NAS-Systeme zeitgesteuert starten und stoppen</h2>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="682" src="https://www.schiffler.eu/wp-content/uploads/2023/07/electricity-7600360_1280-1024x682.jpg" alt="Stromkosten" class="wp-image-1886" srcset="https://www.schiffler.eu/wp-content/uploads/2023/07/electricity-7600360_1280-1024x682.jpg 1024w, https://www.schiffler.eu/wp-content/uploads/2023/07/electricity-7600360_1280-300x200.jpg 300w, https://www.schiffler.eu/wp-content/uploads/2023/07/electricity-7600360_1280-768x512.jpg 768w, https://www.schiffler.eu/wp-content/uploads/2023/07/electricity-7600360_1280.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Von Natur aus bin ich eher ein Fauler Mensch und mag gewisse Routinen. Dazu gehört auch, dass ich mich mit der eingesetzten Technik auskennen und damit möglichst blind interagieren können möchte. Somit kommt bei den NAS-Systemen bei mir nur 1 Hersteller zum Einsatz was es einfacher macht bei der Suche nach &#8222;besonderen&#8220; Lösungen. Bei den NAS-Systemen setze ich voll auf die Systeme von QNAP (<a href="https://amzn.to/3NTyVMS" target="_blank" rel="noreferrer noopener sponsored nofollow">TS-219</a>* und <a href="https://amzn.to/3pU7kmG" target="_blank" rel="noreferrer noopener sponsored nofollow">TS-231</a>*). Die Oberfläche von QNAP bietet bereits eine Möglichkeit eine Zeitsteuerung umzusetzen.</p>
</div>
</div>



<p class="wp-block-paragraph">Im Bereich &#8218;System > Leistung&#8216; ist der Energiezeitplan zu finden. Hier kann definiert werden zu welchem Zeitpunkt ein NAS-System herunterfahren und wann es wieder gestartet werden soll. In meinem Fall sieht die Konfiguration wie folgt aus:</p>


<div class="wp-block-image">
<figure class="aligncenter size-large has-lightbox"><img loading="lazy" decoding="async" width="1024" height="257" src="https://www.schiffler.eu/wp-content/uploads/2023/07/qnapEnergiesparmodus-1024x257.png" alt="QNAP Energiesparmodus definieren" class="wp-image-1895" srcset="https://www.schiffler.eu/wp-content/uploads/2023/07/qnapEnergiesparmodus-1024x257.png 1024w, https://www.schiffler.eu/wp-content/uploads/2023/07/qnapEnergiesparmodus-300x75.png 300w, https://www.schiffler.eu/wp-content/uploads/2023/07/qnapEnergiesparmodus-768x193.png 768w, https://www.schiffler.eu/wp-content/uploads/2023/07/qnapEnergiesparmodus.png 1420w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">In meinem Fall fahre ich das NAS um 22:15 Uhr herunter und starte es um 4:50 Uhr morgens wieder. Gegen 5 Uhr starten die einzelnen Synchronisierungsdienste / Datensicherungen so dass die Systeme zur Verfügung stehen wenn diese benötigt werden und &#8217;schlafen&#8216; wenn diese nicht benötigt sind. </p>



<h2 class="wp-block-heading">Green-IT auch kleine Schritte helfen</h2>



<p class="wp-block-paragraph">Das Thema <a href="https://de.wikipedia.org/wiki/Green_IT" target="_blank" rel="noreferrer noopener">Green-IT</a> ist ein recht umfangreiches Thema und geht weit über das Thema &#8222;Energiesparen&#8220; hinaus.  Ungenutzte Ressourcen zu betreiben ist absolut unnötig und verbraucht nicht nur Energie sondern belastet hierdurch auch den eigenen Geldbeutel. Ich für meinen Teil bin jetzt erstmal froh, dass Systeme die sich &#8222;langweilen&#8220; nicht mehr laufen sondern nur dann Energiefressen wenn diese auch benötigt sind. </p>
<p>Der Beitrag <a href="https://www.schiffler.eu/green-it-auch-zuhause-stromsparen-durch-zeitsteuerung/">Green-IT auch zuhause &#8211; Stromsparen durch Zeitsteuerung</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/green-it-auch-zuhause-stromsparen-durch-zeitsteuerung/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pushsafer für Waschmaschine &#8211; sag mir bescheid wenn Du fertig bist</title>
		<link>https://www.schiffler.eu/pushsafer-fuer-waschmaschine-sag-mir-bescheid-wenn-du-fertig-bist/</link>
					<comments>https://www.schiffler.eu/pushsafer-fuer-waschmaschine-sag-mir-bescheid-wenn-du-fertig-bist/#respond</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Sat, 03 Jun 2023 09:47:48 +0000</pubDate>
				<category><![CDATA[eigene Projekte]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Codeschnipsel]]></category>
		<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[openHAB]]></category>
		<category><![CDATA[werbung]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=1852</guid>

					<description><![CDATA[<p>Wie bereits in meinem Beitrag zum gleichen Thema in Verbindung mit FHEM geschildet, ist die automatische Benachrichtigung wenn die Waschmaschine &#8230; <a href="https://www.schiffler.eu/pushsafer-fuer-waschmaschine-sag-mir-bescheid-wenn-du-fertig-bist/" class="more-link">More <span class="screen-reader-text">Pushsafer für Waschmaschine &#8211; sag mir bescheid wenn Du fertig bist</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/pushsafer-fuer-waschmaschine-sag-mir-bescheid-wenn-du-fertig-bist/">Pushsafer für Waschmaschine &#8211; sag mir bescheid wenn Du fertig bist</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Wie bereits in meinem <a href="https://www.schiffler.eu/waschmaschine-statusmail-fhem-homematic/">Beitrag zum gleichen Thema in Verbindung mit FHEM</a> geschildet, ist die automatische Benachrichtigung wenn die Waschmaschine (oder auch der Trockner) fertig ist ein elementares Feature in unserer Heimautomatisierung. Der Grund hierfür ist die erhöhte Akzeptanz für meine &#8222;Spielereien&#8220; bei meiner Frau. Durch die <a href="https://www.schiffler.eu/thema/openhab/">Umstellung auf OpenHAB</a> musste also auf hierfür eine neue Lösung herbei. Durch den Einsatz von Pushsafer für Waschmaschine Statusupdates konnte eine kostengünstige Lösung umgesetzt werden, bei welcher die Waschmaschine (und auch der Wäschetrockner) uns Benachrichtigungen senden, wenn diese Ihre Arbeit verrichtet haben. Wie ich das ganze mit OpenHAB umgesetzt habe, dokumentiere ich im folgenden Artikel.</p>



<h2 class="wp-block-heading">Das Grundsetup</h2>



<p class="wp-block-paragraph">Unsere Waschmaschine und auch unser Wäschetrockner stehen im Keller im Waschkeller. Wir befinden uns irgendwo im Haus (oder Garten) und hören selbige nicht. Wir bekommen also in der Regel nicht selbst mit, ob die Geräte fertig sind. Schön wäre es doch, wenn uns das Gerät selbst bescheid sagt, wenn es fertig ist, oder?</p>



<p class="wp-block-paragraph">Hierfür analysiere ich den Stromverbrauch der jeweiligen Geräte. Ist das Gerät aktiv so ist der Stromverbrauch höher als im Ruhemodus. Also messen wir &#8222;einfach&#8220; den Stromverbrauch und prüfen, ob dieser höher ist als der Ruhemodus. Befindet sich das Gerät längere Zeit im Ruhemodus so senden wir eine Benachrichtigung und schalten das Gerät aus. </p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><a href="https://amzn.to/3E1YgTz" target="_blank" style="text-decoration: none; color: inherit;">
    <div class="container">
        <div class="row">
            <div class="col-12 d-flex justify-content-center align-items-center">
                <img decoding="async" src="https://m.media-amazon.com/images/I/61lzoB+tG3L._AC_SX679_.jpg" alt="Homematic IP Smart Home Schalt-Mess-Steckdose" class="img-fluid" style="max-height: 200px; width: auto; margin: 0 auto; display: block;">
            </div>
        </div>
        <div class="row">
            <div class="col-12 text-center">
                <center><button class="btn btn-primary btn-sm">Jetzt auf Amazon ansehen *</button></center>
            </div>
        </div>
    </div>
</a>

</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><a href="https://amzn.to/40IDstq" target="_blank" style="text-decoration: none; color: inherit;">
    <div class="container">
        <div class="row">
            <div class="col-12 d-flex justify-content-center align-items-center">
                <img decoding="async" src="https://m.media-amazon.com/images/I/510VI9p193L._AC_SX679_.jpg" alt="Homematic IP Smart Home Zentrale CCU3" class="img-fluid" style="max-height: 200px; width: auto; margin: 0 auto; display: block;">
            </div>
        </div>
        <div class="row">
            <div class="col-12 text-center">
                <center><button class="btn btn-primary btn-sm">Jetzt auf Amazon ansehen *</button></center>
            </div>
        </div>
    </div>
</a>

</div>
</div>



<p class="wp-block-paragraph">Hierfür wurden beide Geräte über eine eigene smarte <a href="https://amzn.to/3oipHRP" target="_blank" rel="noreferrer noopener sponsored nofollow">Steckdose mit Leistungsmessung*</a> am Stromnetz angeschlossen. Hier habe ich mich für die Steckdosen von <a href="https://amzn.to/3Iwq7L2" target="_blank" rel="noreferrer noopener sponsored nofollow">Homematic*</a> entschieden. Dazu betreibe ich die <a href="https://amzn.to/3BPxppt" target="_blank" rel="noreferrer noopener sponsored nofollow">Homematic CCU3 Zentrale*</a> welche über das entsprechende <a href="https://www.openhab.org/addons/bindings/homematic/" target="_blank" rel="noreferrer noopener nofollow">Binding</a> an meine auf dem <a href="https://amzn.to/420jA2a" target="_blank" rel="noreferrer noopener sponsored nofollow">Raspberry*</a> betriebene <a href="https://www.openhab.org/" target="_blank" rel="noreferrer noopener">OpenHAB Installation</a> angebunden ist. </p>



<h2 class="wp-block-heading">Pushsafer für Waschmaschine Statusupdate versenden &#8211; Scripte</h2>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Im ersten Schritt benötigen wir in OpenHAB unsere Steckdose als &#8222;Thing&#8220;. Diese habe ich mir in mein Modell des Hauswirtschaftsraumes gezogen und mit 3 Items angelegt:</p>



<ul class="wp-block-list">
<li> Current -&gt; aktueller Stromverbrauch</li>



<li>Energy Counter -&gt; gesamter Stromverbrauch</li>



<li>State -&gt; Status (ein / aus)</li>
</ul>



<p class="wp-block-paragraph">Für die beschriebene Umsetzung wird der aktuelle Stromverbrauch sowie der Status benötigt. Hier aber zunächst mal das umgesetzte Script:</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="264" height="241" src="https://www.schiffler.eu/wp-content/uploads/2023/05/openhab_waschmaschine_device.png" alt="OpenHAB - Device für Stromverbrauch der Waschmaschine" class="wp-image-1857"/></figure>
</div>
</div>



<pre class="wp-block-code"><code>rule "HWR Waschmaschine - Energychange"
  when
    Item Strom__HWR__Waschmaschine_Current.state changed
  then
    val Number grenze = 50

    if((Strom__HWR__Waschmaschine_Current.state.state as DecimalType).intValue &lt; grenze) {
      if (timerHwrWaschmaschine === null) {
        timerHwrWaschmaschine = createTimer(now.plusMinutes(2), &#091;
          if((Strom__HWR__Waschmaschine_Current.state.state as DecimalType).intValue &lt; grenze &amp;&amp; Strom__HWR__Waschmaschine_State.state.toString == "ON") {
            logInfo("rules.automatic.hwr.wash", "Stromverbrauch länger als 2 Minuten unter Grenzwert - ausschalten")
            Strom__HWR__Waschmaschine_State.sendCommand(OFF)

            val actions = getActions("pushsafer", "pushsafer:pushsafer-account:gemeinsam")
            actions.sendPushsaferMessage("Homecontrol - HWR", "Waschmaschine ist aus")

            timerHwrWaschmaschine = null
          }
        ])
      }
    } else {
      timerHwrWaschmaschine?.cancel
      timerHwrWaschmaschine = null
    }
end</code></pre>



<p class="wp-block-paragraph">Das Rule &#8218;HWR Waschmaschine &#8211; Energychange&#8216; reagiert auf jede Änderung des Stromverbrauches des Items &#8218;Strom__HWR__Waschmaschine_Current&#8216; welches auf den aktuellen Stromverbrauch der Waschmaschine gemappt wurde. Bei jeder Änderung eines Wertes wird die Regel getriggert und führt den Code aus. </p>



<p class="wp-block-paragraph">Im ersten Schritt lege ich eine Variable &#8222;grenze&#8220; an welche den Schwellert definiert, ab wann das Gerät sich für mich im Ruhemodus befindet. Dieser Wert ist für jedes Gerät individuell und variiert. Bei meiner Waschmaschine liegt der Verbrauch im Ruhemodus unter 50 Watt. Diese Definition ist nicht zwingend notwendig, macht den Code aber einfach lesbarer.</p>



<p class="wp-block-paragraph">Im nächsten Schritt prüfe ich, ob der aktuelle Stromverbrauch sich unterhalb der definierten Grenze liegt. Ist die der Fall so wird ein Timer gestartet welcher 2 Minuten lang läuft. Sind die 2 Minuten erreicht wird erneut geprüft ob der aktuelle Stromverbrauch weiterhin unterhalb der Grenze liegt und ob die Steckdose noch eingeschaltet ist. Ist dies der Fall senden wir die Pushsafer Notification über das entsprechend angelegte Binding und setzen den Timer wieder auf null. </p>



<p class="wp-block-paragraph">Ist der aktuelle Stromverbrauch höher als die Grenze beenden wir eventuell laufende Timer und setzen selbige auf null. </p>



<h2 class="wp-block-heading">Warum der Timer?</h2>



<p class="wp-block-paragraph">Die wenigsten Elektrogeräte haben über die Zeit hin immer den gleichen Stromverbrauch. In den ersten Versuchen habe ich die Waschmaschine regelmäßig während dem Betrieb ausgeschaltet da ich auf einen Timer verzichten wollte. Dummerweise ist es aber so, dass die Waschmaschine auch im normalen Betrieb irgendwann mal ansatzweise gar keinen Strom zieht. Kurz danach fährt der Stromverbrauch wieder hoch und die Maschine beginnt z.B. zu schleudern nachdem das Wasser abgepumpt wurde. Um diese Zeiten zu überbrücken wurde der Time umgesetzt. Wir warten also 2 Minuten lang bevor wir die Maschine abschalten. Springt der Stromverbrauch während dieser 2 Minuten wieder über die definierte Grenze so brechen wir den Timer ab. Nur wenn wir 2 Minuten den Stromverbrauch unterhalb der definierten Grenze haben ist die Arbeit für uns beendet und wir schalten die Maschine ab und senden die Benachrichtigung.</p>



<h2 class="wp-block-heading">Pushsafer Notification für die Waschmaschine läuft verlässlich</h2>



<p class="wp-block-paragraph">Bei uns zuhause ist die hier beschriebene Lösung nun seit einiger Zeit im Einsatz. Sie läuft sehr verlässlich und informiert uns immer sobald die Arbeit beendet ist. Somit wissen wir wann wir die nächste Ladung Wäsche anstellen oder den Trockner befüllen können. Mit Sicherheit ist das hier keine Raketentechnik &#8211; sie erleichtert uns jedoch das Leben ein wenig <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p class="wp-block-paragraph">Wie sind eure Erfahrungen? Habt Ihr selbst auch eine solche Lösung umgesetzt, eine andere Lösung oder ist es euch total egal und Ihr wollt von euren Maschine nicht angeschrien werden? </p>
<p>Der Beitrag <a href="https://www.schiffler.eu/pushsafer-fuer-waschmaschine-sag-mir-bescheid-wenn-du-fertig-bist/">Pushsafer für Waschmaschine &#8211; sag mir bescheid wenn Du fertig bist</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/pushsafer-fuer-waschmaschine-sag-mir-bescheid-wenn-du-fertig-bist/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>E-Mail Anhänge nach ecoDMS importieren &#8211; mit Python 3</title>
		<link>https://www.schiffler.eu/e-mail-anhaenge-nach-ecodms-importieren-mit-python-3/</link>
					<comments>https://www.schiffler.eu/e-mail-anhaenge-nach-ecodms-importieren-mit-python-3/#comments</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Thu, 14 Jul 2022 06:59:41 +0000</pubDate>
				<category><![CDATA[IT-Know How]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Codeschnipsel]]></category>
		<category><![CDATA[cronjob]]></category>
		<category><![CDATA[Datensicherung]]></category>
		<category><![CDATA[E-Mail]]></category>
		<category><![CDATA[ecoDMS]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=1734</guid>

					<description><![CDATA[<p>Im August 2020 veröffentlichte ich den Beitrag &#8222;E-Mail PDF-Anhang speichern – Python-Script für ecoDMS Übergabe&#8220; welcher sich mit dem Thema &#8230; <a href="https://www.schiffler.eu/e-mail-anhaenge-nach-ecodms-importieren-mit-python-3/" class="more-link">More <span class="screen-reader-text">E-Mail Anhänge nach ecoDMS importieren &#8211; mit Python 3</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/e-mail-anhaenge-nach-ecodms-importieren-mit-python-3/">E-Mail Anhänge nach ecoDMS importieren &#8211; mit Python 3</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Im August 2020 veröffentlichte ich den Beitrag &#8222;<a href="https://www.schiffler.eu/e-mail-pdf-anhang-speichern-python-script/" target="_blank" rel="noreferrer noopener">E-Mail PDF-Anhang speichern – Python-Script für ecoDMS Übergabe</a>&#8220; welcher sich mit dem Thema E-Mail Anhänge nach ecoDMS importieren beschäftigte. Als Basis für diesen Beitrag setzte ich damals auf Python in der Version 2. Nachdem ich in diesem Beitrag nun einige Kommentare erhalten habe dass das Script nicht mit Python 3 lauffähig ist habe ich hier nun endlich das Update.</p>



<h2 class="wp-block-heading">Warum dieses Script?</h2>



<p class="wp-block-paragraph">Wie bereits aus anderen Beiträgen hier bekannt bin ich ein Freund des papierlosen Büros. Aus diesem Grund setze ich bei mir auf das DMS-System ecoDMS. Dies funktioniert auch wunderbar mit einer Ausnahme. EcoDMS bietet keinen Import von Mails an was für mich eine mittlere Katastrophe darstellt. Die meisten Rechnungen kommen inzwischen digital per PDF in meinen Posteingang. Diese möchte ich gerne an eine definierte E-Mail Adresse weiterleiten so dass der Import ins DMS automatisch erfolgen kann. </p>



<h2 class="wp-block-heading">Wie funktioniert das Python 3 Script zum Downloaden von PDF-Anhängen?</h2>



<p class="wp-block-paragraph">Das Script selbst ist recht einfach. Es verbindet sich über die <a href="https://pypi.org/project/imbox/" target="_blank" rel="noreferrer noopener">Python IMAP Library</a> zu dem definierten Postfach. Dort wird in allen Mails geprüft, ob PDF-Anhänge vorliegen. Falls das der Fall ist wird der Anhang in das Zielverzeichnis von ecoDMS heruntergeladen. Anschliessend wird die Mail gelöscht. </p>



<p class="wp-block-paragraph">In meinem Fall wird das Script mehrmals täglich über einen Cronjob ausgeführt. Die definierte Postfach-Adresse ist nur mir bekannt so kann ich Mails, welche einen Anhang beinhalten der ins DMS muss einfach dort hin weiterleiten. </p>



<h2 class="wp-block-heading">E-Mail Anhänge nach ecoDMS importieren &#8211; das Script</h2>



<p class="wp-block-paragraph">Bevor das Script funktioniert muss noch die benötige Python-Library installiert werden. Dies erfolgt über den folgenden Befehl:</p>



<pre class="wp-block-code"><code>pip3 install imbox # alternativ auch pip install imbox</code></pre>



<p class="wp-block-paragraph">Anschliessen müssen noch die Parameter für den Hostname, Username und Passwort für das definierte Postfach hinterlegt werden. Schon kann das Script ausgeführt werden und tut was es soll (hoffentlich zumidnest).</p>



<pre class="wp-block-code"><code>#!/usr/bin/env python
"""
importDmsMailsPy3.py

Check emails at :const:`PROVIDER` for attachments and save them to
:const:`SAVEDIR`.
"""
import os
from imbox import Imbox #pip3 install imbox
import traceback

PROVIDER = 'XXXX'
USER = 'XXXX'
PASSWORD = 'XXXX'

SAVE_DIR = '/opt/ecodms/workdir/scaninput/'

def getNotExistingFileName(saveDir, srcFileName):
    counter = 1
    if (srcFileName.endswith("pdf?=")):
        srcFileName = "scanbymail.pdf"
    while (True):
        currentName = srcFileName
        if (counter > 1):
            currentName = str(counter) + "_" + srcFileName
        if (os.path.isfile(saveDir + currentName)):
            counter = counter + 1
        else:
            return currentName

def save_attachment(attachment):
    attachmentFileName = attachment.get('filename')
    print('Handle Attachment {0!r}.'.format(attachmentFileName))
    if attachmentFileName.endswith(("pdf", "PDF", "Pdf", "PDf", "pDF", "pdF", "PdF", "pdf?=")):
        targetName = attachmentFileName.replace("/", "_")
        targetName = getNotExistingFileName(SAVE_DIR, targetName)
        download_path = f"{SAVE_DIR}/{targetName}"
        with open(download_path, "wb") as download:
            download.write(attachment.get('content').read())
            print('Found and saved attachment {0!r}.'.format(targetName))

def main():
    try:
        mailBox = Imbox (PROVIDER, username=USER, password=PASSWORD, ssl=True, ssl_context=None, starttls=False)
        mailBoxContent = mailBox.messages()

        for (mailId, mail) in mailBoxContent:
            mailBox.mark_seen(mailId)

            for idx, attachment in enumerate(mail.attachments):
                try:
                    save_attachment(attachment)
                except:
                    print(traceback.print_exc())

            mailBox.delete(mailId)
    finally:
        mailBox.logout()

if __name__ == '__main__':
    main()
</code></pre>



<p class="wp-block-paragraph">Anbei das Script noch als Download:</p>



<div data-wp-interactive="core/file" class="wp-block-file"><object data-wp-bind--hidden="!state.hasPdfPreview" hidden class="wp-block-file__embed" data="https://www.schiffler.eu/wp-content/uploads/2022/07/importDmsMailsPy3.pdf" type="application/pdf" style="width:100%;height:600px" aria-label="Einbettung von Einbettung von importDmsMailsPy3.."></object><a id="wp-block-file--media-5e2e7309-1b9b-44f6-a467-c925898d2f0c" href="https://www.schiffler.eu/wp-content/uploads/2022/07/importDmsMailsPy3.pdf">importDmsMailsPy3</a><a href="https://www.schiffler.eu/wp-content/uploads/2022/07/importDmsMailsPy3.pdf" class="wp-block-file__button" download aria-describedby="wp-block-file--media-5e2e7309-1b9b-44f6-a467-c925898d2f0c">Herunterladen</a></div>



<h2 class="wp-block-heading">Vorsicht</h2>



<p class="wp-block-paragraph">Das Script löscht bei jedem Lauf ALLE Mails in dem Postfach. Bei der Verwendung bitte auf jeden Fall darauf achten, dass für den Import ein eigenes Postfach definiert ist in welchem nur die Mails vorliegen, welche ins DMS übergeben werden sollen. </p>



<p class="wp-block-paragraph">Wer möchte kann das Script natürlich gerne verwenden und auf seine Bedürfnisse anpassen. Natürlich übernehme ich keine Garantie für die Funktion des Scriptes, die Verwendung erfolgt auf eigene Gefahr <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/e-mail-anhaenge-nach-ecodms-importieren-mit-python-3/">E-Mail Anhänge nach ecoDMS importieren &#8211; mit Python 3</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/e-mail-anhaenge-nach-ecodms-importieren-mit-python-3/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Whirlpool Stromverbrauch &#8211; Messung über 12 Monate</title>
		<link>https://www.schiffler.eu/whirlpool-stromverbrauch-messung-ueber-12-monate/</link>
					<comments>https://www.schiffler.eu/whirlpool-stromverbrauch-messung-ueber-12-monate/#respond</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Fri, 15 Jan 2021 05:42:00 +0000</pubDate>
				<category><![CDATA[Zuhause]]></category>
		<category><![CDATA[Auswertung]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Erfahrungsbericht]]></category>
		<category><![CDATA[FHEM]]></category>
		<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Whirlpool]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=1156</guid>

					<description><![CDATA[<p>Nobel geht die Welt zugrunde &#8230; ist klar. Natürlich mag der ein oder andere sich fragen ob wir sonst keine &#8230; <a href="https://www.schiffler.eu/whirlpool-stromverbrauch-messung-ueber-12-monate/" class="more-link">More <span class="screen-reader-text">Whirlpool Stromverbrauch &#8211; Messung über 12 Monate</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/whirlpool-stromverbrauch-messung-ueber-12-monate/">Whirlpool Stromverbrauch &#8211; Messung über 12 Monate</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Nobel geht die Welt zugrunde &#8230; ist klar. Natürlich mag der ein oder andere sich fragen ob wir sonst keine Probleme haben als uns über den Stromverbrauch unseres Whirlpools Gedanken zu machen. Fakt ist jedoch, dass wir regelmäßig gefragt werden, wie viel Strom denn so ein Whirlpool wirklich verbraucht. Wir haben den Whirlpool Stromverbrauch über 12 Monate gemessen, hier die Auswertung. </p>



<h2 class="wp-block-heading">Die Rahmendaten &#8211; Temperaturen im Whirlpool</h2>



<p class="wp-block-paragraph">Damit hier niemand Äpfel mit Birnen vergleicht ist es wichtig zu wissen, wie wir den Whirlpool verwenden. Die Heizkosten unterscheiden sich massiv je nach Aufstellungsort und den gewählten Temperaturen. Aus diesem Grund ist bei der Betrachtung dieser Auswertung immer im Hinterkopf zu behalten, dass unser Whirlpool nicht im freien, sondern in einem Wintergarten steht. Hier ist es nie unter 0 Grad, selbst im tiefsten Winter fallen die Temperaturen nicht unter 8 Grad. </p>



<p class="wp-block-paragraph">Auch ist der Whirlpool nicht das gesamte Jahr auf Betriebstemperatur, sondern nur dann, wenn wir diesen auch nutzen möchten. Im täglichen Betrieb ist die Heizung auf 25 Grad eingestellt. Entscheiden wir den Whirlpool zu nutzen so stellen wir diesen nachmittags auf die gewünschten 38 Grad und heizen diesen entsprechend hoch. Dies spart, ebenso wie der Aufstellungsort, natürlich zusätzlich Energie. </p>



<h2 class="wp-block-heading">Messung des Stromverbrauchs &#8211; FHEM das Mittel der Wahl</h2>



<p class="wp-block-paragraph">Wie bereits in diversen anderen Artikeln zu lesen setzen wir bei uns zuhause auf eine kleine Heimautomatisierung mittels FHEM. Der Whirlpool hängt hierbei an einer Steckdose mit Leistungsmessung welche den Stromverbrauch ständig kontrolliert und protokolliert. Mehr Details hierzu findest Du im Artikel &#8222;<a href="https://www.schiffler.eu/stromverbrauch-ueberwachen-mit-fhem-kein-problem/" target="_blank" rel="noreferrer noopener">Stromverbrauch überwachen &#8211; mit FHEM kein Problem</a>&#8222;. </p>



<h2 class="wp-block-heading">Whirlpool Stromverbrauch über 12 Monate ausgewertet</h2>



<p class="wp-block-paragraph">Die Verbrauchsmessung ist nun etwas mehr als 12 Monate gelaufen. Der Auswertezeitraum beginnt am 1. Januar 2020 und endet am 31. Dezember 2020 und umfasst somit ein gesamtes Jahr. </p>



<p class="wp-block-paragraph">Erwartungsgemäß ist zu Erkennen, dass der Energieverbrauch des Whirlpools in direktem Zusammenhang mit den Faktoren der Außentemperaturen und der Nutzungshäufigkeit. So ist der Verbrauch in kalten Monaten um einiges höher als z.B. im Hochsommer.</p>



<figure class="wp-block-image size-large"><a href="https://www.schiffler.eu/wp-content/uploads/2021/01/2020_whirlpool_verbrauch_grafik.png"><img loading="lazy" decoding="async" width="890" height="499" src="https://www.schiffler.eu/wp-content/uploads/2021/01/2020_whirlpool_verbrauch_grafik.png" alt="Whirlpool Verbrauchsübersicht 2020" class="wp-image-1201" srcset="https://www.schiffler.eu/wp-content/uploads/2021/01/2020_whirlpool_verbrauch_grafik.png 890w, https://www.schiffler.eu/wp-content/uploads/2021/01/2020_whirlpool_verbrauch_grafik-300x168.png 300w, https://www.schiffler.eu/wp-content/uploads/2021/01/2020_whirlpool_verbrauch_grafik-768x431.png 768w" sizes="auto, (max-width: 890px) 100vw, 890px" /></a></figure>



<p class="wp-block-paragraph">Den höchsten Stromverbrauch hatten wir in den Monaten Januar und Dezember mit jeweils etwas mehr als 200 kWh. Der niedrigste Verbrauch war im Sommer in den Monaten Juli und August mit einem Verbrauch von weniger als 50 kWh. </p>


<div class="wp-block-image">
<figure class="aligncenter size-medium"><a href="https://www.schiffler.eu/wp-content/uploads/2021/01/2020_whirlpool_verbrauch_werte.png"><img loading="lazy" decoding="async" width="273" height="300" src="https://www.schiffler.eu/wp-content/uploads/2021/01/2020_whirlpool_verbrauch_werte-273x300.png" alt="Whirlpool Verbrauchsübersicht 2020" class="wp-image-1200" srcset="https://www.schiffler.eu/wp-content/uploads/2021/01/2020_whirlpool_verbrauch_werte-273x300.png 273w, https://www.schiffler.eu/wp-content/uploads/2021/01/2020_whirlpool_verbrauch_werte.png 400w" sizes="auto, (max-width: 273px) 100vw, 273px" /></a></figure>
</div>


<p class="wp-block-paragraph">In dem in 2020 genutzten Stromtarif zahlten wir je kWh einen Betrag von 0,2506 EUR (Grundkosten sind hier nun mal ausgenommen). Wenn wir nun also den Verbrauch der einzelnen Monate zusammen rechnen so kommen wir auf einen <strong>Gesamtverbrauch von 1.483,25 kWh oder auch 371,70 EUR</strong> im Jahr. </p>



<h2 class="wp-block-heading">hohe Kosten trotz Schutz im Wintergarten</h2>



<p class="wp-block-paragraph">Natürlich müssen wir unseren Bekannten rechtgeben welche sagen ein Whirlpool sei ein Stromfresser. Dass diese &#8222;Spaßinvestition&#8220; kein günstiges Thema wird war uns von Anfang an klar. Allerdings hatten wir, nachdem wir uns bei diversen Firmen haben beraten lassen schon mit niedrigeren Kosten gerechnet, zumal der Whirlpool in einem kältegeschützten Wintergarten steht. Über den Daumen kommen wir jedoch noch immer auf Kosten von ~ 1 Euro pro Tag und das ist es uns dann doch wert <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p class="wp-block-paragraph">Dennoch würde mich wirklich einmal interessieren wie hoch die Stromverbrauchskosten wären, wenn der Whirlpool nicht im Wintergarten sondern, wie normalerweise angeraten, draußen im Garten stehen würde. Hat hier eventuell jemand Erfahrungen / Vergleichswerte?</p>
<p>Der Beitrag <a href="https://www.schiffler.eu/whirlpool-stromverbrauch-messung-ueber-12-monate/">Whirlpool Stromverbrauch &#8211; Messung über 12 Monate</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/whirlpool-stromverbrauch-messung-ueber-12-monate/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Waschmaschine Statusmail selbstgebaut</title>
		<link>https://www.schiffler.eu/waschmaschine-statusmail-fhem-homematic/</link>
					<comments>https://www.schiffler.eu/waschmaschine-statusmail-fhem-homematic/#respond</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Sat, 10 Oct 2020 06:30:00 +0000</pubDate>
				<category><![CDATA[IT-Know How]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Codeschnipsel]]></category>
		<category><![CDATA[FHEM]]></category>
		<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[werbung]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=796</guid>

					<description><![CDATA[<p>Jeder der sich mit der Heimautomatisierung beschäftigt kennt das Problem: Wie bekomme ich meine Frau dazu das System zu akzeptieren. &#8230; <a href="https://www.schiffler.eu/waschmaschine-statusmail-fhem-homematic/" class="more-link">More <span class="screen-reader-text">Waschmaschine Statusmail selbstgebaut</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/waschmaschine-statusmail-fhem-homematic/">Waschmaschine Statusmail selbstgebaut</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Jeder der sich mit der Heimautomatisierung beschäftigt kennt das Problem: Wie bekomme ich meine Frau dazu das System zu akzeptieren. Durch die Waschmaschine Statusmail konnte ich die Akzeptanz zuhause mächtig erhöhen denn seit der Einführung informiert sowohl die Waschmaschine als auch der Trockner darüber, dass diese fertig sind. Anfangs wurde diese Funktion als Spielerei abgetan, inzwischen ist das kleine Script etwas was sich fest in unserem Tagesablauf eingebrannt hat und uns unnötige Wege erspart.</p>



<h2 class="wp-block-heading">Waschmaschine Statusmail wenn fertig mit der Arbeit</h2>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Das Konzept ist denkbar einfach. Wie bei vielen befinden sich unsere Waschmaschine und der Wäschetrockner in einem eigenen Raum im Keller. Wer dieses Konstrukt kennt der weiß, dass es echt nervig ist wenn man auf Wäsche wartet ständig in den Keller zu rennen um zu schauen ob diese fertig ist. &#8222;<strong>Warum nicht einfach den Stromverbrauch überwachen und erst dann in den Keller rennen wenn die Waschmaschine fertig ist?</strong>&#8220; &#8211; diese Frage stellte ich mir. </p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" src="https://www.schiffler.eu/wp-content/uploads/2020/08/jonas-leupe-QQ2d5naZee0-unsplash-1024x683.jpg" alt="Smartphone Notification" class="wp-image-989" title="Waschmaschine Statusmail Notification" srcset="https://www.schiffler.eu/wp-content/uploads/2020/08/jonas-leupe-QQ2d5naZee0-unsplash-1024x683.jpg 1024w, https://www.schiffler.eu/wp-content/uploads/2020/08/jonas-leupe-QQ2d5naZee0-unsplash-300x200.jpg 300w, https://www.schiffler.eu/wp-content/uploads/2020/08/jonas-leupe-QQ2d5naZee0-unsplash-768x512.jpg 768w, https://www.schiffler.eu/wp-content/uploads/2020/08/jonas-leupe-QQ2d5naZee0-unsplash-1536x1024.jpg 1536w, https://www.schiffler.eu/wp-content/uploads/2020/08/jonas-leupe-QQ2d5naZee0-unsplash-2048x1365.jpg 2048w, https://www.schiffler.eu/wp-content/uploads/2020/08/jonas-leupe-QQ2d5naZee0-unsplash-360x240.jpg 360w, https://www.schiffler.eu/wp-content/uploads/2020/08/jonas-leupe-QQ2d5naZee0-unsplash-600x400.jpg 600w, https://www.schiffler.eu/wp-content/uploads/2020/08/jonas-leupe-QQ2d5naZee0-unsplash-scaled.jpg 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>
</div>



<p class="wp-block-paragraph">Wie bereits über andere Beiträge hier in meinem Blog bekannt setze ich bei <a href="https://www.schiffler.eu/thema/fhem/" target="_blank" rel="noreferrer noopener">mir zuhause eine FHEM</a> ein um kleine Dinge zu automatisieren. Hier wurde bereits eine Funktion zur <a href="https://www.schiffler.de/stromverbrauch-ueberwachen-mit-fhem-kein-problem" target="_blank" rel="noreferrer noopener">Überwachung des Stromverbrauches unseres Whirlpools</a> umgesetzt welche die ideale Basis für das hier vorliegende &#8222;Problem&#8220; ist. Stattdessen der Stromverbrauch nun auf einem Dashboard angezeigt wird versenden wir einfach eine Mail sobald der Stromverbrauch für eine gewisse Zeit sinkt. Diese Mail geht an das Smartphone, wird hier per Push angezeigt und benachrichtigt und also sobald die Verbraucher Ihre Arbeit getan haben.</p>



<h2 class="wp-block-heading">technische Voraussetzungen</h2>



<p class="wp-block-paragraph">Wie schon in dem verlinkten Artikel zur Überwachung des Stromverbrauches müssen einige technischen Voraussetzungen geschaffen sein damit das, was hier beschrieben ist, funktioniert. Zum ersten benötigen wir eine lauffähige <a href="https://fhem.de/" target="_blank" rel="noreferrer noopener">FHEM Installation</a>. Bei mir läuft diese auf einem <a href="https://amzn.to/33PSJv4" target="_blank" rel="noreferrer noopener">Raspberry PI</a>*. Damit die FHEM nun mit den Homematic Komponenten kommunizieren kann setze ich selbst auf das <a href="https://amzn.to/33Pb4Zz" target="_blank" rel="noreferrer noopener">HM-MOD-RPI-PCB HomeMatic Funkmodul</a>* welches einfach auf den PI aufgesteckt wird (<a href="https://wiki.fhem.de/wiki/HM-MOD-RPI-PCB_HomeMatic_Funkmodul_f%C3%BCr_Raspberry_Pi" target="_blank" rel="noreferrer noopener">Konfigurationsanleitung siehe Wiki)</a>. Zu eigentlichen Steuerung und Überwachung der zu messenden Geräte setze ich auf eine <a href="https://amzn.to/33KK3Xc" target="_blank" rel="noreferrer noopener">schaltbare Steckdose mit Leistungsmessung von Homematic</a>*.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><a href="https://amzn.to/4jqeHJy" target="_blank" style="text-decoration: none; color: inherit;">
    <div class="container">
        <div class="row">
            <div class="col-12 d-flex justify-content-center align-items-center">
                <img decoding="async" src="https://m.media-amazon.com/images/I/71A14Sz2bWL._AC_SX679_.jpg" alt="Raspberry Pi 4 Modell B" class="img-fluid" style="max-height: 200px; width: auto; margin: 0 auto; display: block;">
            </div>
        </div>
        <div class="row">
            <div class="col-12 text-center">
                <center><button class="btn btn-primary btn-sm">Jetzt auf Amazon ansehen *</button></center>
            </div>
        </div>
    </div>
</a>

</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><a href="https://amzn.to/4g9qRng" target="_blank" style="text-decoration: none; color: inherit;">
    <div class="container">
        <div class="row">
            <div class="col-12 d-flex justify-content-center align-items-center">
                <img decoding="async" src="https://m.media-amazon.com/images/I/61POvl9K8-L._AC_SX679_.jpg" alt="Funkmodul für Raspberry Pi HM-MOD-RPI-PCB" class="img-fluid" style="max-height: 200px; width: auto; margin: 0 auto; display: block;">
            </div>
        </div>
        <div class="row">
            <div class="col-12 text-center">
                <center><button class="btn btn-primary btn-sm">Jetzt auf Amazon ansehen *</button></center>
            </div>
        </div>
    </div>
</a>

</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><a href="https://amzn.to/3E1YgTz" target="_blank" style="text-decoration: none; color: inherit;">
    <div class="container">
        <div class="row">
            <div class="col-12 d-flex justify-content-center align-items-center">
                <img decoding="async" src="https://m.media-amazon.com/images/I/61lzoB+tG3L._AC_SX679_.jpg" alt="Homematic IP Smart Home Schalt-Mess-Steckdose" class="img-fluid" style="max-height: 200px; width: auto; margin: 0 auto; display: block;">
            </div>
        </div>
        <div class="row">
            <div class="col-12 text-center">
                <center><button class="btn btn-primary btn-sm">Jetzt auf Amazon ansehen *</button></center>
            </div>
        </div>
    </div>
</a>

</div>
</div>



<h2 class="wp-block-heading">Konfiguration in FHEM vornehmen</h2>



<pre class="wp-block-code"><code>rename &lt;DEVICE_ID&gt;.channel_02 Strom.Waschmaschine.Pwr
define Strom.Waschmaschine.State dummy
define WaschmaschineHoherVerbrauchAn notify Strom.Waschmaschine.Pwr:power:.* PLATZHALTER
define WaschmaschineAutoStandby watchdog Strom.Waschmaschine.State:off 00:05 Strom.Waschmaschine.State:on PLATZHALTER</code></pre>



<p class="wp-block-paragraph">Im ersten Schritt benennen wir wieder den &#8222;channel_02&#8220; der HomeMatic Steckdose, an welche die Waschmaschine angeschlossen ist in einen für uns sprechenden Namen um. In meinem Fall habe ich den Namen &#8218;Strom.Waschmaschine.Pwr&#8216; gewählt. </p>



<p class="wp-block-paragraph">Nun legen wir uns einen Dummy an welcher den aktuellen Status der Waschmaschine abbildet. Dazu kommt ein <a href="https://wiki.fhem.de/wiki/Notify" target="_blank" rel="noreferrer noopener">Notify-Event</a> welches den angelegten Status-Dummy in Abhängigkeit zum Stromverbrauch setzt. Ein zusätzlicher <a href="https://wiki.fhem.de/wiki/Watchdog" target="_blank" rel="noreferrer noopener">Watchdog </a>erweitert das gesamte Bild und versendet die Mails, sofern notwendig.</p>



<h2 class="wp-block-heading">Notify-Event &#8211; Auf Spannungsänderung reagieren</h2>



<p class="wp-block-paragraph">Über den <a href="https://wiki.fhem.de/wiki/Notify" target="_blank" rel="noreferrer noopener">Notify </a>WaschmaschineHoherVerbrauchAn reagieren wir auf Änderungen im Stromverbrauch der Steckdose. Anbei die Definition des Notify-Events:</p>



<pre class="wp-block-code"><code>Strom.Waschmaschine.Pwr:power:.* {
  if (ReadingsNum("Strom.Waschmaschine.Pwr", "power", 0) &gt; 15 &amp;&amp; Value("Strom.Waschmaschine.State") eq "off") {
    fhem("set Strom.Waschmaschine.State on");
    fhem("setstate WaschmaschineAutoStandby defined");
  }
  if (ReadingsNum("Strom.Waschmaschine.Pwr", "power", 0) &lt; 15 &amp;&amp; Value("Strom.Waschmaschine.State") eq "on") {
    fhem("set Strom.Waschmaschine.State off");
  }
}</code></pre>



<p class="wp-block-paragraph">Das Event selbst wird getriggert sobald der Stromverbrauch der Steckdose sich ändert. Liegt der aktuelle Stromverbrauch über 15 Watt und der Status der Waschmaschine ist aus so wird der Status geändert. </p>



<h2 class="wp-block-heading">Watchdog um Benachrichtigung auszulösen</h2>



<p class="wp-block-paragraph">Über den <a href="https://wiki.fhem.de/wiki/Watchdog" target="_blank" rel="noreferrer noopener">Watchdog</a> WaschmaschineAutoStandby reagieren wir sobald der Status der Waschmaschine auf &#8222;off&#8220; gesetzt wird, versenden die Mail und schalten die Steckdose selbst aus. Hier die Definition:</p>



<pre class="wp-block-code"><code>	
Strom.Waschmaschine.State:off 00:05 Strom.Waschmaschine.State:on {
  DebianMail('&lt;empfänger&gt;',"Waschmaschine / Trockner fertig","Die Waschmaschine oder der Trockner sind fertig - der Strom wurde ausgeschaltet");;
  fhem("set Strom.Waschmaschine off");
}</code></pre>



<p class="wp-block-paragraph">Der Watchdog selbst reagiert sofern der Dummy &#8222;Strom.Waschmaschine.State&#8220; auf &#8222;off&#8220; gesetzt wurde und 5 Minuten in diesem Status verblieben ist. Sobald der Status 5 Minuten auf &#8222;off&#8220; war wird eine Mail an den definierten Empfänger gesendet und die Steckdose ausgeschaltet. </p>



<h2 class="wp-block-heading">Waschmaschine Statusmail &#8211; Erfahrungen nach 2 Jahren</h2>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="663" src="https://www.schiffler.eu/wp-content/uploads/2020/08/smart-home-3395994_1920-1024x663.jpg" alt="Smart Home Steuerung" class="wp-image-994" srcset="https://www.schiffler.eu/wp-content/uploads/2020/08/smart-home-3395994_1920-1024x663.jpg 1024w, https://www.schiffler.eu/wp-content/uploads/2020/08/smart-home-3395994_1920-300x194.jpg 300w, https://www.schiffler.eu/wp-content/uploads/2020/08/smart-home-3395994_1920-768x498.jpg 768w, https://www.schiffler.eu/wp-content/uploads/2020/08/smart-home-3395994_1920-1536x995.jpg 1536w, https://www.schiffler.eu/wp-content/uploads/2020/08/smart-home-3395994_1920.jpg 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Wir haben die Lösung nun bereits seit ca. 2 Jahren bei uns im Einsatz. Anfangs gab es diverse Komplikationen so dass z.B. die Mails hundertfach versendet oder die Steckdose noch im laufenden Betrieb ausgeschaltet wurde. Die Scripte welche hier genannt sind laufen nun wunderbar rund und sind, aus meiner Sicht, fehlerfrei. </p>
</div>
</div>



<p class="wp-block-paragraph">Ein wenig &#8222;kompliziert&#8220; war der Punkt des &#8222;Notify-Events&#8220; und der Grenze ab welcher die Waschmaschine &#8222;aus&#8220; ist oder eben nicht. Diese senkt während dem Betrieb den Verbrauch hin und wieder stark nach unten. In unserem Fall liegt der minimale Verbrauch hier immer &gt; 15 Watt (dies kann aber von Maschine zu Maschine unterschiedlich sein). Vermutlich wäre die Wartezeit der 5 Minuten im Watchdog heute nicht mehr notwendig, diese tut aber auch nicht weh <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/waschmaschine-statusmail-fhem-homematic/">Waschmaschine Statusmail selbstgebaut</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/waschmaschine-statusmail-fhem-homematic/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Stromverbrauch überwachen &#8211; mit FHEM kein Problem</title>
		<link>https://www.schiffler.eu/stromverbrauch-ueberwachen-mit-fhem-kein-problem/</link>
					<comments>https://www.schiffler.eu/stromverbrauch-ueberwachen-mit-fhem-kein-problem/#comments</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Sat, 22 Aug 2020 08:05:00 +0000</pubDate>
				<category><![CDATA[IT-Know How]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Codeschnipsel]]></category>
		<category><![CDATA[FHEM]]></category>
		<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[werbung]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=798</guid>

					<description><![CDATA[<p>Bei der Renovierungsplanung unseres Hauses war schnell klar dass hier einige Dinge automatisiert werden &#8222;müssen&#8220;. Dinge wie eine automatische Rolladensteuerung &#8230; <a href="https://www.schiffler.eu/stromverbrauch-ueberwachen-mit-fhem-kein-problem/" class="more-link">More <span class="screen-reader-text">Stromverbrauch überwachen &#8211; mit FHEM kein Problem</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/stromverbrauch-ueberwachen-mit-fhem-kein-problem/">Stromverbrauch überwachen &#8211; mit FHEM kein Problem</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Bei der Renovierungsplanung unseres Hauses war schnell klar dass hier einige Dinge automatisiert werden &#8222;müssen&#8220;. Dinge wie eine automatische Rolladensteuerung oder die Steuerung der Dachfenster bei Regen sind wohl selbstverständlich. Dazu kam nun aber die Frage ob es nicht auch möglich sei den <strong>Stromverbrauch überwachen</strong> zu können. Hintergrund ist hier im Kern der angeschaffte <a href="https://www.schiffler.eu/thema/whirlpool/" target="_blank" rel="noreferrer noopener">Whirlpool</a> und die Frage wie viel Energie dieser wohl so verbraucht. Glücklicherweise war dies mit der eingesetzten FHEM ein Kinderspiel. Dieser Artikel soll die dafür eingesetzten Scripte sammeln.</p>



<h2 class="wp-block-heading">technische Voraussetzungen</h2>



<p class="wp-block-paragraph">Damit das, was ich hier nun beschreibe, funktioniert, müssen einige technische Voraussetzungen erfüllt sein. Zum ersten benötigen wir eine lauffähige <a href="https://fhem.de/" target="_blank" rel="noreferrer noopener">FHEM Installation</a>. Bei mir läuft diese auf einem <a href="https://amzn.to/33PSJv4" target="_blank" rel="noreferrer noopener">Raspberry PI</a>*. Damit die FHEM nun mit den Homematic Komponenten kommunizieren kann setze ich selbst auf das <a href="https://amzn.to/33Pb4Zz" target="_blank" rel="noreferrer noopener">HM-MOD-RPI-PCB HomeMatic Funkmodul</a>* welches einfach auf den PI aufgesteckt wird (<a href="https://wiki.fhem.de/wiki/HM-MOD-RPI-PCB_HomeMatic_Funkmodul_f%C3%BCr_Raspberry_Pi" target="_blank" rel="noreferrer noopener">Konfigurationsanleitung siehe Wiki)</a>. Zu eigentlichen Steuerung und Überwachung der zu messenden Geräte setze ich auf eine <a href="https://amzn.to/33KK3Xc" target="_blank" rel="noreferrer noopener">schaltbare Steckdose mit Leistungsmessung von Homematic</a>*. </p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><a href="https://amzn.to/4jqeHJy" target="_blank" style="text-decoration: none; color: inherit;">
    <div class="container">
        <div class="row">
            <div class="col-12 d-flex justify-content-center align-items-center">
                <img decoding="async" src="https://m.media-amazon.com/images/I/71A14Sz2bWL._AC_SX679_.jpg" alt="Raspberry Pi 4 Modell B" class="img-fluid" style="max-height: 200px; width: auto; margin: 0 auto; display: block;">
            </div>
        </div>
        <div class="row">
            <div class="col-12 text-center">
                <center><button class="btn btn-primary btn-sm">Jetzt auf Amazon ansehen *</button></center>
            </div>
        </div>
    </div>
</a>

</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><a href="https://amzn.to/4g9qRng" target="_blank" style="text-decoration: none; color: inherit;">
    <div class="container">
        <div class="row">
            <div class="col-12 d-flex justify-content-center align-items-center">
                <img decoding="async" src="https://m.media-amazon.com/images/I/61POvl9K8-L._AC_SX679_.jpg" alt="Funkmodul für Raspberry Pi HM-MOD-RPI-PCB" class="img-fluid" style="max-height: 200px; width: auto; margin: 0 auto; display: block;">
            </div>
        </div>
        <div class="row">
            <div class="col-12 text-center">
                <center><button class="btn btn-primary btn-sm">Jetzt auf Amazon ansehen *</button></center>
            </div>
        </div>
    </div>
</a>

</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><a href="https://amzn.to/3E1YgTz" target="_blank" style="text-decoration: none; color: inherit;">
    <div class="container">
        <div class="row">
            <div class="col-12 d-flex justify-content-center align-items-center">
                <img decoding="async" src="https://m.media-amazon.com/images/I/61lzoB+tG3L._AC_SX679_.jpg" alt="Homematic IP Smart Home Schalt-Mess-Steckdose" class="img-fluid" style="max-height: 200px; width: auto; margin: 0 auto; display: block;">
            </div>
        </div>
        <div class="row">
            <div class="col-12 text-center">
                <center><button class="btn btn-primary btn-sm">Jetzt auf Amazon ansehen *</button></center>
            </div>
        </div>
    </div>
</a>

</div>
</div>



<p class="wp-block-paragraph">Wie man nun eine FHEM installiert beschreibe ich hier nicht, dazu gibt es eine echt gute <a href="https://wiki.fhem.de/wiki/Raspberry_Pi" target="_blank" rel="noreferrer noopener">Anleitung im FHEM-Wiki</a>. Sobald die Installation läuft, das HomeMatic Funkmodul eingerichtet und die Steckdose angelernt ist, kann es auch schon losgehen. </p>



<h2 class="wp-block-heading">Stromverbrauch überwachen &#8211; Einrichtung der Channels</h2>



<p class="wp-block-paragraph">Die HomeMatic Funksteckdose verfügt insgesamt über 6 Channels welche alle unterschiedliche Informationen ausliefern. Der &#8222;channel_02&#8220; ist, für die von uns geplante Überwachtung des Stromverbrauches, der Channel der Wahl. Ich habe diesen in meinem Fall erstmal umbenannt und diesem einen für mich sprechenden Namen gegeben:</p>



<pre class="wp-block-code"><code>rename &lt;DEVICE_ID&gt;.channel_02 &lt;Zielname&gt;
-&gt; rename &lt;DEVICE_ID&gt;.channel_02 strom.whirlpool.pwr</code></pre>



<p class="wp-block-paragraph">Als nächstes schauen wir uns einmal die Readings von unserem neuen Device an und sehen, dass alle gewünschten Parameter direkt ersichtlich sind:</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://www.schiffler.eu/wp-content/uploads/2020/08/fhem_stromverbrauch_whirlpool_1.png"><img loading="lazy" decoding="async" width="650" height="313" src="https://www.schiffler.eu/wp-content/uploads/2020/08/fhem_stromverbrauch_whirlpool_1.png" alt="FHEM Stromverbrauch überwachen - Readings" class="wp-image-971" style="width:325px;height:157px" srcset="https://www.schiffler.eu/wp-content/uploads/2020/08/fhem_stromverbrauch_whirlpool_1.png 650w, https://www.schiffler.eu/wp-content/uploads/2020/08/fhem_stromverbrauch_whirlpool_1-300x144.png 300w" sizes="auto, (max-width: 650px) 100vw, 650px" /></a></figure>
</div>


<p class="wp-block-paragraph">In meinem Fall liegt der aktuelle Stromverbrauch bei 5,19 Watt. Die Anzeige verändert sich, sobald das Gerät an der Steckdose seinen Verbrauch ändert. Schaltet sich nun als eine Pumpe oder die Heizung des Whirlpools ein, so schnellt der Stromverbrauch hoch und wir können erkennen was hier passiert. </p>



<h2 class="wp-block-heading">Stromverbrauch protokollieren &#8211; Umleiten in Logfile</h2>



<p class="wp-block-paragraph">Damit wir den Verbrauch nun auswerten können benötigen wir ein Protokoll. Auch dies ist mit FHEM ein absolutes Kinderspiel, wir legen einfach ein neues Logfile an und lassen die gewünschten Werte dort rein protokollieren. Auch hier gibt die <a href="https://wiki.fhem.de/wiki/FileLog" target="_blank" rel="noreferrer noopener">Commandref von Wik</a>i wieder Hilfestellung. Der von mir genutzte Befehl hierzu lautete wie folgt:</p>



<pre class="wp-block-code"><code>define FileLog_Strom.Whirlpool.Verbrauch FileLog ./log/Strom.Whirlpool.Verbrauch-%Y-%m.log strom.whirlpool.pwr:eState:.*</code></pre>



<p class="wp-block-paragraph">Der Befehl erzeugt ein neues Logfile mit dem Namen &#8218;Strom.Whirlpool.Verbrauch-%Y-%m.log&#8216; wobei das %Y durch das aktuelle Jahr und das %m durch das aktuelle Monat ersetzt wird. Sobald sich nun der Stromverbrauch an der Funksteckdose ändert wird ein Eintrag in die neu angelegte Logdatei geschrieben. Das Ergebnis sieht nun ungefähr so aus:</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://www.schiffler.eu/wp-content/uploads/2020/08/fhem_stromverbrauch_whirlpool_2.png"><img loading="lazy" decoding="async" width="822" height="118" src="https://www.schiffler.eu/wp-content/uploads/2020/08/fhem_stromverbrauch_whirlpool_2.png" alt="FHEM Stromverbrauch überwachen - Logfile" class="wp-image-974" style="width:411px;height:59px" srcset="https://www.schiffler.eu/wp-content/uploads/2020/08/fhem_stromverbrauch_whirlpool_2.png 822w, https://www.schiffler.eu/wp-content/uploads/2020/08/fhem_stromverbrauch_whirlpool_2-300x43.png 300w, https://www.schiffler.eu/wp-content/uploads/2020/08/fhem_stromverbrauch_whirlpool_2-768x110.png 768w" sizes="auto, (max-width: 822px) 100vw, 822px" /></a></figure>
</div>


<h2 class="wp-block-heading">Verbrauchskosten in Übersicht darstellen</h2>



<p class="wp-block-paragraph">Das nun angelegte Protokoll ist schonmal eine schöne Sache doch so richtig bringt uns das natürlich nicht weiter. Ich selbst wollte gerne auf einen Blick sehen wie hoch mein Stromverbrauch heute und im aktuellen Monat bisher so war. </p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://www.schiffler.eu/wp-content/uploads/2020/08/fhem_stromverbrauch_whirlpool_3.png"><img loading="lazy" decoding="async" width="569" height="53" src="https://www.schiffler.eu/wp-content/uploads/2020/08/fhem_stromverbrauch_whirlpool_3.png" alt="FHEM Stromverbrauch überwachen - Verbrauchswerte anzeigen" class="wp-image-976" style="width:285px;height:27px" srcset="https://www.schiffler.eu/wp-content/uploads/2020/08/fhem_stromverbrauch_whirlpool_3.png 569w, https://www.schiffler.eu/wp-content/uploads/2020/08/fhem_stromverbrauch_whirlpool_3-300x28.png 300w" sizes="auto, (max-width: 569px) 100vw, 569px" /></a></figure>
</div>


<p class="wp-block-paragraph">Der Aufbau dieser Anzeige war nicht ganz so trivial und benötigte neben 2 Dummys zur Anzeige auch noch einen <a href="https://wiki.fhem.de/wiki/At" target="_blank" rel="noreferrer noopener">AT-Trigger</a> welche jede Minute in das Logfile schaut und den aktuellen Wert berechnet. </p>



<p class="wp-block-paragraph">Legen wir uns zuerst einmal die benötigten Dummys und den leeren AT-Trigger an.</p>



<pre class="wp-block-code"><code>define WhirlpoolStromkostenTag dummy
define WhirlpoolStromkostenMonat dummy
define atWhirlpoolStromkosten at +*00:01:00 test</code></pre>



<p class="wp-block-paragraph">Nun ist noch nicht viel passiert. Wir haben 2 leere Dummys für die Stromkosten des Tages und des Monates und einen AT welcher jede Minute läuft und das Command &#8222;test&#8220; ausführt. </p>



<p class="wp-block-paragraph">Das Command ist natürlich noch absoluter Quatsch und muss &#8222;leicht&#8220; angepasst werden. Wir öffnen selbiges, klicken auf &#8222;DEF&#8220; und tragen hier folgendes Command ein:</p>



<pre class="wp-block-code"><code>+*00:01:00 {
my $oldVerbrauchVortag = (ReadingsVal("WhirlpoolStromkostenTag","VerbrauchVortag",0)); 
my $neuerVerbrauch = (ReadingsVal("strom.whirlpool.pwr","energy",0)); 
my $a = ($neuerVerbrauch / 1000) - $oldVerbrauchVortag;
fhem("setreading WhirlpoolStromkostenTag Verbrauch $a");
fhem("setreading WhirlpoolStromkostenMonat Tagesverbrauch $a");
if(($hour==0) &amp;&amp; ($min==0)){ 
  my $neuerVortagesverbrauch = $oldVerbrauchVortag + $a; 
  fhem("setreading WhirlpoolStromkostenTag VerbrauchVortag $neuerVortagesverbrauch ");
  fhem("setreading WhirlpoolStromkostenTag Verbrauch 0")
} 
if(($hour==0) &amp;&amp; ($min==0) &amp;&amp; ($mday==1)){
  fhem("setreading WhirlpoolStromkostenMonat Verbrauch 0")
}
}</code></pre>



<h3 class="wp-block-heading">Stromverbrauch überwachen &#8211; was tut das Script?</h3>



<p class="wp-block-paragraph">Im Grunde genommen ist das Script recht einfach. Der Dummy für den Tagesverbrauch bekommt ein zusätzliches Reading für den Verbrauch des Vortages sowie den aktuellen Verbrauch. Wir lesen zuerst den Vortagesverbrauch und anschliessend den aktuellen Verbrauch aus und berechnen nun den aktuellen Verbrauch welchen wir sowohl in das Tages als auch das Monatsreading setzen. </p>



<p class="wp-block-paragraph">Ist es gerade 0 Uhr so setzen wir den Vortagesverbrauch auf 0, gleiches tun wir beim Monatsreading am Start eines neuen Monates. </p>



<h2 class="wp-block-heading">Stromverbrauch in lesbarer Form anzeigen</h2>



<p class="wp-block-paragraph">Somit verfügen die einzelnen Dummys nun also über den aktuellen Stromverbrauch (je Einheit) in KW. Was nun noch fehlt ist die Anzeige und die &#8222;Übersetzung&#8220; in die realen Kosten. Dies kann über die Attribute der jeweiligen Dummys angepasst werden.</p>



<pre class="wp-block-code"><code>attr WhirlpoolStromkostenTag stateFormat {sprintf("%.2f kWh - %.2f €",ReadingsVal("WhirlpoolStromkostenTag", "Verbrauch",0), ReadingsVal("WhirlpoolStromkostenTag","Kosten",0))}
attr WhirlpoolStromkostenTag userReadings Kosten {ReadingsVal("WhirlpoolStromkostenTag","Verbrauch",0)*0.2507}

attr WhirlpoolStromkostenMonat stateFormat {sprintf("%.2f kWh - %.2f €",ReadingsVal("WhirlpoolStromkostenMonat", "Verbrauch",0), ReadingsVal("WhirlpoolStromkostenMonat","Kosten",0))}
attr WhirlpoolStromkostenMonat userReadings Verbrauch monotonic {ReadingsVal("WhirlpoolStromkostenMonat","Tagesverbrauch",0)},Kosten {ReadingsVal("WhirlpoolStromkostenMonat","Verbrauch",0)*0.2507}</code></pre>



<p class="wp-block-paragraph">Das Ergebnis ist in diesem Post bereits einmal vorweg genommen worden. Wir erhalten eine Anzeige des aktuellen Tagesverbrauches sowie des Verbrauches im aktuellen Monat. Hierbei gehen wir davon aus dass die KWh bei 0.2507 EUR liegt.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="569" height="53" src="https://www.schiffler.eu/wp-content/uploads/2020/08/fhem_stromverbrauch_whirlpool_3.png" alt="FHEM Stromverbrauch überwachen - Verbrauchswerte anzeigen" class="wp-image-976" srcset="https://www.schiffler.eu/wp-content/uploads/2020/08/fhem_stromverbrauch_whirlpool_3.png 569w, https://www.schiffler.eu/wp-content/uploads/2020/08/fhem_stromverbrauch_whirlpool_3-300x28.png 300w" sizes="auto, (max-width: 569px) 100vw, 569px" /></figure>
</div>


<p class="wp-block-paragraph">Natürlich ist es ohne weiteres Möglich diese Auswertung auch noch auf Monats- oder Jahresbasis durchzuführen oder die Verbräuche in einem Diagram anzuzeigen. Hier sind den eigenen Wünschen und Ideen fast keine Grenzen gesetzt. </p>
<p>Der Beitrag <a href="https://www.schiffler.eu/stromverbrauch-ueberwachen-mit-fhem-kein-problem/">Stromverbrauch überwachen &#8211; mit FHEM kein Problem</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/stromverbrauch-ueberwachen-mit-fhem-kein-problem/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>E-Mail PDF-Anhang speichern &#8211; Python-Script für ecoDMS Übergabe</title>
		<link>https://www.schiffler.eu/e-mail-pdf-anhang-speichern-python-script/</link>
					<comments>https://www.schiffler.eu/e-mail-pdf-anhang-speichern-python-script/#comments</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Sat, 08 Aug 2020 10:16:00 +0000</pubDate>
				<category><![CDATA[IT-Know How]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Codeschnipsel]]></category>
		<category><![CDATA[cronjob]]></category>
		<category><![CDATA[Datensicherung]]></category>
		<category><![CDATA[E-Mail]]></category>
		<category><![CDATA[ecoDMS]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=517</guid>

					<description><![CDATA[<p>Nachdem ich zuhause das DMS-System aufgesetzt und meine ganzen Dokumente digitalisiert habe stand das Thema der PDF-Dokumente welche per Mail &#8230; <a href="https://www.schiffler.eu/e-mail-pdf-anhang-speichern-python-script/" class="more-link">More <span class="screen-reader-text">E-Mail PDF-Anhang speichern &#8211; Python-Script für ecoDMS Übergabe</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/e-mail-pdf-anhang-speichern-python-script/">E-Mail PDF-Anhang speichern &#8211; Python-Script für ecoDMS Übergabe</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Nachdem ich zuhause das DMS-System aufgesetzt und meine ganzen Dokumente digitalisiert habe stand das Thema der PDF-Dokumente welche per Mail reinkommen auf dem Plan. Ein Script welches mir E-Mail PDF-Anhang speichern kann musst her. </p>



<h2 class="wp-block-heading">Archivierung von Rechnungen aus E-Mails</h2>



<p class="wp-block-paragraph">Egal wo man heute etwas bestellt, meist kommen die Rechnungen in elektronischer Form. Doch wie kann ich diese Rechnungen nun am Einfachsten in meinem DMS-System archivieren? Eigentlich ging ich davon aus dass ein System wie z.B. ecoDMS ein solches E-Mail Gateway automatisiert mitliefert, leider war dies jedoch nicht der Fall. </p>



<p class="wp-block-paragraph">Somit musste eine eigene Lösung her. Kein Problem, ein kleines Script sollte das Problem schnell Lösen. Die Grundidee: Ich erzeuge mir ein Mailpostfach an welches ich alle E-Mails, deren PDF-Anhänge archiviert werden sollen weiterleite. Dieses Postfach wird von einem Cronjob abgeholt, die PDF-Anhänge aus den Mails heruntergeladen und in den Übergabeordner von ecoDMS gelegt. </p>



<p class="wp-block-paragraph">Nach einigen Versuchen ist das folgende Python-Script entstanden welches bei mir nun schon seit <a href="https://www.schiffler.eu/tag/papierloses-buero/">über 2 Jahren produktiv</a> im Einsatz ist und stabil seinen Dienst verrichtet.</p>



<h2 class="wp-block-heading">E-Mail PDF-Anhang speichern &#8211; Python-Script</h2>



<pre class="wp-block-code"><code>#!/usr/bin/env python
"""
importDmsMails.py

Check emails at :const:`PROVIDER` for attachments and save them to
:const:`SAVEDIR`.
"""
from __future__ import absolute_import, division, print_function
import email
import os
import poplib

PROVIDER = 'XXXX'
USER = 'XXXX'
PASSWORD = 'XXXX'

SAVE_DIR = '/opt/ecodms/workdir/scaninput/'

def getNotExistingFileName(saveDir, srcFileName):
    counter = 1
    if (srcFileName.endswith("pdf?=")):
        srcFileName = "scanbymail.pdf"
    while (True):
        currentName = srcFileName
        if (counter &gt; 1):
            currentName = str(counter) + "_" + srcFileName
        if (os.path.isfile(saveDir + currentName)):
            counter = counter + 1
        else:
            return currentName

def save_attachments(mail_string):
    attachments = list()
    for part in email.message_from_string(mail_string).walk():
        name = part.get_filename()
        if name:
            print('Handle Attachment {0!r}.'.format(name))
            if name.lower().endswith(("pdf", "pdf?=")):
                data = part.get_payload(decode=True)
                name = name.replace("/", "_")
                targetFileName = getNotExistingFileName(SAVE_DIR, name)
                f = file(os.path.join(SAVE_DIR, targetFileName), 'wb')
                f.write(data)
                f.close()
                print('Found and saved attachment {0!r}.'.format(targetFileName))

def main():
    try:
        client = poplib.POP3_SSL(PROVIDER)
        client.user(USER)
        client.pass_(PASSWORD)
        message_numbers = (int(s.split()&#91;0]) for s in client.list()&#91;1])
        for message_number in message_numbers:
            save_attachments('\n'.join(client.retr(message_number)&#91;1]))
            client.dele(message_number)
    finally:
        client.quit()


if __name__ == '__main__':
    main()</code></pre>



<h2 class="wp-block-heading">Was genau tut das Script?</h2>



<p class="wp-block-paragraph">Das hier aufgeführte Python-Script wird bei mir regelmäßig durch einen Cronjob ausgeführt. Das Script verbindet sich zu meinem Mailserver und lädt sich alle Mails herunter. Hängt an einer Mail ein PDF-Anhang so wird dieser Anhang im Eingangsverzeichnis von ecoDMS gesichert. Bei der Speicherung der Datei prüft das Script ob hier bereits eine Datei mit gleichem Namen vorliegt. Ist dies der Fall so wird der Dateiname durch einen Zähler erweitert so dass keine bereits existierende Datei überschrieben wird. </p>



<p class="wp-block-paragraph">Wer möchte kann das Script natürlich gerne verwenden und auf seine Bedürfnisse anpassen. Natürlich übernehme ich keine Garantie für die Funktion des Scriptes, die Verwendung erfolgt auf eigene Gefahr <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h2 class="wp-block-heading">Update &#8211; 11. Juni 2021</h2>



<p class="wp-block-paragraph">Ich habe gestern eine Mail erhalten welche mich auf ein Problem hinwies. Thomas erhielt beim Ausführen des Scriptes den folgenden Fehler:</p>



<pre class="wp-block-code"><code>python3 importDmsMails.py
Traceback (most recent call last):

  File "importDmsMails.py", line 61, in &lt;module&gt;

    main()

  File "importDmsMails.py", line 54, in main

    save_attachments('\n'.join(client.retr(message_number)&#91;1]))

TypeError: sequence item 0: expected str instance, bytes found</code></pre>



<p class="wp-block-paragraph">Bei der Analyse der Meldung stellte sich heraus, dass ich eine andere Python-Version als Thomas verwende. Bei mir läuft Python in der Version 2.7.10, bei ihm auf Python 3. </p>



<p class="wp-block-paragraph">Ich habe für dieses Problem eine neue Version des Scriptes bereit gestellt. Mehr dazu findet Ihr hier:<br><a href="https://www.schiffler.eu/e-mail-anhaenge-nach-ecodms-importieren-mit-python-3/" target="_blank" rel="noreferrer noopener">E-Mail Anhänge nach ecoDMS importieren – mit Python 3</a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/e-mail-pdf-anhang-speichern-python-script/">E-Mail PDF-Anhang speichern &#8211; Python-Script für ecoDMS Übergabe</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/e-mail-pdf-anhang-speichern-python-script/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Object Caching 52/61 objects using APC
Page Caching using Disk: Enhanced 
Lazy Loading (feed)
Minified using APC
Database Caching 20/37 queries in 0.002 seconds using APC

Served from: www.schiffler.eu @ 2026-07-30 23:03:47 by W3 Total Cache
-->