<?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>Tips &amp; Tricks Archive - dahlen.org</title>
	<atom:link href="https://www.dahlen.org/tag/tips-tricks/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.dahlen.org/tag/tips-tricks/</link>
	<description>Private Webseite der Familie Dahlen</description>
	<lastBuildDate>Wed, 24 Jan 2024 10:01:04 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>
	<item>
		<title>ESP8266 via esphomelib mit Home Assistant verbinden</title>
		<link>https://www.dahlen.org/2018/08/22/esp8266-via-esphomelib-mit-home-assistant-verbinden/</link>
		
		<dc:creator><![CDATA[christoph]]></dc:creator>
		<pubDate>Wed, 22 Aug 2018 20:16:57 +0000</pubDate>
				<category><![CDATA[Heimautomatisierung]]></category>
		<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Internet of Things]]></category>
		<category><![CDATA[Raspberry]]></category>
		<category><![CDATA[Smart Home]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<guid isPermaLink="false">https://www.dahlen.org/?p=2690</guid>

					<description><![CDATA[<p>In zwei der vergangenen Posts habe ich beschrieben, wie einfach sich Home Assistant als Steuerzentrale für Heimautomatisierung einrichten lässt und wie man mit einem ESP8266 und der ESPeasy-Firmware ein Relais via WLAN schalten kann. Es liegt nahe einen weiteren Artikel über die Verbindung dieser beiden Elemente zu schreiben, um den ESP direkt aus Home Assistant [&#8230;]</p>
<p>Der Beitrag <a href="https://www.dahlen.org/2018/08/22/esp8266-via-esphomelib-mit-home-assistant-verbinden/">ESP8266 via esphomelib mit Home Assistant verbinden</a> erschien zuerst auf <a href="https://www.dahlen.org">dahlen.org</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>
In zwei der vergangenen Posts habe ich beschrieben, wie einfach sich Home Assistant als Steuerzentrale für Heimautomatisierung einrichten lässt und wie man mit einem ESP8266 und der ESPeasy-Firmware ein Relais via WLAN schalten kann. Es liegt nahe einen weiteren Artikel über die Verbindung dieser beiden Elemente zu schreiben, um den ESP direkt aus Home Assistant anzusprechen &#8211; und dank esphomelib wird es noch einfacher, als erwartet.

</p>



<span id="more-2690"></span>



<p>Laut der <a href="https://www.dahlen.org/2018/08/22/esp8266-via-esphomelib-mit-home-assistant-verbinden/#esphomelibgithub">Projektbeschreibung</a> auf Github handelt es sich bei <a href="https://www.dahlen.org/2018/08/22/esp8266-via-esphomelib-mit-home-assistant-verbinden/#esphomelib">esphomelib</a> von Otto Winter um &#8222;a framework for using your ESP8266/ESP32 devices with Home Assistant&#8220;. Und tatsächlich ist esphomelib mehr als eine weitere Firmware für ESP8266/ESP32 <abbr title="Microcontroller Unit">MCUs</abbr>: Neben entsprechenden Bibliotheken werden auch Werkzeuge geliefert, welche das Erstellen und Einspielen angepasster Firmware zum Kinderspiel machen. Vor allem aber ist esphomelib auf die einfache Verbindung mit Home Assistant ausgerichtet und nutzt hierfür das MQTT-Discovery Feature von <abbr title="Home Assistant">HA</abbr></p>



<h2 class="wp-block-heading">Home Assistant MQTT Discovery</h2>



<p>Bei MQTT-Discovery wird die MQTT-Anbindung von Home Assistant aktiviert und es wird auf eingehende (Konfigurations-) Nachrichten auf vorgegebenen Kanälen (<em>Topics</em>) gelauscht. Die so gewonnenen Informationen werden von HA genutzt um automatisch neue Geräte (<em>Entity</em>) einzurichten. Details finden sich in der <a href="https://www.home-assistant.io/integrations/mqtt/#mqtt-discovery" target="_blank" rel="noreferrer noopener">Dokumentation</a> von Home Assistant.</p>



<p>Um MQTT-Discovery mithilfe des in HA eingebetteten MQTT Brokers zu aktivieren, ist folgende Ergänzung in der <em>configuration.yaml</em> von Home Assistant vorzunehmen:</p>



<pre class="wp-block-code"><code lang="shell" class="language-shell">mqtt: 
  discovery: true
  username: homeassistant
  password: mypassword
</code></pre>



<p>Sollte ein externer Broker eingesetzt oder weitere Einstellungen vorgenommen werden, ist entsprechend der <a href="https://www.dahlen.org/2018/08/22/esp8266-via-esphomelib-mit-home-assistant-verbinden/#hamqtt">Anleitung</a> zu verfahren. Ein Passwort ist seit Home Assistant 0.76 Pflicht.</p>



<p>Anschließend ist Home Assistant neu zu starten. Wer &#8211; <a href="https://www.dahlen.org/2018/03/home-assistant-mit-docker-auf-raspberry-pi-betreiben/">wie ich</a> &#8211; Home Assistant in einem Docker-Container laufen lässt, muss entweder den Port 1883 durchschleifen (<span class="tt">docker -p 1883:1883 &#8230;</span>) oder das Host-Network verwenden (<span class="tt">docker &#8211;net=host &#8230;</span>). War die Konfiguration korrekt und der Neustart erfolgreich, taucht ein neues Symbol in den Entwickler-Werkzeugen von HA auf ().</p>



<h2 class="wp-block-heading">esphomelib / esphomeyaml</h2>



<p>Um die Installation und Verwendung von esphomelib erheblich zu vereinfachen, stellt Otto Winter ein Werkzeug namens esphomeyaml zur Verfügung. esphomeyaml unterstützt bei der Erzeugung einer esphomelib-Konfiguration auf <abbr title="Yet another meta language">YAML</abbr>-Basis, sowie bei der Erzeugung und Übertragung der der daraus abgeleiteten Firmware. Es wird auch ein Docker-Image angeboten, welches alle Abhängigkeiten für esphomelib enthält.</p>



<h3 class="wp-block-heading">Anlegen einer Konfiguration mit Docker und esphomeyaml</h3>



<p>Der folgende Abschnitt ist im Wesentlichen eine Zusammenfassung der <q><a href="https://www.dahlen.org/2018/08/22/esp8266-via-esphomelib-mit-home-assistant-verbinden/#esphomeyaml"><em>Getting Started with esphomeyaml</em></a></q> Anleitung für die Verwendung mit Docker. Zunächst wird der <q>Wizard</q> von esphomeyaml verwendet, um eine Basis-Konfiguration zu erstellen.</p>



<pre class="wp-block-code"><code lang="shell" class="language-shell">docker run --rm -v "$PWD":/config -it ottowinter/esphomeyaml myfile.yaml wizard</code></pre>



<p>Der Befehl startet einen temporären Docker-Container, in welchem der esphomeyaml-Assistent ausgeführt wird und interaktiv bei der Erstellung einer Konfiguration (Dateiname myfile.yaml) unterstützt. Die (aktuell) 5 Bereiche mit teilweise mehreren Fragen sind ausführlich dokumentiert, daher hier in aller Kürze:</p>



<h4 class="wp-block-heading">Core und Platform</h4>



<dl>
<dt>name</dt>
<dd>Ein symbolischer Name, welcher u.a. in Home Assistant Verwendung findet. Erlaubt sind Buchstaben, Ziffern und der Unterstrich. Empfohlen wird der Raumname, in welchem der MCU zum Einsatz kommt (z.B. wohnzimmer)</dd>
<dt>ESP32/ESP8266</dt>
<dd>Plattform, welcher der MCU zugeordnet wird. Neben ESP8266 werden auch die moderneren ESP32-Module unterstützt. Die Frage dient der Vorauswahl für die möglichen Antworten der nächsten Frage. Für den <a href="https://www.dahlen.org/2018/08/22/esp8266-via-esphomelib-mit-home-assistant-verbinden/#wemos">Wemos D1 Mini</a> ist hier ESP8266 zu wählen.</dd>
<dt>board</dt>
<dd>Hier ist das verwendete Board genauer zu spezifizieren. Eine Liste der unterstützten Boards (und der jeweiligen Kürzel) findet sich bei <a href="https://www.dahlen.org/2018/08/22/esp8266-via-esphomelib-mit-home-assistant-verbinden/#esphomelibcomponents">platform.io</a>. Für den <a href="https://www.dahlen.org/2018/08/22/esp8266-via-esphomelib-mit-home-assistant-verbinden/#wemos">Wemos D1 Mi</a>ni ist hier <em>d1_mini</em> anzugeben.</dd>
</dl>



<h4 class="wp-block-heading">Wifi</h4>



<p>Der nächste Satz an Fragen beschäftigt sich mit dem zu nutzenden WLAN Netzwerk. Es werden nacheinander die Netzwerk-Kennung (SSID), sowie das Passwort (<abbr title="Pre-Shared-Key">PSK</abbr>) abgefragt.</p>



<h4 class="wp-block-heading">MQTT</h4>



<p>Schließlich werden Details zum zu nutzenden MQTT-Broker abgefragt, im Detail</p>



<ul class="wp-block-list">
<li>die IP-Adresse des MQTT-Brokers</li>



<li>ein eventueller Benutzername für den Zugriff</li>



<li>ein Passwort für den Zugriff auf den MQTT-Broker</li>
</ul>



<p>Wird &#8211; wie in diesem Beispiel &#8211; der interne MQTT-Broker von Home Assistant verwendet, entspricht die IP-Adresse der des (Docker-) HA-Hosts, Username und Password sind entsprechend der MQTT-Konfiguration in Home Assistant vorzunehmen.</p>



<h4 class="wp-block-heading">Over-the-Air</h4>



<p>Ein weiteres cooles Feature ist die Möglichkeit zum Over-the-Air-Update (OTA), welches genutzt werden kann, sobald die esphomelib-Firmware erstmalig erfolgreich (via USB) auf die MCU überspielt wurde. Aus Sicherheitsgründen kann hierfür ein Kennwort vergeben werden.</p>



<h3 class="wp-block-heading">Anpassen der Konfiguration</h3>



<p>Als Ergebnis des vorherigen Abschnitts findet sich im aktuellen Verzeichnung nun eine Datei namens <em>myfile.yaml</em>, welche die <q>Basics</q> der Firmware definiert. Nun gilt es die mit dem Board verbundenen Geräte einzutragen und somit via MQTT (und damit über Home Assistant) steuerbar zu machen.</p>



<p>Für das auf dem Wemos D1 verbundene <a href="https://www.dahlen.org/2018/08/22/esp8266-via-esphomelib-mit-home-assistant-verbinden/#wemosrelay">Relais</a> aus dem letzten Post ist folgender Abschnitt in <em>myfile.yaml</em> zu ergänzen:</p>



<pre class="wp-block-code"><code lang="shell" class="language-shell">switch:
  - platform: gpio
    name: "steckdose"
    pin: D1</code></pre>



<p>Damit wird esphomelib konfiguriert, gegenüber Home Assistant einen Schalter (<em>switch</em>) auszuweisen und eingehende Schaltbefehle über den GPIO-Pin D1 des <a href="https://www.dahlen.org/2018/08/22/esp8266-via-esphomelib-mit-home-assistant-verbinden/#wemos">Wemos D1 Mini</a> abzubilden. Sind weitere Geräte (z.B. Sensoren) mit dem ESP8266 verbunden, ist die <em>myfile.yaml</em> entsprechend zu erweitern. Eine Liste der unterstützten Komponenten und entsprechende Konfigurationsbeispiele finden sich in der <a href="https://www.dahlen.org/2018/08/22/esp8266-via-esphomelib-mit-home-assistant-verbinden/#esphomeyaml">esphomeymal-</a>Dokumentation.</p>



<h3 class="wp-block-heading">Firmware erstellen und übertragen</h3>



<p>Ist die Konfiguration vollständig, kommt wieder Docker zum Einsatz, um die Firmware zu erstellen, zu übertragen und auf dem ESP auszuführen. Vorher ist die MCU natürlich mit dem PC via USB zu verbinden. Unter Linux wird dabei ein serielles Device (z.B. /dev/ttyUSB0) angelegt, welches an den Docker-Container durchgeleitet werden muss. Außerdem muss der Container im &#8222;privileged&#8220; Modus laufen, um die Firmware übertragen zu können. Alles nicht weiter schwierig:</p>



<pre class="wp-block-code"><code lang="shell" class="language-shell"> docker run --rm -v "$PWD:/config" -v /dev/ttyUSB0:/dev/ttyUSB0 \
  --privileged -it ottowinter/esphomeyaml myfile.yaml run</code></pre>



<p>Der Prozess läuft weitestgehend automatisch ab. Lediglich der Weg zur Firmware-Übertragung ist zu wählen. Bei erstmaliger Bespielung ist hier der USB-zu-serielle Port zu wählen, sollte esphomelib bereits auf dem MCU sein, kann auch OTA gewählt werden.</p>



<p><code>Found multiple serial port options, please choose one:<br>
  [0] /dev/ttyUSB0 (USB2.0-Serial)<br>
  [1] Over The Air (d1mini_1.local)</code></p>



<p>Nach der Übertragung bleibt die Verbindung zum <a href="https://www.dahlen.org/2018/08/22/esp8266-via-esphomelib-mit-home-assistant-verbinden/#wemos">Wemos D1 Mini</a> offen und das Gerät wird neu gestartet. Boot und andere Meldungen (z.B. die Verbindung zum WLAN und zum MQTT-Broker) werden via Docker-Container ausgegeben, bis dieser beendet wird (mittels Strg-c). Die eigentliche Firmware läuft natürlich auch danach weiter.</p>



<h3 class="wp-block-heading">Nutzung in Home Assistant</h3>



<p>Durch die Verwendung von MQTT-Discovery wird der an den Wemos angeschlossen Switch (das Relais) direkt in Home Assistant angelegt. In der Zustandsansicht () wird es &#8211; gemäß meinem Beispiel als <em>switch.steckdose</em> geführt. Dort besteht auch die Möglichkeit über das -Symbol einen Test-Dialog zu öffnen und sich vom (hoffentlich) erfolgreichen Ergebnis der Operation zu überzeugen.</p>



<figure class="wp-block-gallery has-nested-images columns-2 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image"><a href="https://www.dahlen.org/wp-content/uploads/2018/08/home-assistant-switch-preview-off.png"><img fetchpriority="high" decoding="async" width="363" height="208" data-id="2717" src="https://www.dahlen.org/wp-content/uploads/2018/08/home-assistant-switch-preview-off.png" alt="" class="wp-image-2717" srcset="https://www.dahlen.org/wp-content/uploads/2018/08/home-assistant-switch-preview-off.png 363w, https://www.dahlen.org/wp-content/uploads/2018/08/home-assistant-switch-preview-off-300x172.png 300w" sizes="(max-width: 363px) 100vw, 363px" /></a><figcaption class="wp-element-caption">HA &#8222;switch&#8220; ausgeschaltet</figcaption></figure>



<figure class="wp-block-image"><a href="https://www.dahlen.org/wp-content/uploads/2018/08/home-assistant-switch-preview-on.png"><img decoding="async" width="363" height="208" data-id="2718" src="https://www.dahlen.org/wp-content/uploads/2018/08/home-assistant-switch-preview-on.png" alt="" class="wp-image-2718" srcset="https://www.dahlen.org/wp-content/uploads/2018/08/home-assistant-switch-preview-on.png 363w, https://www.dahlen.org/wp-content/uploads/2018/08/home-assistant-switch-preview-on-300x172.png 300w" sizes="(max-width: 363px) 100vw, 363px" /></a><figcaption class="wp-element-caption">HA &#8222;switch&#8220; angeschaltet</figcaption></figure>
</figure>



<h4 class="wp-block-heading">Latenz</h4>



<p>Das nachfolgende Video demonstriert die geringe Latenz zwischen der Anforderung in Home Assistant und der Umsetzung durch esphomelib. Home Assistant inkl. des eingebetteten MQTT-Brokers laufen dabei auf einem Raspberry Pi 3B. Das Mobiltelefon und der D1 Mini sind im gleichen WLAN, also per Access Point und Gigabit-LAN mit dem Raspberry verbunden. Das sichtbare Kabel geht zu einer USB Power-Bank. Eine Verzögerung zwischen Antippen des User Interfaces und Schalten des Relais (rote LED) ist faktisch nicht feststellbar.</p>


<div style="width: 1280px;" class="wp-video"><!--[if lt IE 9]><script>document.createElement('video');</script><![endif]-->
<video class="wp-video-shortcode" id="video-2690-1" width="1280" height="720" preload="metadata" controls="controls"><source type="video/mp4" src="https://services.dahlen.org/wp-content/uploads/2018/08/esphomelib-mqtt-homeassistant.mp4?_=1" /><a href="https://services.dahlen.org/wp-content/uploads/2018/08/esphomelib-mqtt-homeassistant.mp4">https://services.dahlen.org/wp-content/uploads/2018/08/esphomelib-mqtt-homeassistant.mp4</a></video></div>



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



<p>Die Verwendung von esphomelib bzw. esphomeyaml für ESP-Module in Verbindung mit dem MQTT-Discovery-Feature von Home Assistent ist aktuell die einfachste, mir bekannte Möglichkeit diverse Aktoren oder Sensoren zu kontrollieren und zu steuern. Die vom esphomelib-Projekt bereitgestellten Werkzeuge greifen sehr gut ineinander und erlauben die Konfiguration und Übertragung der Firmware auch ohne Programmier-Kenntnisse.</p>



<p>Für Verwender von <a href="https://www.dahlen.org/2018/08/22/esp8266-via-esphomelib-mit-home-assistant-verbinden/#hassio">HASS.io</a>, der &#8222;Appliance&#8220;-Variante von Home Assistant existiert sogar ein entsprechendes Add-On, um esphomelib/esphomeyaml direkt aus HASS.IO anzusteuern. Sogar eine web-basierte Variante des <em>Wizards</em> wird hier geboten.</p>



<h2 class="wp-block-heading">Weiterführende Informationen</h2>



<h3 class="wp-block-heading">Software und Dokumentation</h3>



<ul class="wp-block-list">
<li><a rel="noopener" href="http://esphomelib.com" target="_blank">esphomelib-Homepage</a></li>



<li> <a rel="noreferrer noopener" href="https://github.com/OttoWinter/esphomelib" target="_blank">esphomelib-Projekt auf Github</a></li>



<li> <a rel="noreferrer noopener" href="https://esphomelib.com/esphomeyaml/guides/getting_started_command_line.html" target="_blank">Getting Started with esphomeyaml</a> </li>



<li> <a rel="noreferrer noopener" href="http://docs.platformio.org/en/latest/platforms/espressif8266.html#boards" target="_blank">durch esphomelib/platform.io unterstützte Komponenten</a> </li>



<li> <a href="https://www.home-assistant.io/integrations/mqtt/#mqtt-discovery" target="_blank" rel="noreferrer noopener">Home-Assistant MQTT Auto-Discovery</a> </li>



<li> <a rel="noreferrer noopener" href="https://www.home-assistant.io/hassio/" target="_blank">HASS.IO</a> </li>
</ul>



<h3 class="wp-block-heading">Produkte<a href="https://www.dahlen.org/impressum#affiliate">*</a></h3>



<p>Die folgenden Produkte wurden im Artikel besprochen bzw. verwendet:</p>



<ul class="wp-block-list">
<li><a id="wemos" href="https://www.aliexpress.com/wholesale?catId=0&amp;initiative_id=SB_20180324011322&amp;SearchText=wemos+D1+mini" target="_blank" rel="noopener">Wemos D1 Mini bei Ali Express</a></li>



<li><a onMouseOut="al_link_out()" onMouseOver="al_gen_multi(442372378, {de : 'A-B01N9RXGHY'}, 'de', 'default');"  rel="nofollow" target="_blank" href="http://www.amazon.de/gp/product/B01N9RXGHY?ie=UTF8&amp;linkCode=xm2&amp;camp=2025&amp;creative=6738&amp;tag=dahlenorg-21&amp;creativeASIN=B01N9RXGHY&amp;SubscriptionId=">Wemos D1 Mini bei Amazon</a></li>



<li><a id="wemosrelay" href="https://www.aliexpress.com/wholesale?catId=0&amp;initiative_id=SB_20180324013754&amp;SearchText=Wemos+Relay+Shield" target="_blank" rel="noopener">Wemos Relay Shield (und Nachbauten) bei Ali Express</a></li>



<li><a onMouseOut="al_link_out()" onMouseOver="al_gen_multi(442661874, {de : 'A-B075MD6N5Y'}, 'de', 'default');"  rel="nofollow" target="_blank" href="http://www.amazon.de/gp/product/B075MD6N5Y?ie=UTF8&amp;linkCode=xm2&amp;camp=2025&amp;creative=6738&amp;tag=dahlenorg-21&amp;creativeASIN=B075MD6N5Y&amp;SubscriptionId=">Wemos Relay Shield bei Amazon</a></li>
</ul>
<p>Der Beitrag <a href="https://www.dahlen.org/2018/08/22/esp8266-via-esphomelib-mit-home-assistant-verbinden/">ESP8266 via esphomelib mit Home Assistant verbinden</a> erschien zuerst auf <a href="https://www.dahlen.org">dahlen.org</a>.</p>
]]></content:encoded>
					
		
		<enclosure url="https://services.dahlen.org/wp-content/uploads/2018/08/esphomelib-mqtt-homeassistant.mp4" length="4757812" type="video/mp4" />

			</item>
		<item>
		<title>Raspberry Pi Zero W &#8222;headless&#8220; Setup &#8211; so geht&#8217;s</title>
		<link>https://www.dahlen.org/2017/10/12/raspberry-pi-zero-w-headless-setup/</link>
					<comments>https://www.dahlen.org/2017/10/12/raspberry-pi-zero-w-headless-setup/#comments</comments>
		
		<dc:creator><![CDATA[christoph]]></dc:creator>
		<pubDate>Thu, 12 Oct 2017 06:30:33 +0000</pubDate>
				<category><![CDATA[Hobby]]></category>
		<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Internet of Things]]></category>
		<category><![CDATA[Netzwerke]]></category>
		<category><![CDATA[Raspberry]]></category>
		<category><![CDATA[Raspian]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<guid isPermaLink="false">https://www.dahlen.org/?p=2154</guid>

					<description><![CDATA[<p>Der Raspberry Pi Zero W kommt für wenig Geld daher. Er verfügt ab Werk über WLAN (und Bluetooth). Sind Adapter für Mini-HDMI und Micro-USB nicht im Haus, kommt ein Setup mit Monitor und Tastatur nicht infrage. Und die fehlende LAN-Buchse am Zero bedeutet: Der Kaugummistreifen muß erstmal ins WLAN. Eine lösbare Herausforderung &#8230; Den Zero&#160;W [&#8230;]</p>
<p>Der Beitrag <a href="https://www.dahlen.org/2017/10/12/raspberry-pi-zero-w-headless-setup/">Raspberry Pi Zero W &#8222;headless&#8220; Setup &#8211; so geht&#8217;s</a> erschien zuerst auf <a href="https://www.dahlen.org">dahlen.org</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Der Raspberry Pi Zero W kommt für wenig Geld daher. Er verfügt <q>ab Werk</q> über WLAN (und Bluetooth). Sind Adapter für Mini-HDMI und Micro-USB nicht im Haus, kommt ein Setup mit Monitor und Tastatur nicht infrage. Und die fehlende LAN-Buchse am Zero bedeutet: Der <q>Kaugummistreifen</q> muß erstmal ins WLAN.</p>



<p>Eine lösbare Herausforderung &#8230;<br>
<br>
Den Zero&nbsp;W gibt es für unter 15 EUR (ohne Zubehör) bzw. für unter 30 Euro als <q>Essential</q> Paket (z.B. bei <a onMouseOut="al_link_out()" onMouseOver="al_gen_multi(745902587, {de : 'A-B06XCYGP27'}, 'de', 'default');"  rel="nofollow" target="_blank" href="http://www.amazon.de/gp/product/B06XCYGP27?ie=UTF8&amp;linkCode=xm2&amp;camp=2025&amp;creative=6738&amp;tag=dahlenorg-21&amp;creativeASIN=B06XCYGP27&amp;SubscriptionId=">Amazon</a>). Für die Installation wird eine <a title="Dokumentation SD-Karten" href="https://www.raspberrypi.org/documentation/installation/sd-cards.md" target="_blank" rel="noopener">geeignete</a> Micro-SD-Karte mit mindestens 8GB Kapazität benötigt. Außerdem ein Kartenleser (z.B. von Lexar, bei <a onMouseOut="al_link_out()" onMouseOver="al_gen_multi(852430559, {de : 'A-B00V3IEMNO'}, 'de', 'default');"  rel="nofollow" target="_blank" href="http://www.amazon.de/gp/product/B00V3IEMNO?ie=UTF8&amp;linkCode=xm2&amp;camp=2025&amp;creative=6738&amp;tag=dahlenorg-21&amp;creativeASIN=B00V3IEMNO&amp;SubscriptionId=">Amazon</a>), welcher an einen weiteren Rechner angeschlossen wird.</p>



<span id="more-2154"></span>



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



<p>Das Bespielen der SD-Karte mit <a title="Raspian Downloads" href="https://www.raspberrypi.org/software/operating-systems/" target="_blank" rel="noopener">Raspbian</a> lt. <a title="Installations-Anleitung" href="https://www.raspberrypi.org/documentation/installation/installing-images/README.md" target="_blank" rel="noopener">Install Guide</a> ist schnell erledigt und mündet folgender Partitionierung:</p>



<ol class="wp-block-list"><li>die boot-Partition, welche das DOS-Dateisystem nutzt und</li><li>die root-Partition, welche das Linux Ext-Dateisystem nutzt.</li></ol>



<p>Wir werden ausschließlich den Inhalt der <b>boot</b>-Partition erweitern, dank DOS-Dateisystem sind die folgenden Änderungen unter allen populären Betriebssystemen möglich.</p>



<h3 class="wp-block-heading">OpenSSH-Service aktivieren</h3>



<p>Gemäß offizieller <a href="https://www.raspberrypi.org/documentation/remote-access/ssh/README.md" target="_blank" rel="noopener">Anleitung</a> (Abs.&nbsp;3) ist im Stammverzeichnis der boot-Partition eine Datei namens <span class="tt">ssh</span> zu erstellen. Die reine Existenz dieser Datei führt im Raspian-Boot-Prozess dazu, dass der OpenSSH Server automatisch aktiviert wird und eingehende Verbindungen auf Port 22 annimmt.</p>



<h3 class="wp-block-heading">WLAN-Konfiguration vorbereiten</h3>



<p>Der zweite Schritt ist etwas umfangreicher. Ebenfalls im Stammverzeichnis der boot-Partition wird die Datei <span class="tt">wpa_supplicant.conf</span> erstellt. Lt. ungeprüfter Aussagen muss sie Linux-Zeilenenden aufweisen. Wie in den <a title="Raspberry Pi Blog Post" href="https://www.raspberrypi.org/blog/another-update-raspbian/" target="_blank" rel="noopener">Hintergrundinformationen</a> angekündigt, wird diese Datei beim Start automatisch an die <q>richtige</q> Stelle <span class="tt">/etc/wpa_supplicant/</span> verschoben.</p>



<p>Die Datei hat folgenden Inhalt:
</p>



<pre class="wp-block-code"><code>country=DE 
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev 
update_config=1 
network={
     ssid="WLAN SSID"
     scan_ssid=1
     psk="WLAN PASSWORT"
     key_mgmt=WPA-PSK
}</code></pre>



<p>Die Werte <span class="tt">WLAN SSID</span> und <span class="tt">WLAN PASSWORT</span> sind natürlich durch die tatsächlichen Angaben zu ersetzen. Befindet man sich nicht in Deutschland, ist <span class="tt">DE</span> durch den ISO-Code des aktuellen Landes zu ersetzen.</p>



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



<p>Damit sind die Vorbereitungen für den ersten Start abgeschlossen. Die SD-Karte wird nun in den Raspberry Pi gesteckt und dieser mit Energie versorgt. Nach einigen Sekunden sollte der Raspberry&nbsp;Pi im WLAN auftauchen, als Standard-Hostname wird dabei <em>raspberrypi</em> verwendet. Im WLAN-Access Point sollte sich auch die vergebene IP-Adresse ermitteln lassen. </p>



<p>Mittels eines geeigneten SSH-Clients kann nun die Anmeldung erfolgen. Das Passwort zum Standard-Benutzer <span class="tt">pi</span> ist in der offiziellen Dokumentation zu finden und sollte nach der 1. Anmeldung unbedingt geändert werden. </p>



<p>Das Verfahren zur WLAN-Client-Definition kann übrigens wiederholt werden und eignet sich somit auch, um eine nachträgliche Änderung <q>headless</q> durchzuführen.</p>
<p>Der Beitrag <a href="https://www.dahlen.org/2017/10/12/raspberry-pi-zero-w-headless-setup/">Raspberry Pi Zero W &#8222;headless&#8220; Setup &#8211; so geht&#8217;s</a> erschien zuerst auf <a href="https://www.dahlen.org">dahlen.org</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dahlen.org/2017/10/12/raspberry-pi-zero-w-headless-setup/feed/</wfw:commentRss>
			<slash:comments>30</slash:comments>
		
		
			</item>
		<item>
		<title>image caption fly-out: Animierte Bildbeschriftungen nur mit HTML &#038; CSS</title>
		<link>https://www.dahlen.org/2015/02/18/css-image-caption-flyout/</link>
					<comments>https://www.dahlen.org/2015/02/18/css-image-caption-flyout/#comments</comments>
		
		<dc:creator><![CDATA[christoph]]></dc:creator>
		<pubDate>Wed, 18 Feb 2015 14:18:44 +0000</pubDate>
				<category><![CDATA[Hobby]]></category>
		<category><![CDATA[Informatik]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[figcaption]]></category>
		<category><![CDATA[figure]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[transition]]></category>
		<guid isPermaLink="false">https://www.dahlen.org/?p=1815</guid>

					<description><![CDATA[<p>Im World Wide Web stösst man immer wieder auf Bild- und Text-Komponenten (z.B. Teaser), die in spezifischer Weise mit dem Besucher interagieren: Im unteren Bereich wird das Bild von einer Text-Zeile überlagert, die beim Überfahren mit der Maus hochrollt und weiteren Text freigibt. Oftmals kommen dabei schwergewichtige Javascript-Lösungen und aberwitzige Berechnungen zum Einsatz, doch ist [&#8230;]</p>
<p>Der Beitrag <a href="https://www.dahlen.org/2015/02/18/css-image-caption-flyout/">image caption fly-out: Animierte Bildbeschriftungen nur mit HTML &#038; CSS</a> erschien zuerst auf <a href="https://www.dahlen.org">dahlen.org</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Im World Wide Web stösst man immer wieder auf Bild- und Text-Komponenten (z.B. <em>Teaser</em>), die in spezifischer Weise mit dem Besucher interagieren: Im unteren Bereich wird das Bild von einer Text-Zeile überlagert, die beim Überfahren mit der Maus hochrollt und weiteren Text freigibt.</p>
<p>Oftmals kommen dabei schwergewichtige Javascript-Lösungen und aberwitzige Berechnungen zum Einsatz, doch ist eine Umsetzung ausschließlich mit HTML und CSS ebenfalls möglich.<br />
<span id="more-1815"></span></p>
<h2>Das Ziel</h2>
<p>Ich bin mir nicht sicher, ob <q>fly-out</q> die korrekte Bezeichnung ist (und nehme entsprechende Hinweise aus <a href="https://www.dahlen.org/2015/02/18/css-image-caption-flyout/#response">Kommentaren</a> gerne zur Kenntnis), aber den Effekt dürften viele schon gesehen haben:</p>
<ul>
<li>ein Bild wird im unteren Bereich von einem (einzeiligen) Text nebst Hintergrund überlagert. Die Bild<b>unter</b>schrift liegt also <b>auf</b> dem Bild.</li>
<li>wird der Mauszeiger über das Bild bewegt, so rollt der überlagernde Text-Bereich nach oben und gibt weitere Text-Passagen frei.</li>
<li>wird der Mauszeiger aus dem Bild bewegt, fällt der Text wieder auf seine ursprüngliche Höhe zusammen.</li>
</ul>
<p>Ein Bild sagt mehr als tausend Worte, daher hier ein Beispiel für das zu erreichende Ziel (bitte Mauszeiger über das Bild bewegen).</p>
<figure class="strict overlay"><a href="https://www.dahlen.org/wp-content/uploads/2015/02/postkarte1.jpg"><img decoding="async" class="alignnone wp-image-1880 size-full" src="https://www.dahlen.org/wp-content/uploads/2015/02/postkarte1.jpg" alt="Scan einer Postkarte mit historischer Ansicht der Dahlen-Mühle" width="1257" height="769" srcset="https://www.dahlen.org/wp-content/uploads/2015/02/postkarte1.jpg 1257w, https://www.dahlen.org/wp-content/uploads/2015/02/postkarte1-300x184.jpg 300w, https://www.dahlen.org/wp-content/uploads/2015/02/postkarte1-1024x626.jpg 1024w, https://www.dahlen.org/wp-content/uploads/2015/02/postkarte1-768x470.jpg 768w" sizes="(max-width: 1257px) 100vw, 1257px" /></a><figcaption>
<h1>Historische Ansichtskarte aus Sevelen</h1>
<p>Die Aufnahme zeigt die Dahlen-Mühle aus Sicht des heutigen, neuen Sevelener Friedhofs. Es wurde ca. 1930 für eine Postkarte aus Sevelen verwendet.</p>
</figcaption></figure>
<h2>Der Weg</h2>
<p>Die Lösung basiert &#8211; wie bereits angekündigt &#8211; auf reinem HTML-Markup und Styling über CSS-Regeln. Zur semantischen Abbildung des Konstrukts bietet sich das mit HTML 5 neu eingeführte <span class="code"><a title="Erläuterung des figure-Elements (engl.)" href="http://www.w3.org/wiki/HTML/Elements/figure" target="_blank" rel="noopener">figure</a></span>-Element nebst seines Kind-Elements <span class="code"><a title="Erläuterung des figcaption-Elements (engl.)" href="http://www.w3.org/wiki/HTML/Elements/figcaption" target="_blank" rel="noopener">figcaption</a></span> an. Notwendig ist dies allerdings nicht, auch andere Lösungen mit <span class="code">&lt;div&gt;</span> oder <span class="code">&lt;dl&gt;</span>, <span class="code">&lt;dt&gt;</span> und <span class="code">&lt;dd&gt;</span> sind möglich.</p>
<h3>HTML Mark-Up</h3>
<p><code><br />
&lt;figure&gt;<br />
&lt;img src="https://placehold.it/600x300" alt="placeholder"&gt;<br />
&lt;figcaption&gt;<br />
&lt;h1&gt;Bildunterschrift&lt;/h1&gt;<br />
&lt;p&gt;Weiterführender Text zum Bild<br />
(kann auch mehrere Paragraphen enthalten)&lt;/p&gt;<br />
&lt;/figcaption&gt;<br />
&lt;/figure&gt;<br />
</code></p>
<p>Das reine HTML führt zu dem unten abgebildeten Ergebnis. Da noch spezifisches Styling fehlt, kommen die Standardwerte des jweiligen Browsers zum Einsatz.</p>
<p><a href="https://www.dahlen.org/wp-content/uploads/2015/02/flyout-clean2.png"><img decoding="async" class="aligncenter wp-image-1855 size-full" src="https://www.dahlen.org/wp-content/uploads/2015/02/flyout-clean2.png" alt="" /></a></p>
<h3>Cascading Stylesheets</h3>
<p>Um unserem Ziel näher zu kommen, wird mit dem grund­sätz­lichen Styling begonnen:</p>
<p><code><br />
figure {<br />
position: relative;<br />
width: 600px;<br />
overflow: hidden;<br />
line-height: 0;<br />
}<br />
figure img {<br />
max-width: 100%;<br />
}<br />
figure figcaption {<br />
position: absolute;<br />
bottom: 0;<br />
width: 90%;<br />
padding: 0 5%;<br />
background-color: rgba(0,0,0,0.8);<br />
color: white;<br />
}<br />
</code></p>
<ul>
<li>das <span class="code">figure</span>-Element bekommt eine definierte Breite, an der sich die Inhalte (also Bild und Text) orientieren. Außerdem wird die Zeilenhöhe (<em>line-height</em>) auf 0 gesetzt, um unerwünschten Abständen durch Umbrüche im HTML entgegenzuwirken.</li>
<li>das <span class="code">figcaption</span>-Element bekommt 5% Innenabstand (<em>padding</em>) zu beiden Seiten, damit der enthaltene Text nicht an die Ränder stösst. Es wird außerdem am unteren Rand ausgerichtet (<em>bottom</em>).</li>
<li>Vorder- und Hintergrund-Farbe des <q>Overlays</q> werden definiert.</li>
</ul>
<p><a href="https://www.dahlen.org/wp-content/uploads/2015/02/flyout-styled3.png"><img decoding="async" class="aligncenter wp-image-1858 size-full" src="https://www.dahlen.org/wp-content/uploads/2015/02/flyout-styled3.png" alt="" /></a></p>
<p>Optisch ist das erreichte Zwischenergebnis schon recht nahe am geplanten Ziel, aber noch bewegt sich nichts. Ändern soll dies Verwendung der <em>transition</em>-Vorschrift auf dem <em>max-height</em>-Attribut des <span class="code">figcaption</span>-Elements. Ziel ist es, daß im Ursprungszustand <em>max-height</em> für die Darstellung der Überschrift (<span class="code">&lt;h1&gt;</span>) ausreicht und diese Beschränkung im <q>hover</q>-Zustand aufgehoben wird.</p>
<p>Es gilt nun also die notwendige (Achtung: Kein Widerspruch) minimale Maximal-Höhe zu finden, welche sich aus der Höhe (<em>height</em>) des <span class="code">h1</span>-Elementes zzgl. seiner Abstände und Rahmen ermitteln lässt. Damit das Ganze nicht in einer Pixel-Orgie ausartet und auch im Rahmen eines Responsive Design funktioniert, empfehle ich die Verwendung von <em>em</em>, also der relativen Zeichengröße:</p>
<p><code><br />
figure figcaption h1 {<br />
font-size: 2em;<br />
line-height: 1em;<br />
padding: 0.25em 0;<br />
margin: 0;<br />
}<br />
</code></p>
<p>Zur Erklärung:</p>
<ul>
<li>zunächst wird die Schriftgröße auf <em>2em</em> gesetzt, was einer Verdoppelung zur umgebenden Schriftgröße entspricht</li>
<li>desweiteren wird die Zeilenhöhe auf die aktuelle Schriftgröße gesetzt. Der Wert <em>1em</em> bezieht sich auf die aktuell gültige Schriftgröße, welche durch die vorherige Zeile auf das Doppelte der <q>normalen</q> Schriftgröße gesetzt wurde.</li>
<li>außerdem bekommt die Überschrift oberhalb und unterhalb etwas Innenabstand, um <q>atmen</q> zu können. Auch für <em>padding</em> gilt, daß <em>em</em> in Relation zur aktuellen Schriftgröße gesehen werden muß.</li>
<li>das explizite Setzen des Außenabstands (<em>margin</em>) auf 0 soll die Anwendung von Browers-Vorgaben unterdrücken. Andernfalls würde z.B. Mozilla Firefox hier einen Standardwert von 0,67em anwenden.</li>
</ul>
<p>Damit hat das <span class="code">h1</span>-Element jetzt &#8211; von außen betrachtet &#8211; eine Höhe von <strong>3em</strong> (2em + 2 × 0,25 × 2em). Dies ist der initiale Wert für das <em>max-height</em>-Attribut des <span class="code">figcaption</span>-Elements. Er wird dafür sorgen, daß im Ursprungszustand nur die einzeilige Überschrift sichtbar sein wird. Gleichzeitig wird diese Beschränkung aufgehoben, sobald der Mauszeiger das <span class="code">figure</span>-Element betritt.</p>
<p>Damit das Ganze nicht schlagartig, sondern schön <q>smooth &#8217;n easy</q> passiert, wenden wir die CSS-Eigenschaft <em>transition</em> auf das <em>max-height</em>-Attribut an. Es ergibt sich folgende CSS-Ergänzung:</p>
<p><code><br />
figure figcaption {<br />
max-height: 3em;<br />
transition: max-height 1s ease-in-out;<br />
}<br />
figure:hover figcaption {<br />
max-height: 100%;<br />
}<br />
</code></p>
<p>Erläuterung:</p>
<ul>
<li><span class="code">max-height: 3em</span> ist wie oben erläutert der initiale Wert für die maximale Höhe des Text-Overlays.</li>
<li><span class="code">transition: max-height</span> sorgt dafür, daß bei Veränderung des <em>max-height</em>-Wertes zwischen Soll- und Ist-Wert interpoliert wird. Die Dauer bis zum Erreichen des Soll-Wertes wird auf 1 Sekunde (<span class="code">1s</span>) gesetzt. Die Veränderung soll dabei nicht linear, sondern mit Beschleunigung und Verzögerung erfolgen (<span class="code">ease-in-out</span>)</li>
<li><span class="code">figure:hover figcaption</span> definiert das Verhalten des <span class="code">figcaption</span>-Elementes, sobald der Mauszeiger sich über dem umgebenden <span class="code">figure</span>-Element befindet. Abgebildet wird dies durch die CSS-Pseudoklasse <em>:hover</em> am entsprechenden Element.</li>
</ul>
<p>Damit haben wir unser Ziel erreicht: Animierte Bildbeschriftungen nur mit HTML und CSS.</p>
<figure class="strict overlay"><img decoding="async" src="https://www.dahlen.org/wp-content/uploads/2016/10/placeholder-1200x600-1.png" alt="placeholder" /><figcaption>
<h1>Bildunterschrift</h1>
<p>Weiterführender Text zum Bild<br />
(kann auch mehrere Paragraphen enthalten)</p>
</figcaption></figure>
<h2>Das Fazit</h2>
<p>Die hier vorgestellte Lösung stellt eine Alternative zu Ansätzen mit Javascript dar und erlaubt ein Auskommen ohne zusätzliche Bibliotheken wie jQuery. Durch den Fokus auf Standards wie HTML(5) und CSS(3) werden Inkompatibilitäten vermieden und gleichzeitig das Potential moderner Browser ausgenutzt.</p>
<p>Gleichwohl ist sie nicht frei von Nachteilen, die hier kurz aufgeführt sind:</p>
<ul>
<li>Geräte ohne Mauszeiger, wie Mobiltelefone und Tablet-PCs, werden den ergänzenden Text nicht zu sehen bekommen. Bei der Formulierung ist also darauf zu achten, daß bereits die Überschrift ausreichend Informationen bereitstellt und sich die weiterführenden Angaben auf anderem Wege ermitteln lassen.<br />
Dies gilt allerdings auch für Javascript-Lösungen gleichermaßen.</li>
<li>Versionen des Internet Explorers bis einschließlich Version 9 unterstützen die CSS-Eigenschaft <em>transition</em> nicht. Bei diesen Versionen wird das <q>fly-out</q> also schlagartig erscheinen (s.a. <a title="http://caniuse.com/" href="http://caniuse.com/#search=transition" target="_blank" rel="noopener">http://caniuse.com</a>).</li>
<li>das Einfahren des Overlays beim Verlassen des <span class="code">figure</span>-Elementes geschieht mit einer gewissen Verzögerung. Grund hierfür ist, daß die Transition für <em>max-height</em> bei 100% startet, das Overlay aber i.d.R. nicht die volle Höhe des <span class="code">figure</span>-Elementes einnimmt. Die ersten Momente der Höhenreduktion sind daher nicht sichtbar.</li>
</ul>
<p>Bzgl. des letzten Punktes haben Experimente mit <em>height</em> statt <em>max-height</em> nicht zum Erfolg geführt. Ein Wechsel von einer definierten Höhe (z.B. <em>height: 3em</em>) auf den automatisch ermittelten Wert (<em>height: auto</em>) wurde nicht via <em>transition</em> interpoliert und erfolgte sprunghaft.</p>
<p>Abschließend noch ein Hinweis zur Hintergrund-Farbe des Overlays: CSS3-Farben mit <em>rgba</em> (also Farbe + Transparenz) werden noch nicht von allen Browsern <a title="caniuse.com: Browser und unterstützte Features" href="http://caniuse.com/#search=rgba" target="_blank" rel="noopener">unterstützt</a>. Alternativ kann <span class="code">figcaption</span> darum ein transparentes Bild (PNG) als Hintergrund (<em>background-image</em>) zugewiesen werden. Vermeiden sollte man allerdings <em>opacity</em>, da dies sich auch auf die Schrift auswirkt.</p>
<p>Der Beitrag <a href="https://www.dahlen.org/2015/02/18/css-image-caption-flyout/">image caption fly-out: Animierte Bildbeschriftungen nur mit HTML &#038; CSS</a> erschien zuerst auf <a href="https://www.dahlen.org">dahlen.org</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dahlen.org/2015/02/18/css-image-caption-flyout/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
