FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: hugo am 27 Oktober 2024, 08:26:12

Titel: Gerät über Internet schalten
Beitrag von: hugo am 27 Oktober 2024, 08:26:12
Hallo zusammen,
jetzt habe ich schon viel gelesen, aber noch keine gute passende Lösung gefunden.
Am liebsten möchte meine Frau einen Knopf :) (App) auf dem Handy (IPhone) haben und dann nur ein Device schalten können z.b. Garagentor.
Der Zugriff sollte sicher sein, keine Portweiterleitung. Könnte mir als Verbindung VPN on demand vorstellen, dass sich aber nach dem senden des Befehls wieder trennt.

Hat jemand eine solche Lösung oder einen Tipp wie ich das lösen könnte.

Viel Dank für eure Ideen.

Gruß Josef
Titel: Aw: Gerät über Internet schalten
Beitrag von: tobi01001 am 27 Oktober 2024, 09:36:17
Hi,

ich nutze für externe "Kommunkation" - sprich Empfang gewisser Ereignisse sowie diverese Schaltvorgänge Telegram mit entsprechenden Telegrambot.

Ungetestet - aber theoretisch möglich - Shortcut in iOS der über Telegram eine Nachricht an den Bot schickt und über fhem die Aktion auslöst.

Gruß,
Tobias
Titel: Aw: Gerät über Internet schalten
Beitrag von: DeeSPe am 27 Oktober 2024, 12:23:58
Warum nicht Apples Bordmittel verwenden, HomeKit?
Damit ist kein VPN nötig, es ist mit Siri nutzbar und man hat mannigfaltige Möglichkeiten inkl. zugehöriger App.

Gruß
Dan
Titel: Aw: Gerät über Internet schalten
Beitrag von: hugo am 28 Oktober 2024, 22:45:39
Hallo Dan,
für Homekit brauche ich doch eine Zentrale oder habe ich das falsch gelesen. AppleTV oder Homepod?

Aber sowas besitze ich zur Zeit nicht oder gibts hier andere Zentralen.

Gruß Josef
Titel: Aw: Gerät über Internet schalten
Beitrag von: Torxgewinde am 29 Oktober 2024, 07:22:30
Man kann das auf viele Arten lösen, eine davon wäre NTFY.sh zu verwenden (Forum Thread dazu: 📬 NTFY.sh: Push Nachrichten an iOS, Android, PC, Command-Line, E-Mail & Telefon (https://forum.fhem.de/index.php?topic=137036.0)). FHEM kann auf NTFY Nachrichten reagieren, der NTFY Server läuft gut erreichbar im WAN. Du musst dir lediglich ein nicht zu erratendes Topic überlegen, falls du den öffentlichen Server nutzt (bei einem privatem Server hättest du mehr Arbeit aber dafür freie Wahl).


HTH!

Links:
https://gitea.federationhq.de/byterazor/FHEM-NTFY
Titel: Aw: Gerät über Internet schalten
Beitrag von: Jamo am 29 Oktober 2024, 11:53:39
Wenn es nur ein Knopf sein soll, und Du / deine Frau ein Apple Geraet hat,koenntest Du auch in der "Shortcuts App" auf dem iPhone, einen neuen Shortcut "Garagentor" erstellen, und dort einen HTTP request hinterlegen, mit dem FHEM command das Garagentor zu oeffnen, also so etwa:

http://<fhem>:8083/fhem?cmd=set%20Garagentor%20open&XHR=1
 http://192.168.178.1:8083/fhem?cmd=set%20Garagentor%20open&fwcsrf=123456789&XHR=1
Den Befehl kannst Du auch einfach mal im Webbrowser ausprobieren, also oben im URL feld eingeben. Info link zum Beispiel Link: https://forum.fhem.de/index.php?topic=43159.0

Das geht ohne Zentrale, also einfach ueber den URL. Dafuer muesste dann VPN on demand eingerichtet sein, oder Du musst im heimischen LAN / WLAN sein.

Den Shortcut kann man dann einfach in der App anklicken, oder Du kannst Dir den Shortcut direkt auf den Homescreen legen, dann brauchst Du nur noch klicken. Habs gerade mal ausprobiert, das geht einwandfrei.
Titel: Aw: Gerät über Internet schalten
Beitrag von: TomLee am 29 Oktober 2024, 12:52:21
Zitatoder Du kannst Dir den Shortcut direkt auf den Homescreen legen

Den Shortcut würd ich dann als Widget (Wisch im Home- oder Sperrbildschirm nach rechts) oder (mit IOS 16) zum Sperrbildschirm hinzufügen.

Damit kann man dann (im heimischen WLAN) mit zwei Gesten aus dem Sperrbildschirm die Tür öffnen.

edit:
Ok, drei Gesten wären nötig, Sperrbildschirm aktivieren, nach rechts oder oben wischen, Widget auslösen.
Titel: Aw: Gerät über Internet schalten
Beitrag von: Torxgewinde am 29 Oktober 2024, 18:41:51
@hugo: Kann man denn voraussetzen, dass FHEM bei dir ohne Authentifizierung läuft?
Kann man annehmen dass das VPN schnell genug aufgebaut ist, oder dass das Gerät bereits im heimischem WLAN eingebucht ist?

FHEM ohne Authentifizierung im LAN zu nutzen ist nicht so gut, in so einem Setup kann jedes Gerät im LAN FHEM nutzen. Da FHEM auch Systembefehle auslösen kann, kann man auch mit FHEM Rechten auf Betriebssystemebene Befehle ausführen. Insgesamt keine so gute Idee, außer man hat so richtig vertrauen in alle seine LAN Geräte und Nutzer.

Nutzt man FHEMWEB mit dem Modul "allowed" kann man Zugangsdaten nutzen. Die sind allerdings ohne HTTPS nicht verschlüsselt und damit für moderne Geräte im LAN praktisch nicht als geschützt anzunehmen. Ist schon besser als nix, ist aber auch wieder so Lala von der Sicherheit. Auch sollte man dann verschiedene Nutzer für den One-Button-User und den Admin von FHEM einrichten, da sonst der One-Button-User pfleglich auf die Logindaten aufpassen sollte und das ist bei One-Button-Usern eher nicht sichergestellt, sonst wären sie ja nicht mit nur einem Button zufrieden.

Nutzt man FHEMWEB mit HTTPS, dann sind die Zugangsdaten geschützt. Dann sollte auch im Mobilgerät eine akzeptierte CA genutzt werden, sonst mag iOS keine Verbindung aufbauen. Für HTTPS bietet sich Let's Encrypt an, oder man macht seine eigene CA und importiert diese in das iOS Gerät als vertrauenswürdig.

Falls also die Bedenken zum Grübeln anregen, ist NTFY weiterhin eine Option. Der öffentliche NTFY-Server läuft bereits mit einer anerkannten CA, wird von iOS also wie er ist akzeptiert. Der Komfort (Anzahl der Klicks) ist der gleiche wie bei der direkten Ansprache des FHEMWEB Servers, nur dass es auch ganz ohne VPN, Portweiterleitung oder WLAN über das Internet funktioniert.

Was denkt ihr?

Edit #1:
Um NTFY.sh einzurichten:
update add https://rm.byterazor.de/upd-fhem-ntfy/controls_byterazor-fhem-ntfy.txt
update
shutdown restart
Ein Device anlegen mit:
defmod NTFY0 NTFY_CLIENT https://ntfy.sh
attr NTFY0 defaultPriority default
attr NTFY0 defaultTopic FreundlichenGruesseAnAlleFHEMNutzer
attr NTFY0 room Experimente

Senden einer Nachricht mit einem curl-Befehl:
curl -d "Your message content here" \
     -H "Title: Bla" \
     https://ntfy.sh/FreundlichenGruesseAnAlleFHEMNutzer
Das Gleiche nur mit WGET:
wget --method=POST \
     --body-data="Your message content here" \
     --header="Title: Bla" \
     https://ntfy.sh/FreundlichenGruesseAnAlleFHEMNutzer -q -O -
Oder, wenn es ein reines HTTP-GET als Webhook sein soll:
https://ntfy.sh/FreundlichenGruesseAnAlleFHEMNutzer/publish?message=Your%20message%20content%20here&title=Bla (https://ntfy.sh/FreundlichenGruesseAnAlleFHEMNutzer/publish?message=Your%20message%20content%20here&title=BlaGET)

Im Event-Log taucht dann folgendes auf, darauf kann man mit notify oder DOIF reagieren:
2024-10-29 19:01:16.714 NTFY_TOPIC NTFY0_FreundlichenGruesseAnAlleFHEMNutzer nrReceivedMessages: 7
2024-10-29 19:01:16.715 NTFY_CLIENT NTFY0 subscriptions: FreundlichenGruesseAnAlleFHEMNutzer
2024-10-29 19:01:16.715 NTFY_CLIENT NTFY0 nrReceivedMessages: 7
2024-10-29 19:01:16.715 NTFY_CLIENT NTFY0 lastReceivedTitle: Bla
2024-10-29 19:01:16.715 NTFY_CLIENT NTFY0 lastReceivedData: Your message content here
2024-10-29 19:01:16.715 NTFY_CLIENT NTFY0 lastReceivedRawMessage: {"id":"oU5iqrdSFoeY","time":1730224876,"expires":1730268076,"event":"message","topic":"FreundlichenGruesseAnAlleFHEMNutzer","title":"Bla","message":"Your message content here"}

Mit einem notify-device kann man dann wie folgt reagieren:
defmod GarageNotify notify NTFY0:lastReceivedData:.* {\
Log(1, "$NAME: $EVTPART1, $EVTPART2, $EVENT");;\
\
if ("$EVTPART1 $EVTPART2" eq "Garage zu") {\
Log(1, "Garage soll zu gemacht werden");;\
fhem("set NTFY0 publish Ich werde die Garage nun schliessen");;\
}\
\
if ("$EVTPART1 $EVTPART2" eq "Garage auf") {\
Log(1, "Garage soll auf gemacht werden");;\
fhem("set NTFY0 publish Ich werde die Garage nun oeffnen");;\
}\
}
attr GarageNotify room Experimente
Die zugehörigen Webhooks wären dann:
https://ntfy.sh/FreundlichenGruesseAnAlleFHEMNutzer/publish?message=Garage%20auf (https://ntfy.sh/FreundlichenGruesseAnAlleFHEMNutzer/publish?message=Garage%20auf)
https://ntfy.sh/FreundlichenGruesseAnAlleFHEMNutzer/publish?message=Garage%20zu (https://ntfy.sh/FreundlichenGruesseAnAlleFHEMNutzer/publish?message=Garage%20zu)

Testen kannst du das hier:
https://ntfy.sh/FreundlichenGruesseAnAlleFHEMNutzer (https://ntfy.sh/FreundlichenGruesseAnAlleFHEMNutzer)
https://demo-fhem.cooltux.net/fhem?detail=NTFY0 (https://demo-fhem.cooltux.net/fhem?detail=NTFY0) <-- Nur für begrenzte Zeit gültig
https://ntfy.sh/FreundlichenGruesseAnAlleFHEMNutzer/publish?message=Blubb&title=Bla (https://ntfy.sh/FreundlichenGruesseAnAlleFHEMNutzer/publish?message=Blubb&title=Bla)

Wie man die App Kurzbefehle dazu bringt eine URL abzurufen, kann man bei Apple nachlesen:
https://support.apple.com/de-de/guide/shortcuts/apd58d46713f/ios (https://support.apple.com/de-de/guide/shortcuts/apd58d46713f/ios)
Titel: Aw: Gerät über Internet schalten
Beitrag von: Torxgewinde am 31 Oktober 2024, 10:15:41
Ich stelle gerade fest, dass nach einigen Stunden das NTFY nicht mehr auf die Nachrichten reagiert hatte. Ich habe einen Bugeintrag eröffnet, mal gucken: https://rm.byterazor.de/issues/53
Edit #1: Laut GIT ist das Thema in dem richtigem NTFY Modul gelöst, danke @Byterazor!

Falls jemand diese, bei weitem nicht so schöne, Alternative ausprobieren möchte um die Wartezeit zu überbrücken, hier eine zusammengehämmerte, eigene Lösung:
defmod NTFY_RECEIVE dummy
attr NTFY_RECEIVE userattr URL last_seen_max_age
attr NTFY_RECEIVE URL wss:ntfy.sh:443/FreundlichenGruesseAnAlleFHEMNutzer/ws
attr NTFY_RECEIVE alias NTFY_RECEIVE
attr NTFY_RECEIVE devStateIcon opened:general_ok@green:stop disconnected:rc_STOP@red:start
attr NTFY_RECEIVE eventMap /cmd connect:start/cmd disconnect:stop/
attr NTFY_RECEIVE icon hue_filled_plug
attr NTFY_RECEIVE last_seen_max_age 600
attr NTFY_RECEIVE readingList cmd
attr NTFY_RECEIVE room Experimente
attr NTFY_RECEIVE setList cmd
attr NTFY_RECEIVE userReadings connect:cmd:.connect {\
    my $hash = $defs{$name};;\
    my $devState = DevIo_IsOpen($hash);;\
    return "Device already open" if (defined($devState));;\
    \
    $hash->{DeviceName} = AttrVal($name, "URL", "wss:ntfy.sh:443/FreundlichenGruesseAnAlleFHEMNutzer/ws");;\
    $hash->{header}{'Host'} = 'ntfy.sh';;\
    $hash->{header}{'User-Agent'} = 'FHEM';;\
    \
    $hash->{directReadFn} = sub () {\
        my $hash = $defs{$name};;\
        readingsBeginUpdate($hash);;\
        my $buf = DevIo_SimpleRead($hash);;\
        \
        # track activity, emtpy buffer normally is from ping/pongs\
        readingsBulkUpdate($hash, "last_seen", int(time()*1000));;\
        RemoveInternalTimer($name.'Timeout');;\
        my $timeoutFunction = sub() {\
            my ($arg) = @_;;\
            my $hash = $defs{$name};;\
            my $myCmd = ReadingsVal($name, "cmd", "disconnect");;\
            return if ($myCmd =~ /disconnect|stop/);;\
\
            Log3($name, 3, "$name: Timeout occured, restarting websocket...");;\
            DevIo_CloseDev($hash);;\
            readingsBeginUpdate($hash);;\
            readingsBulkUpdate($hash, "state", "disconnected");;\
            readingsBulkUpdate($hash, "cmd", "connect", 1);;\
            readingsEndUpdate($hash, 1);;\
        };;\
        InternalTimer(gettimeofday() + 120, $timeoutFunction, $name.'Timeout');;\
        \
        if(!defined($buf)) {\
            DevIo_CloseDev($hash);;\
            #readingsBulkUpdate($hash, "last_seen", 0);;\
            $buf = "not_connected";;\
        }\
        \
        # only update our reading if buffer is not empty and looks like it contains a message\
        if ($buf ne "" && \
            $buf =~ /^{.*"event":"message".*}$/) { ## check if buffer looks like JSON with msg\
            \
            # delete all our readings that begin with "ntfy_"\
            foreach my $reading (grep { $_ =~ /^ntfy_.*/ } keys %{$hash->{READINGS}}) {\
                readingsDelete($hash, $reading);;\
            }\
            \
            # parse as JSON, do not trust the input fully, thus sanitize buffer\
            my %res = %{json2nameValue($buf)};; #(https://wiki.fhem.de/wiki/MQTT2_DEVICE_-_Schritt_f%C3%BCr_Schritt#json2nameValue.28.29)\
            foreach my $k (sort keys %res) {\
                # only keep ASCII and a German Characters like Umlaute, sharp-S...\
                my $sanitizedValue = $res{$k} =~ s/[^[:ascii:]äöüÖÄÜß]/_/rg;; # 'r' flag prevents modifying the input string\
                readingsBulkUpdate($hash, "ntfy_".makeReadingName($k), $sanitizedValue);;\
            }\
        }\
        #readingsBulkUpdate($hash, "websocketData", "$buf") if ($buf ne "");;\
        Log3($name, 3, "$name: Rx: >>>$buf<<<") if ($buf ne "");;\
        \
        readingsEndUpdate($hash, 1);;\
    };;\
    \
    DevIo_OpenDev($hash,\
        0,      ## reopen flag\
        undef,  ## initFn, on success\
        sub() { ## callbackFn, on verdict, req. to make it a non-blocking call\
            my ($hash, $error) = @_;;\
            if ($error) {\
                Log(3, "$name: DevIo_OpenDev Callback: connection failed: $error");;\
                \
                my $timerFunction = sub() {\
                    my ($arg) = @_;;\
                    my $hash = $defs{$name};;\
                    my $devState = DevIo_IsOpen($hash);;\
                    readingsSingleUpdate($hash, "cmd", "connect", 1) if (!defined($devState));;\
                };;\
                \
                RemoveInternalTimer($name.'Timer');;\
                my $rwait = int(rand(20)) + 10;;\
                InternalTimer(gettimeofday() + $rwait, $timerFunction, $name.'Timer');;\
                readingsSingleUpdate($hash, "cmd", "reconnect attempt in $rwait seconds", 1);;\
            }\
        }\
    );;\
    \
    readingsBulkUpdate($hash, "state", "connecting...");;\
    return POSIX::strftime("%H:%M:%S",localtime(time()));;\
},\
disconnect:cmd:.disconnect {\
    my $hash = $defs{$name};;\
    RemoveInternalTimer($name.'Timer');;\
    RemoveInternalTimer($name.'Timeout');;\
    DevIo_CloseDev($hash);;\
    readingsBulkUpdate($hash, "state", "disconnected") if (!defined(DevIo_IsOpen($hash)));;\
    return POSIX::strftime("%H:%M:%S",localtime(time()));;\
},\
onDisconnect { ## check on each update if the connection is unintentionally broken...\
    my $myState = ReadingsVal($name, "state", "???");;\
    my $myData = ReadingsVal($name, "websocketData", "???");;\
    my $myCmd = ReadingsVal($name, "cmd", "disconnect");;\
    return if ($myState ne "disconnected" and $myData ne "not_connected");;\
    return if ($myCmd =~ /disconnect|stop/);;\
\
    my $timerFunction = sub() {\
        my ($arg) = @_;;\
        my $hash = $defs{$name};;\
        my $devState = DevIo_IsOpen($hash);;\
        readingsSingleUpdate($hash, "cmd", "connect", 1) if (!defined($devState));;\
    };;\
\
    RemoveInternalTimer($name.'Timer');;\
    my $rwait = int(rand(20)) + 10;;\
    InternalTimer(gettimeofday() + $rwait, $timerFunction, $name.'Timer');;\
    readingsBulkUpdate($hash, "cmd", "reconnect attempt in $rwait seconds");;\
    \
    return POSIX::strftime("%H:%M:%S",localtime(time()));;\
}
attr NTFY_RECEIVE verbose 1
attr NTFY_RECEIVE webCmd start:stop
Titel: Aw: Gerät über Internet schalten
Beitrag von: Torxgewinde am 31 Oktober 2024, 16:30:28
Wenn man ganz universell FHEM Befehle via NTFY senden möchte, sollte man diese unbedingt gegenprüfen, bevor man diese ausführt. Hier ein Vorschlag:

defmod GarageNotify notify NTFY0:lastReceivedData:.* {\
Log(1, "$NAME: >>>$EVENT<<<");;\
\
## remove the devicename from the $EVENT:\
my $cmd = $EVENT;;\
$cmd =~ s/^\Q$EVTPART0 \E//;;  # Remove $EVTPART0 from the beginning of $cmd\
Log(1, "$NAME: >>>$cmd<<<");;\
\
## Liste von erlaubten Befehlen als regulärer Ausdruck\
##   Zeilenende $ und Anfang ^ mit beachten,\
##   sonst sind unbeabsichtigte Befehlsketten/Escapes möglich\
my @commands = (\
'^set SteckdoseKuechenradio\.device o(?:ff|n)$',\
'^set G\.Ding1 on-for-timer [0-9]+$',\
'^set G\.Ding2 o(?:ff|n)$'\
);;\
\
##wandel von String in RegEx um\
@commands = map { qr{$_} } @commands;;\
\
##behalte was matcht, speichere die Arraylänge\
my $match = scalar grep { $cmd =~ $_ } @commands;;\
\
if ($match) {\
Log(1, "Führe FHEM command $cmd aus");;\
fhem("set NTFY0 publish FHEM sagt: Ich werde deinen FHEM Befehle nun ausfuehren");;\
fhem("$cmd");;\
}\
}
attr GarageNotify room Experimente
Titel: Aw: Gerät über Internet schalten
Beitrag von: hugo am 31 Oktober 2024, 19:04:58
Vielen Dank für die Antworten.
Werde jetzt erstmal die Version mit dem VPN testen, ob die Zeit passt.

@Torxgewinde, du hast dir ja viel arbeit gemacht. Jetzt brauche ich doch einige Zeit um das alles zu verstehen und zum Nachdenken. Nochmal Danke.

Gruß Josef
Titel: Aw: Gerät über Internet schalten
Beitrag von: andies am 17 November 2024, 21:31:51
Ich habe VPN auf der FRITZ!Box (WireGuard) und dann auf dem iPhone meiner Frau ,,VPN on demand" installiert. In FHEM wiederum habe ich FTUI mit einer Webseite, und die Adresse dieser Seite habe ich auf den Home-Bildschirm hinterlegt. Das muss man einmalig anlegen.

Klickt sie dann auf das Icon auf dem iPhone, dauert es etwa 1-2 Sekunden und dann sieht sie das Bild unten: Kaffeemaschine, Rolladen und Gartentor.

Wenn Du mehr wissen willst, gerne fragen! Der WAF ist extrem wichtig.
Titel: Aw: Gerät über Internet schalten
Beitrag von: Arminus am 20 November 2024, 16:10:09
Zitat von: andies am 17 November 2024, 21:31:51Wenn Du mehr wissen willst, gerne fragen! Der WAF ist extrem wichtig.

Hallo andies,

ich habe eine ähnliche Aufgabenstellung, kannst Du bitte Deine Lösung vorstellen?

Gruß
Arminus
Titel: Aw: Gerät über Internet schalten
Beitrag von: Arminus am 20 November 2024, 16:13:03
Zitat von: andies am 17 November 2024, 21:31:51Wenn Du mehr wissen willst, gerne fragen! Der WAF ist extrem wichtig.

Hallo andies,

ich habe eine ähnliche Aufgabenstellung, kannst Du bitte Deine Lösung vorstellen?

Gruß
Arminus
Titel: Aw: Gerät über Internet schalten
Beitrag von: Arminus am 20 November 2024, 16:14:30
Zitat von: andies am 17 November 2024, 21:31:51Wenn Du mehr wissen willst, gerne fragen! Der WAF ist extrem wichtig.

Hallo andies,

ich habe eine ähnliche Aufgabenstellung, kannst Du bitte Deine Lösung vorstellen?

Gruß
Arminus
Titel: Aw: Gerät über Internet schalten
Beitrag von: Bartimaus am 21 November 2024, 07:56:38
Moin,

ich habe genau so einen Knopf im FHEMWidget hinterlegt. Wenn man dem Entwickler nen Kaffee spendiert, bekommst Du einen verschlüsselten AWS-Zugang (ohne VPN etc) eingerichtet.
Funktioniert seit Jahren und möchten wir nicht mehr missen.

LG
Titel: Aw: Gerät über Internet schalten
Beitrag von: andies am 21 November 2024, 10:38:46
Zitat von: Arminus am 20 November 2024, 16:13:03ich habe eine ähnliche Aufgabenstellung, kannst Du bitte Deine Lösung vorstellen?
Es sind mehrere Schritte, die nicht alle direkt mit FHEM zu tun haben:
Ein Klicken auf diese Seite schaltet im Hintergrund VPN ein, verbindet sich mit dem Heimnetz, zeigt die Webseite index.html an und anklicken dort auf der Seite löst die in der Seite hinterlegten FHEM-Befehle aus.

Ich kann mal meine FTUI-Seite index.html unten auflisten, damit Du einen Anfangspunkt hast. Die anderen Sachen sind halt so, dass Du Dich einlesen und das händisch installieren musst.

<!DOCTYPE html>
<html>

<head>
    <!--
     /* FHEM tablet ui */
     /*
     * UI builder framework for FHEM
     *
     * Version: 2.5.*
     * URL: https://github.com/knowthelist/fhem-tablet-ui
     *
     * Copyright (c) 2015-2017 Mario Stephan <mstephan@shared-files.de>
     * Under MIT License (http://www.opensource.org/licenses/mit-license.php)
     *
     * - create a new folder named 'tablet' in /<fhem-path>/www
     * - copy all files incl. sub folders into /<fhem-path>/www/tablet
     * - add 'define TABLETUI HTTPSRV ftui ./www/tablet Tablet' in fhem.cfg
     * - Tadaaa! A new fhem ui in http://<fhem-url>:8083/fhem/tablet/
     */
    -->
    <link rel="apple-touch-icon" href="https://andreasloeffler.selfhost.bz:8084/fhem/ftui/apple-touch-icon.png"/>
   
    <meta name="apple-mobile-web-app-title" content="FHEM iOS">
    <meta name="gridster_disable" content="1">

    <!-- define your personal style here, it wont be overwritten  -->
    <!-- link rel="stylesheet" href="css/fhem-green-ui.css" / -->
    <!-- link rel="stylesheet" href="css/fhem-tablet-ui-user.css" / -->

    <script src="js/fhem-tablet-ui.js" defer></script>

    <title>FHEM iOS</title>
</head>

<body>
    <div class="gridster">
        <ul>
            <li data-row="1" data-col="1" data-sizey="1" data-sizex="1">
                <!-- place your widget here -->
                <header>Gartentor
                <div data-type="label" data-device="Gartentor" data-get="zustand"            
                data-substitution='["1","zu","0","OFFEN"]'></div>
</header>
                <div data-type="push"
                data-icon="fa-car"
                data-cmd="set"
                data-device="Came"
                data-set-on="right_button"
                class="grande">
                </div>
             <div data-type="push"
                data-cmd="set"
                 data-device="Came"
                 data-set-on="left_button"
                 data-icon="mi-directions_walk"
                 class="grande">
             </div>
            </li>
            <li data-row="1" data-col="2" data-sizey="1" data-sizex="1">
                <header>Kaffeemaschine</header>
                <!-- place your widget here -->
                        <div data-type="switch"
                        class="grande"
                        data-cmd="set"
                        data-device="HM_76A0B1_Sw"
                        data-icon="mi-local_cafe"
                        data-set-on="on"
                        data-set-off="off" >
                        </div>
                           <header>Garage</header>
                           <div data-type="switch"
                           class="grande"
                           data-icon="fa-align-justify"
                           data-cmd="set"
                        data-device="Garage"               
                           data-get="Tor"
                    data-get-off="OFF"
                    data-get-on="ON"
                    data-set-off="OFF" 
                           data-set-on="ON" >
                           </div>
                       
            </li>
            <li data-row="2" data-col="1" data-sizey="1" data-sizex="1">
                <header>Rolladen</header>
                <!-- place your widget here -->
                        <div data-type="push" data-device="Rolladen"
                            class="grande"
                            data-set-on="off"
                             data-icon="fa-chevron-up"
                             data-background-icon="fa-square-o">
                        </div>
                        <div data-type="push" data-device="Rolladen"
                            class="grande"
                            data-set-on="on"
                            data-icon="fa-chevron-down"
                            data-background-icon="fa-square-o">
                </div>
            </li>
            <li data-row="2" data-col="2" data-sizey="1" data-sizex="1">
                <!-- place your widget here -->
                <header>Esstisch </header>

                <div data-type="push"
                data-device="Dimmer"
                data-background-icon="fa-square-o"
                data-icon=""
                data-set-on="0"
                class="inline tall">
                <span class="small gray top">0</span></div>
               
                <div data-type="push"
                data-device="Dimmer"
                data-background-icon="fa-square-o"
                data-icon=""
                data-set-on="40"
                class="inline tall left-narrow-10">
                <span class="small gray top">40</span></div>
               
                <div data-type="push"
                data-device="Dimmer"
                data-background-icon="fa-square-o"
                data-icon=""
                data-set-on="70"
                class="inline tall left-narrow-10">
                <span class="small gray top">70</span></div>

    <div data-type="push"
                data-device="Dimmer"
                data-background-icon="fa-square-o"
                data-icon=""
                data-set-on="100"
                class="inline tall left-narrow-10">
                <span class="small gray top">100</span></div>

            </li>
        </ul>
    </div>
</body>

</html>
Titel: Aw: Gerät über Internet schalten
Beitrag von: hugo am 26 November 2024, 12:30:31
Hallo andies, ähnliches habe ich auch getestet. VPN on demand eingerichtet und ein Lesezeichen auf den Home-Bildschirm gelegt. Funktioniert soweit.
Jetzt wollte ich einen Kurzbefehl erstellen und diesen Ausführen. Der Befehl ist der gleiche wie in dem Lesezeichen. Bei der Ausführung mit dem Kurzbefehl erhalte ich die Meldung, dass ich nicht mit dem Internet verbunden bin. VPN on demand wurde aktiviert, aber dann ist Schluss.
Wenn ich im WLAN bin funktioniert der Kurzbefehl.

Funktioniert der Kurzbefehl nur im WLAN?
http://fhemflur.fritz.box:8083/fhem?cmd=set%20myshelly7_0%20toggle

Gruss Josef
Titel: Aw: Gerät über Internet schalten
Beitrag von: Jamo am 26 November 2024, 12:33:26
Vielleicht klappt die Namensauflösung nicht. Mal "fhemflur.fritz.box" durch die IP Adresse ersetzen.
Titel: Aw: Gerät über Internet schalten
Beitrag von: andies am 26 November 2024, 12:34:36
Genau, am WLAN liegt es definitiv nicht.
Titel: Aw: Gerät über Internet schalten
Beitrag von: hugo am 26 November 2024, 17:35:59
Zitat von: Jamo am 26 November 2024, 12:33:26Vielleicht klappt die Namensauflösung nicht. Mal "fhemflur.fritz.box" durch die IP Adresse ersetzen.

Durch die Angabe mit *.Fritz.box wird automatisch VPN on demand aktiviert.

Wie geschrieben im WLAN funktioniert es.
Titel: Aw: Gerät über Internet schalten
Beitrag von: Jamo am 26 November 2024, 18:54:39
Hast Du evtl. in deiner FHEMWEB Instanz das attr 'allowfrom' gesetzt, und ueber VPN bekommt dein Phone eine andere als die allowed allowfrom IP Adressen?
Titel: Aw: Gerät über Internet schalten
Beitrag von: andies am 26 November 2024, 18:58:11
Und kannst du nach Verbindung mit VPN dein FHEM aufrufen? Außerhalb des WLAN?
Titel: Aw: Gerät über Internet schalten
Beitrag von: hugo am 26 November 2024, 20:54:38
Ja, der Aufruf funktioniert auch ohne WLAN. Nur wenn ich das ganze in einen Kurzbefehle packe funktioniert es nicht.
Titel: Aw: Gerät über Internet schalten
Beitrag von: andies am 27 November 2024, 11:09:40
Du musst mal genauer beschreiben, was da passiert. Sonst kapieren wir das nicht:
Titel: Aw: Gerät über Internet schalten
Beitrag von: hugo am 27 November 2024, 12:36:52
Hallo andies, ich versuche es nochmal genau zu schreiben.

VPN on deman ist eingerichtet und funktioniert.


Also alles funktioniert bisher wie vorgestellt.

Aber jetzt wollte ich es noch einfacher gestalten und diesen Schaltvorgang in einen Apple Kurzbefehl hinter legen.
Kurzbefehl Inhalt vonWEBseite abrufen; "http://fhemflur.fritz.box:8083/fhem?cmd=set%20myshelly7_0%20toggle"


Also es liegt definitiv am Kurzbefehl und VPN, wenn das Iphone nicht mit dem WLAN verbunden ist.

Ich hoffe es dargelegt zu haben wo das Problem liegt.

Werde jetzt den Weg über FTUI (Version 3) gehen. Kurzbefehl wäre schon super gewesen.

Vielen Dank für eure Ideen.

Gruß Josef
Titel: Aw: Gerät über Internet schalten
Beitrag von: andies am 27 November 2024, 12:56:13
OK, das scheint ein Apple-Problem zu sein. Kurzbefehle nutze ich nicht, daher kann ich hier leider nicht helfen.
Titel: Aw: Gerät über Internet schalten
Beitrag von: passibe am 27 November 2024, 14:50:44
Zitat von: hugo am 27 November 2024, 12:36:52Es besteht anscheinend keine Verbindung zum Internet
Hmm. Diese Fehlermeldung ist komisch – eigentlich sollte da erst die DNS-Auflösung scheitern und nicht "schon" die "Verbindung zum Internet" (was auch immer das heißen mag).
Bei mir kommt ohne VPN und mit Kurzbefehl auf einen Hostnamen, der nur intern aufgelöst wird:
ZitatA server with the specified hostname could not be found.
Diese Fehlermeldung hätte ich jetzt auch bei dir erwartet.

Wieso der Kurzbefehl das anders handhabt als Safari erschließt sich mir nicht, eigentlich sollte das nicht der Fall sein (bzw. ist es z.B. bei mir auch nicht).

Ich benutze aber auch nicht "Inhalt der Webseite von URL abrufen" mit dem Safari-Icon, sondern "Inhalte von URL abrufen" mit einem grünen Pfeil-Icon (siehe Screenshot anbei – "Text" ist dabei die interne URL zu FHEM). Vielleicht liegt da das Problem? Was passiert, wenn du das auch benutzt?

Vielleicht noch zum Ausprobieren: Wenn du diese on-demand-Geschichte mal ausschaltest und das VPN manuell aktivierst – funktioniert es dann?
Titel: Aw: Gerät über Internet schalten
Beitrag von: hugo am 27 November 2024, 18:21:50
Definitiv, wenn ich VPN auch mit der Hand aktiviere und das IPHONe zeigt VPN verbunden funktioniert der Kurzbefehl nicht.

ZitatIch benutze aber auch nicht "Inhalt der Webseite von URL abrufen" mit dem Safari-Icon, sondern "Inhalte von URL abrufen" mit einem grünen Pfeil-Icon (siehe Screenshot anbei – "Text" ist dabei die interne URL zu FHEM). Vielleicht liegt da das Problem? Was passiert, wenn du das auch benutzt?
Habe auch das  "Inhalte von URL abrufen" getestet ohne Erfolg.
VPN ohne "on demand" und von Hand aktiviert. Immer die selbe Fehlermeldung.

Habe jetzt FTUI eine Seite hergerichtet und dies funktioniert. Sind halt ein paar Klicks mehr.

Gruß Josef
Titel: Aw: Gerät über Internet schalten
Beitrag von: ReneR1986 am 01 Dezember 2024, 10:35:50
Zitat von: hugo am 27 Oktober 2024, 08:26:12Hallo zusammen,
jetzt habe ich schon viel gelesen, aber noch keine gute passende Lösung gefunden.
Am liebsten möchte meine Frau einen Knopf :) (App) auf dem Handy (IPhone) haben und dann nur ein Device schalten können z.b. Garagentor.
Der Zugriff sollte sicher sein, keine Portweiterleitung. Könnte mir als Verbindung VPN on demand vorstellen, dass sich aber nach dem senden des Befehls wieder trennt.

Hat jemand eine solche Lösung oder einen Tipp wie ich das lösen könnte.

Viel Dank für eure Ideen.

Gruß Josef

Vielleicht noch ein weiterer Lösungsansatz.
Ich nutze für manche Szenarien einen externen MQTT Broker, wie z.B. von HiveMQ. Hier gibt es auch eine kostenlose Variante (auch verschlüsselt usw.).
Ich habe hierzu in FHEM einen MQTT2_CLIENT definiert der sich mit HiveMQ verbindet. Ein entsprechendes MQTT2_DEVICE subscribed dann das gewünschte MQTT Topic.
Ein DOIF reagiert dann entsprechend.
Für das Smartphone gibt es dann diverse Apps als MQTT Clients, die dann auf das MQTT Topic publishen.
Leider habe ich keine App gefunden, bei der man z.B. ein Widget o.ä. erstellen kann, damit es wirklich nur ein Klick ist.
Als Lösung habe ich mir (leihenhaft) eine mini Android App geschrieben, die sich einfach kurz mit dem MQTT Broker (HiveMQ) verbindet und dann auf das Topic schreibt...

Titel: Aw: Gerät über Internet schalten
Beitrag von: Prof. Dr. Peter Henning am 01 Dezember 2024, 11:20:05
Der Instant Messenger Telegram bietet mit den "Telegram Keyboards" tatsächlich Buttons und ganze Menüstrukturen, ist ferner auf allen Plattformen kostenfrei verfügbar. Telegram ist darüber hinaus - sehr zum Ärger aller Sicherheitsbehörden in der ganzen Welt - abhörsicher, und die Betreiber haben eine wundervolle Allergie gegen die Zusammenarbeit mit staatlichen Stellen.

Ich nutze Telegram seit etlichen Jahren, um von unterwegs Informationen aus dem Haus abzurufen und bestimmte Dinge zu steuern.

Natürlich immer "Cum grano salis": Beispielsweise kann ich darüber zwar den Sicherheitsstandard des Hauses erhöhen (etwa von "ungesichert" auf "gesichert" oder "geschützt" (Alarmanlage an)), aber nicht verringern.

Ebenfalls habe ich das an meinen Chatbot angekoppelt, kann also auch (fast) beliebige Sprachbefehle erteilen.

Selbstverständlich sind nur bestimmte Telegram-Benutzer überhaupt mit solchen Rechten versehen. Außerdem kann man das natürlich so konfigurieren, dass diese unterschiedliche Rechte haben.

Ein Beispiel dazu habe ich in meinem letzten FHEM-Buch ausführlich beschrieben, die entsprechenden Seiten habe ich hier zur freien Verwendung angehängt.

Ein kleines Update zum Buch ist nötig: Die Server von Telegram stehen nicht mehr in Russland, und die Betreiber sind nach Dubai geflohen. Einer dieser Betreiber sollte voriges Jahr in Frankreich festgenommen werden, u.a. wegen der Begünstigung diverser Internet-Verbrechen. War aber sehr schnell wieder frei. Und klar: Wenn man eine wirklich sichere Plattform betreibt, ärgert das eben den Staat. Finde ich gut.

LG

pah
Titel: Aw: Gerät über Internet schalten
Beitrag von: Beta-User am 01 Dezember 2024, 12:06:04
Zitat von: Prof. Dr. Peter Henning am 01 Dezember 2024, 11:20:05Ein kleines Update zum Buch ist nötig: Die Server von Telegram stehen nicht mehr in Russland, und die Betreiber sind nach Dubai geflohen.
Danke für das update! War mir nicht bekannt, aber ab jetzt nutze ich Telegram wieder ohne größere Bauschschmerzen :) ...

Zitat von: Prof. Dr. Peter Henning am 01 Dezember 2024, 11:20:05Ebenfalls habe ich das an meinen Chatbot angekoppelt, kann also auch (fast) beliebige Sprachbefehle erteilen.
Dto., wobei das bei mir (textbasiert) über RHASSPY läuft, und man eben relativ frei praktisch alles machen kann, was RHASSPY kann/kennt. (Daneben gibt es noch ein paar vordefinierte Dialoge mit msgDialog).
Titel: Aw: Gerät über Internet schalten
Beitrag von: Prof. Dr. Peter Henning am 01 Dezember 2024, 13:56:44
Ich meinte, dass ich den Chatbot auch an Telegram angekoppelt habe...

Was mir noch nicht gelungen ist: Telegram Voice Message an eine Spracherkennung zu senden, und dann weiter auszuwerten. Sollte aber prinzipiell gehen.

Betreffend die Betreiber: https://www.spiegel.de/netzwelt/apps/telegram-das-sagt-gruender-pawel-durow-nach-seiner-festnahme-a-5d29d399-c128-4fa2-ae3c-a6f43f4b8faa

LG

pah
Titel: Aw: Gerät über Internet schalten
Beitrag von: Torxgewinde am 01 Dezember 2024, 21:19:41
Zitat von: Prof. Dr. Peter Henning am 01 Dezember 2024, 11:20:05Telegram ist darüber hinaus - sehr zum Ärger aller Sicherheitsbehörden in der ganzen Welt - abhörsicher, und die Betreiber haben eine wundervolle Allergie gegen die Zusammenarbeit mit staatlichen Stellen.

Das stimmt so nicht, weder ist die Verschlüsselung besonders gut, noch verweigert Telegram Behörden die Kooperation, siehe dazu:

https://www.heise.de/hintergrund/Faktencheck-Telegram-ist-weniger-privat-als-andere-Messenger-9860521.html
ZitatLaut Spiegel Online war auf Telegrams Webseite in der Vergangenheit außerdem zu lesen, dass Telegram keine Nutzerdaten an Dritte weitergebe, "einschließlich aller Regierungen". Von diesem Kurs ist Telegram allerdings schon vor Jahren zumindest teilweise abgerückt: Nach Informationen, die Spiegel Online 2022 veröffentlichte, haben die Betreiber offenbar Chatinhalte an das BKA gegeben. Heute ist der Satz nicht mehr auf der Webseite aufzufinden.
...
E2E-Verschlüsselung ist nicht der Default
...
Alle Nachrichten, die in Channels, Gruppen und auch in regulären, nicht explizit "geheimen" Chats zwischen zwei Teilnehmern verschickt werden, landen auf Telegrams Servern. Sie werden also nicht direkt verschlüsselt zwischen den Geräten und Apps der Chatteilnehmer verschickt, sondern gehen den Umweg über die Server des Anbieters.
...
Hinzu kommt, dass die von Telegram eingesetzte, optional für private Chats einstellbare Ende-zu-Ende-Verschlüsselung jener der Konkurrenz offenbar technisch unterlegen ist. Signal und WhatsApp setzen auf etablierte Double-Ratchet-Verschlüsselung. Telegram nutzt dagegen ein selbst entwickeltes Protokoll namens MTProto, das in der Vergangenheit bereits vielfach kritisiert wurde,
...
Titel: Aw: Gerät über Internet schalten
Beitrag von: Beta-User am 02 Dezember 2024, 10:32:08
Zitat von: Prof. Dr. Peter Henning am 01 Dezember 2024, 13:56:44Was mir noch nicht gelungen ist: Telegram Voice Message an eine Spracherkennung zu senden, und dann weiter auszuwerten. Sollte aber prinzipiell gehen.
Nie darüber nachgedacht... Kurz mal im Rhasspy-Umfeld umgeschaut:

https://rhasspy.readthedocs.io/en/latest/speech-to-text/#remote-http-server:
ZitatUses a remote HTTP server to transform speech (WAV) to text. The /api/speech-to-text endpoint from Rhasspy's HTTP API does just this, allowing you to use a remote instance of Rhasspy for speech recognition.
Damit sollte man den Input als Text wiederbekommen.

Auch z.B. https://github.com/rhasspy/rhasspy-asr-kaldi könnte man wohl auch einfach mit einer WAV-file füttern.

Dann gäbe es noch https://github.com/koenvervloesem/hermes-audio-server/blob/master/src/hermes_audio_server/recorder.py. Das sendet einfach den WAV-Stream in "CHUNKS" (20ms?) an die dort konfigurierte Rhasspy-NLU, wenn ich das richtig verstanden habe; könnte man z.B. als Modell verwenden, um dasselbe in Perl aus FHEM heraus zu machen.

Komme aber definitiv nicht dazu, mir das in näherer Zukunft mal näher zu Gemüte zu führen...
Titel: Aw: Gerät über Internet schalten
Beitrag von: Prof. Dr. Peter Henning am 02 Dezember 2024, 14:50:29
Zitat von: Torxgewinde am 01 Dezember 2024, 21:19:41Das stimmt so nicht, weder ist die Verschlüsselung besonders gut, noch verweigert Telegram Behörden die Kooperation, siehe dazu:
Na, da widerspreche ich aber.

Klar ist, dass die E2E-Verschlüsselung auch eingeschaltet sein muss.
Das Protokoll kann nach wie vor als sicher gelten. Die "Kritik" hat dazu geführt, dass die aufgefundenen Schwachstellen beseitigt worden sind, siehe https://mtpsym.github.io/

Ich habe nichts von "Verweigerung" geschrieben. Den genauen Umfang der "Kooperation mit Behörden" im Falle von "Notfallersuchen" kann man hier genauer nachlesen: https://www.tagesschau.de/investigativ/wdr/telegram-126.html

1998 habe ich eine Tagung organisiert, bei der sich 4 verschiedene Bundesministerien darüber gestritten haben, ob man - so wie in Frankreich - die starke Kryptografie unter Strafe stellen solle. Ergebnis: Nein, in Deutschland nicht. Kann man hier nachlesen:

Dimensionen der Zukunft - Kryptoregulierung als Standortfaktor
Das Parlament Nr.23 (1998) 15, Bundeszentrale für politische Bildung, Bonn.
Erratum (Korrektur Autorenname) Nr.24 (1998) 17

In Frankreich ist das eine andere Sache, ich gehe davon aus, dass die französischen Behörden derzeit massiv Druck auf Durow ausüben. Das ist doch auch verstörend, dass Bürger ohne Abhörmöglichkeit kommunizieren ...

LG

pah
Titel: Aw: Gerät über Internet schalten
Beitrag von: Torxgewinde am 05 Dezember 2024, 07:59:25
Scheinbar gibt Telegram nun auch bereits nochmal nach (https://www.bbc.com/news/articles/c5yd35l0r91o).

Die Kritikpunkte:
- E2E muss überhaupt erstmal aktiviert werden.
- E2E geht nicht überall.
- Telegram wird gerade zur Zeit beeinflusst und es funktioniert.

Die Reputation von Telegram, besonders abhörsicher zu sein, ist spätestens in 2024 nicht gerechtfertigt. Das können andere Messenger besser.

Wieder zurück zu dem eigentlichem Topic: Um ein Gerät zu schalten, sollte man sich nicht extra noch Telegram angucken. Es gibt viele, dann doch bessere, Alternativen.
Titel: Aw: Gerät über Internet schalten
Beitrag von: Beta-User am 05 Dezember 2024, 08:56:30
Zitat von: Torxgewinde am 05 Dezember 2024, 07:59:25Es gibt viele, dann doch bessere, Alternativen.
Welcher Messenger kann noch sowas wie inline-Keyboards?

Jedenfalls finde ich ein "Nachgeben" zu dem konkreten Thema jetzt nicht unbedingt verwerflich; man kann das zwar als ersten Schritt in eine "überwachte" App sehen, aber m.E. ist das eigentlich eine Selbstverständlichkeit, dass man so ein Schmuddelzeug eben nicht haben will und dafür auch keine Infrastruktur bereitstellt. Alles andere wird man sehen, kein Messenger-Dienst ist m.E. davor gefeit, dass nicht irgendwann irgendjemand beschließt, irgendwelche grundlegenden Dinge zu ändern.
Titel: Aw: Gerät über Internet schalten
Beitrag von: Torxgewinde am 05 Dezember 2024, 22:08:33
Ich verstehe durchaus, das Telegram schicke Features hat, die Einige auch sicher ganz toll finden. Der Messenger ist dadurch zwar beliebt und schick, aber immer noch kein besonders abhörsicherer Messenger.
Titel: Aw: Gerät über Internet schalten
Beitrag von: Prof. Dr. Peter Henning am 06 Dezember 2024, 17:09:40
Nur abgesehen davon, dass "BESONDERS abhörsicher" eine Charakterisierung ist, die Du soeben selbst erfunden hast und als einziger verwendest, wird das doch jetzt sehr Off-Topic. Ich bleibe bei meiner unten geäußerten Einschätzung:

Mit den Telegram Keyboards kann man sehr bequem, sicher und ohne spezialisierte App Geräte über das Internet schalten.

Und es ist selbstverständlich, dass man aus der Entfernung des Internet NIEMALS, NIE, NEVER durch einfachen Knopfdruck irgendwelche sicherheitskritischen Vorgänge auslöst. 

Was als "sicherheitskritisch" angesehen wird, muss man selbst festlegen. Schönes Beispiel: Ich kann problemlos meine DoorPi-Türsprechanlage (siehe im Wiki) mit Audio und Video auf mein Handy weiterschalten. Jetzt bin ich im Urlaub in Ougadougou, und der Paketbote klingelt. Mach ich dem dann die Hoftür auf? Und gilt das auch, wenn ich im Auto sitze und in 3 Minuten daheim bin?

LG

pah
Titel: Aw: Gerät über Internet schalten
Beitrag von: Torxgewinde am 09 Dezember 2024, 08:10:52
In diesem Fall wird gerade mit schicken Features vs. grundlegender Sicherheit argumentiert - sollte man abwägen was man davon in seinen eigenen Alltag lässt und dann aber auch anderen empfiehlt.

Zudem mangelt es ja nicht an Vorschlägen wie man es sonst nach außen sicher öffnen kann.
Titel: Aw: Gerät über Internet schalten
Beitrag von: Prof. Dr. Peter Henning am 09 Dezember 2024, 09:51:17
Eben. Aus dem Grund habe ich ja die Verwendung von Telegram Keyboards empfohlen. ;D

LG

pah