<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://wiki.fhem.de/w/index.php?action=history&amp;feed=atom&amp;title=Hey_Siri_Kurzbefehle%2C_Apple_Shortcuts</id>
	<title>Hey Siri Kurzbefehle, Apple Shortcuts - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.fhem.de/w/index.php?action=history&amp;feed=atom&amp;title=Hey_Siri_Kurzbefehle%2C_Apple_Shortcuts"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Hey_Siri_Kurzbefehle,_Apple_Shortcuts&amp;action=history"/>
	<updated>2026-04-05T18:18:01Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in FHEMWiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Hey_Siri_Kurzbefehle,_Apple_Shortcuts&amp;diff=38485&amp;oldid=prev</id>
		<title>Torxgewinde: Kategorien hinzugefügt</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Hey_Siri_Kurzbefehle,_Apple_Shortcuts&amp;diff=38485&amp;oldid=prev"/>
		<updated>2023-07-11T19:24:49Z</updated>

		<summary type="html">&lt;p&gt;Kategorien hinzugefügt&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 11. Juli 2023, 21:24 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l103&quot;&gt;Zeile 103:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 103:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Links ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Links ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Forumspost: https://forum.fhem.de/index.php?topic=133560.0&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Forumspost: https://forum.fhem.de/index.php?topic=133560.0&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Kategorie:HOWTOS]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Kategorie:Code Snippets]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key c1fhemwiki:diff:1.41:old-38484:rev-38485:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Torxgewinde</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Hey_Siri_Kurzbefehle,_Apple_Shortcuts&amp;diff=38484&amp;oldid=prev</id>
		<title>Torxgewinde: Hey Siri, ohne Homekit Seite erstellt</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Hey_Siri_Kurzbefehle,_Apple_Shortcuts&amp;diff=38484&amp;oldid=prev"/>
		<updated>2023-07-11T19:22:46Z</updated>

		<summary type="html">&lt;p&gt;Hey Siri, ohne Homekit Seite erstellt&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Hey Siri Kurzbefehle, Apple Shortcuts -&amp;gt; SSH -&amp;gt; MQTT -&amp;gt; FHEM, Access Control==&lt;br /&gt;
Hey Siri, schalte die Gartenbeleuchtung ein&amp;quot; - ohne Homekit&lt;br /&gt;
&lt;br /&gt;
Siri Kurzbefehle sind in iOS Geräten eine komfortable Option, um mittels Widgets oder auch mit der &amp;quot;Hey Siri&amp;quot; Sprachsteuerung Befehle auszuführen. Einer der Kurzbefehle erlaubt es SSH Befehle auszuführen, was einem viele weitere Schnittstellen ermöglicht.&lt;br /&gt;
&lt;br /&gt;
Da die iOS Geräte zwar schon recht sicher sind, aber trotzdem einen Angriffsvektor darstellen, ist es nicht ratsam, direkt die Befehle an FHEM oder die Konsole weiterzugeben. Zu einfach wäre es, einen schädlichen Befehl abzusetzen.&lt;br /&gt;
&lt;br /&gt;
Als Schnittstelle zwischen Apple-Gerät (iPhone, Mac, iPad) kommt SSH aus einem Kurzbefehl zum Einsatz. Empfangen wird der Befehl von einem SSH Daemon. Als SSH Daemon reicht bereits etwas minimales wie Dropbear auf einem System wie z.B. OpenWRT. Damit man mit SSH nicht auf dem Server beliebige Befehle ausführen kann, wird ein Nutzer erstellt, der wenig Rechte im System hat, und es wird mit &amp;quot;forced_command&amp;quot; nur ein einziges Programm erlaubt. Dieses erlaubte Programm ist hier ein Shell-Skript, welches die Daten dann an FHEM weitergibt. In diesem Fall habe ich die Daten noch über MQTT verschickt und dann erst in FHEM mit einem Device bearbeitet. Damit in FHEM nicht jeder Befehl ausgeführt wird, gibt es eine Whitelist von regulären Ausdrücken - so kann dann das Apple-Gerät nur genau diese Befehle ausführen.&lt;br /&gt;
&lt;br /&gt;
Erstmal benötigt man die App &amp;quot;Kurzbefehle&amp;quot; bzw. &amp;quot;Shortcuts&amp;quot; von Apple.&lt;br /&gt;
&lt;br /&gt;
Dann erstellt man sich einen Shortcut mit dem SSH Befehl. Extra ein Shortcut anzulegen bietet den Vorteil, nur an einer Stelle den SSH Zugriff einstellen zu müssen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Hey Siri SSH Befehl Teil 1.png|500px]]&lt;br /&gt;
[[Datei:Hey Siri SSH Befehl Teil 2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Nun erstellt man sich seine Shortcuts für Aktionen, hier schalten wir ein Radio mit einer Funkschaltsteckdose ein:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Hey Siri, Radio An, Teil 1.png|500px]]&lt;br /&gt;
[[Datei:Hey Siri, Radio An, Teil 2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Der Name des Shortcut ist auch gleichzeitig der Sprachbefehl.&lt;br /&gt;
&lt;br /&gt;
Zu dem SSH Daemon, Dropbear oder analog auch OpenSSH:&lt;br /&gt;
Es wird ein Nutzer angelegt, der wenig Rechte im System hat. Das geht zum Beispiel bei einem OpenWRT System in der Art ([https://openwrt.org/docs/guide-user/security/secure.access#create_a_non-privileged_user_in_openwrt Doku dazu]):&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
opkg update&lt;br /&gt;
opkg install shadow-useradd&lt;br /&gt;
useradd appleshortcut&lt;br /&gt;
passwd appleshortcut&lt;br /&gt;
--&amp;gt; Passwort festlegen&lt;br /&gt;
&lt;br /&gt;
mkdir -p /home/appleshortcut&lt;br /&gt;
chown appleshortcut /home/appleshortcut&lt;br /&gt;
vi /etc/passwd&lt;br /&gt;
---&amp;gt; Die gewünschte Shell ergänzen (ganz hinten)&lt;br /&gt;
---&amp;gt; appleshortcut:x:1000:1000::/home/appleshortcut:/bin/ash&lt;br /&gt;
&lt;br /&gt;
/etc/init.d/dropbear restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Nun hat man also einen User &amp;quot;appleshortcut&amp;quot;, der seine Dateien im Ordner &amp;quot;/home/appleshortcut&amp;quot; findet und der sich mit SSH auf Port 22 einloggen kann. Nun macht es Sinn, diesen SSH Zugriff nicht so universell zu gestalten - der User soll ja nur ganz bestimmte FHEM Befehle absetzen können, mehr nicht. Das gelingt, indem man dem SSH Daemon den Zugriff mit Passwörtern verwehrt, was mit der LuCI-Weboberfläche recht einfach ist:&lt;br /&gt;
[[Datei:OpenWRT Screenshot SSH Daemon.png|800px]]&lt;br /&gt;
&lt;br /&gt;
Von nun an gelingt der SSH Zugriff nur noch mit SSH-Schlüsseln. Dem jeweiligen fremden System teilt man den öffentlichen Schlüssel mit, anhand dem man authentifiziert wird. Das ist eh sicherer als ein Passwort, da die Schlüssel länger bzw. schwerer zu erraten sind.&lt;br /&gt;
&lt;br /&gt;
Den öffentlichen Schlüssel vom Kurzbefehl vom iOS Gerät braucht man gleich. Den kann man aus den Details kopieren, wenn man sich den SSH Kurzbefehl anschaut:&lt;br /&gt;
[[Datei:Apple Shortcut, SSH Key.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Damit der SSH Daemon einen Nutzer anhand des Schlüssels authentifiziert, legt man eine Datei an unter &amp;quot;/home/appleshortcut/.ssh/authorized_keys&amp;quot; mit folgendem Inhalt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;no-port-forwarding,no-X11-forwarding,no-pty,command=&amp;quot;sh script.sh&amp;quot; ssh-ed25519 hier_den_öffentlichen_Schlüssel_vom_iOS_Gerät Kommentar_zum_Gerät&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gemäß der Doku haben wir also recht viele Beschränkungen hinzugefügt und den öffentlichen Schlüssel in diese Datei kopiert. Die wichtigste Beschränkung ist, dass nur noch ein Skript ausgeführt wird und keine universelle Shell. Das Skript heißt kreativerweise &amp;quot;script.sh&amp;quot; und liegt hier unter &amp;quot;/home/appleshortcut/script.sh&amp;quot;. Es hat folgenden Inhalt:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
mosquitto_pub -t &amp;quot;AppleShortcut&amp;quot; -m &amp;quot;$SSH_ORIGINAL_COMMAND&amp;quot; -h brokeradresse -u nutzername -P geheimes_passwort&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, nun landen Befehle schon mal in unserem MQTT Broker. Es ist übrigens sinnvoll, den Broker auch TLS zu verschlüsseln, falls dieser auf einem anderen Gerät läuft, aber das habe ich jetzt mal weggelassen. Jetzt kann FHEM auf dieses MQTT Topic reagieren. Dafür kann man ein Device definieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
defmod AppleShortcut.device MQTT2_DEVICE&lt;br /&gt;
attr AppleShortcut.device IODev Mosquitto&lt;br /&gt;
attr AppleShortcut.device alias Apple Shortcut&lt;br /&gt;
attr AppleShortcut.device devicetopic AppleShortcut&lt;br /&gt;
attr AppleShortcut.device icon logo_apple&lt;br /&gt;
attr AppleShortcut.device readingList $DEVICETOPIC:.* { my $ret=json2nameValue($EVENT);; $ret-&amp;gt;{state}=lc($ret-&amp;gt;{action}) if (defined($ret-&amp;gt;{action}));; return $ret }&lt;br /&gt;
attr AppleShortcut.device stateFormat {\&lt;br /&gt;
    my @ts = ReadingsTimestamp($name,&amp;quot;state&amp;quot;,&amp;quot;&amp;quot;) =~ /^(\d+)-(\d+)-(\d+)\s(\d+:\d+):(\d+)$/;;\&lt;br /&gt;
    my $value = ReadingsVal($name, &amp;quot;action&amp;quot;, &amp;quot;???&amp;quot;);;\&lt;br /&gt;
    \&lt;br /&gt;
    return &amp;quot;&amp;lt;b&amp;gt;$value&amp;lt;/b&amp;gt;&amp;lt;br \&amp;gt;&amp;lt;small&amp;gt;($ts[2].$ts[1].$ts[0] - $ts[3]:$ts[4])&amp;lt;/small&amp;gt;&amp;quot;;;\&lt;br /&gt;
}&lt;br /&gt;
attr AppleShortcut.device userReadings action_result:action.* {\&lt;br /&gt;
    my $value = ReadingsVal($name, &amp;quot;action&amp;quot;, &amp;quot;???&amp;quot;);;\&lt;br /&gt;
    my $response = &amp;quot;nok&amp;quot;;;\&lt;br /&gt;
\&lt;br /&gt;
    ## Liste von erlaubten Befehlen als regulärer Ausdruck\&lt;br /&gt;
    ##   Zeilenende $ und Anfang ^ mit beachten,\&lt;br /&gt;
    ##   sonst sind unbeabsichtigte Befehlsketten/Escapes möglich\&lt;br /&gt;
    my @commands = (\&lt;br /&gt;
        &amp;#039;^set SteckdoseKuechenradio\.device o(?:ff|n)$&amp;#039;,\&lt;br /&gt;
        &amp;#039;^set G\.Ding1 on-for-timer [0-9]+$&amp;#039;,\&lt;br /&gt;
        &amp;#039;^set G\.Ding2 o(?:ff|n)$&amp;#039;\&lt;br /&gt;
    );;\&lt;br /&gt;
    \&lt;br /&gt;
    ##wandel von String in RegEx um\&lt;br /&gt;
    @commands = map { qr{$_} } @commands;;\&lt;br /&gt;
\&lt;br /&gt;
    ##behalte was matcht, speichere die Arraylänge\&lt;br /&gt;
    my $match = scalar grep { $value =~ $_ } @commands;;\&lt;br /&gt;
\&lt;br /&gt;
    if ($match) {\&lt;br /&gt;
        fhem(&amp;quot;$value&amp;quot;);;\&lt;br /&gt;
        $response = &amp;quot;ok&amp;quot;;;\&lt;br /&gt;
    }\&lt;br /&gt;
\&lt;br /&gt;
    return &amp;quot;$response&amp;quot;;;\&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Define ist als UserReading die Reaktion auf MQTT Telegramme hinterlegt. Was erlaubt ist, wird mit dem Array @command spezifiziert. Es ist eine Liste von Strings mit regulären Ausdrücken.&lt;br /&gt;
&lt;br /&gt;
Die Verzögerung vom Starten eines Befehls, bis zur Ausführung beträgt ca. 500ms bis 2s.&lt;br /&gt;
&lt;br /&gt;
Mit den Tipps kann man mit Siri -&amp;gt; Kurzbefehle -&amp;gt; SSH -&amp;gt; MQTT -&amp;gt; FHEM steuern. Alternativ, falls man MQTT nicht in dieser Kette nutzen möchte, kann man in dem &amp;quot;script.sh&amp;quot; auch direkt fhem.pl aufrufen, sofern es auf dem gleichem System läuft. Dann sollte man in dem Skript die Whitelist einfügen und die Kommandos entsprechend mit Shell-Befehlen prüfen. &lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
Forumspost: https://forum.fhem.de/index.php?topic=133560.0&lt;/div&gt;</summary>
		<author><name>Torxgewinde</name></author>
	</entry>
</feed>