FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: 87insane am 26 Dezember 2018, 16:39:44

Titel: Logitech G Tastatur - Senden von Befehl direkt an FHEM
Beitrag von: 87insane am 26 Dezember 2018, 16:39:44
Hallo zusammen und ich hoffe ihr hattet schöne Feiertage....

aktuell versuche ich mit meiner G15 Tastatur, einen Befehl direkt an Fhem zu senden. Wenn ich z.B. https://raspi:8083/fhem?cmd.ESPEasy_az_licht_strom_rechts=set%20ESPEasy_az_licht_strom_rechts%20on in meinem Browser eingebe, geht das entsprechende Licht an.

Ich würde aber gerne auf die Taste der Tastatur drücken und OHNE lästigem Webbrowser Aufruf das ganze gestalten. Leider kenne ich die Schnittstellen
in FHEM nicht. Ggf. gibt es ja sogar ein Plugin für so was.

Wunsch am Ende: Man drückt z.B. G1 und es geht xy an/aus. Dies aber ohne Browser. Wenn man z.B. etwas am spielen ist und möchte mehr Licht haben,
drückt man die gewünschte Taste und das Licht geht an/aus. Aber ohne das man aus dem Spiel fliegt und der Befehl wird irgendwie im Hintergrund gesendet.

Jemand ne Idee?
Titel: Antw:Logitech G Tastatur - Senden von Befehl direkt an FHEM
Beitrag von: CoolTux am 26 Dezember 2018, 17:05:40
Binde die Taste an ein Skript. Bash oder Perl und lasse im Skript mittels curl oder gerne auch nc einen entsprechenden Befehl aus führen.
Titel: Antw:Logitech G Tastatur - Senden von Befehl direkt an FHEM
Beitrag von: Otto123 am 26 Dezember 2018, 17:38:47
Den csrf Token hast Du ja offenbar deaktiviert, aber mit findest Du Bash Code hier:
https://wiki.fhem.de/wiki/CsrfToken-HowTo

Wie das mit der Taste geht - da bin ich mal gespannt :)

Gruß Otto
Titel: Antw:Logitech G Tastatur - Senden von Befehl direkt an FHEM
Beitrag von: 87insane am 26 Dezember 2018, 19:16:38
Hey und danke schon mal!

@CoolTux: Das muss ich zur hälfte erst mal googlen. Einen einzigen Satz mit so viel spanisch......

@Otto123: Du bist hier auch immer und überall. Dein Haus will ich mal sehen. Ne noch besser, deine Bastel Ecke!
csrf habe ich aus, ja! Mich hat es genervt. An die Geräte hinter der Firewall usw kommt so oder so keiner.

Die Tasten bei Logitech kann man mit fast allem versehen. Mein Problem ist nur, es soll im Hintergrund bleiben. Man könnte es also im billigstem Fall einfach in einer Prozess Exe bündeln und im Hintergrund ausführen. Aber um was vernünftiges zu haben, frage ich hier......
Titel: Antw:Logitech G Tastatur - Senden von Befehl direkt an FHEM
Beitrag von: Otto123 am 26 Dezember 2018, 19:23:27
Zitat von: 87insane am 26 Dezember 2018, 19:16:38
An die Geräte hinter der Firewall usw kommt so oder so keiner.
Falsch verstanden! Du bist das "Problem" wenn Du in einem Browser das "Internet" und dein FHEM-Web offen hast - so habe ich das verstanden.  :-[

Du redest mit der Tastatur jetzt davon, dass Du sie an deinem Arbeitsplatz hast und nicht am Linux/FHEM Server? Welches System?
Ich mache auch "csrf Token" mit Powershell :)

Gruß Otto
Titel: Antw:Logitech G Tastatur - Senden von Befehl direkt an FHEM
Beitrag von: 87insane am 26 Dezember 2018, 19:34:49
Hey,

ne neeee!
Das ist natürlich bedingt meiner Erklärung.

Ich sitze mit der Tastatur intern und sie ist an einem windows 10 System. Alles intern.  Dient nur dem Zweck, den ich auch beschrieb. Wenn ich mal ne runde zeit habe zum spielen und es wird dunkel.....

Das wäre schön, wenn es per Tastendruck hell werden würde. Ja natürlich könnte ich 2m zum schalter laufen. Aber warum sollte ich das tun wenn ich fhem hab :)

Edit: das win System ist nicht der fhem Server. Der ist auf einem raspi mit Linux.


Gesendet von meinem LG-H850 mit Tapatalk
Titel: Antw:Logitech G Tastatur - Senden von Befehl direkt an FHEM
Beitrag von: CoolTux am 26 Dezember 2018, 19:35:42
Ich gehe mal davon aus das Du Dich zumindest etwas eingearbeitet hast zu Deiner Tastatur und den Multimedia Tasten. Es gibt immer ein Tool womit man einstellen kann was genau bei welcher Taste passieren soll oder zu mindest welchen Browser er zum Beispiel starten soll. Genau so kann man auch einstellen welchen command also welches Kommando er ausführen soll. Da kann man dann einen Pfad mit ausführbaren Shellscript (powershell für Windows) mit an geben.
Ich selbst kenne es nur für Linux und den großen Desktop-Umgebungen. Sollte aber wohl unter Windows nichts anderes sein.

Titel: Antw:Logitech G Tastatur - Senden von Befehl direkt an FHEM
Beitrag von: 87insane am 26 Dezember 2018, 19:38:12
Jau...genau das ist die Art es zu versuchen. Bin zwar ITler aber kein Programmierer. Wie kann man fhem das denn sagen per Shell? Per Browser ist ja quasi selbst erklärend.

Gesendet von meinem LG-H850 mit Tapatalk

Titel: Antw:Logitech G Tastatur - Senden von Befehl direkt an FHEM
Beitrag von: CoolTux am 26 Dezember 2018, 19:46:29
Unter Windows? Keine Ahnung. Du brauchst ein Shellprogramm womit man url Aufrufe machen kann, oder ein telnetclient für die Shell.
Titel: Antw:Logitech G Tastatur - Senden von Befehl direkt an FHEM
Beitrag von: Otto123 am 26 Dezember 2018, 21:25:33
Simpler Aufruf in Powershell Quelle (https://heinz-otto.blogspot.com/2017/03/csrf-token-und-fhem.html)
# Wenn man mehr aus dem Request herausziehen will, erstmal in ein Objekt
# UseBasicParsing verhindert die Verwendung des IE und dessen Securityabfragen
$wp=Invoke-WebRequest -UseBasicParsing -Uri "http://<host>:8083/fhem?XHR=1"
$token = $wp.Headers["X-FHEM-csrfToken"]
# Alternativ nur der Token
$token = Invoke-WebRequest -UseBasicParsing -Uri "http://<host>:8083/fhem?XHR=1" | %{$_.Headers["X-FHEM-csrfToken"]}
$URL="http://<host>:8083/fhem?cmd=set%20Aktor1%20on&fwcsrf=$token"
Invoke-WebRequest -UseBasicParsing -Uri $URL | out-null

Das hab ich mittlerweile auch noch etwas eleganter ...
Da brauch ich etwas Zeit zum suchen.
Gefunden, als Powershell Script, Erklärung in der Hilfe:
<#
.SYNOPSIS
The script set device in FHEM
.DESCRIPTION
    Die Parameter können per Pipeline in beliebiger Länge und Art oder für den set Befehl per Parameter Name und Event übergeben werden.
    Dabei ist es egal ob die Array Form oder einfach der Befehl als String mit Leerzeichen übergeben wird.
    Der Invoke-WebRequest Befehl codiert den Request immer richtig.
    Im Programm wird zur Erkennung mit %20 codiert, das ist eigentlich nicht nötig!
    Wird der Parameter Port nicht angegeben wird das Standardport 8083 verwendet
.EXAMPLE
    "set","Aktor01","toggle" | .\SetDeviceFhem.ps1 -Hostname "192.168.178.80"
.EXAMPLE
    "set Aktor01 toggle" | .\SetDeviceFhem.ps1 -Hostname "192.168.178.80"
.EXAMPLE
    $("set","Aktor01","toggle") | .\SetDeviceFhem.ps1 -Hostname "192.168.178.80"
.EXAMPLE
    .\SetDeviceFhem.ps1 -Hostname "192.168.178.80" -Verbose -Name Actor -Event "blink 3 3"
#>

#region Params
param(
[Parameter(Mandatory = $false, ValueFromPipeline = $true)]
        [string[]]$list,
        $Hostname,
        $Port="8083",
        $Name,
        $Event
)
#endregion

begin{ # Der Begin Block wird einmal pro Aufruf durchlaufen
    $output = "";
    if(-not ($Hostname -match ":")) { $Hostname=$Hostname + ":" + $Port}
    $wp=Invoke-WebRequest -UseBasicParsing -Uri "http://$Hostname/fhem?XHR=1"
    $token = $wp.Headers["X-FHEM-csrfToken"]
    write-verbose $Hostname
}

process{ # Der Process Block wird für jedes Pipeline Element durchlaufen
try{

    # Test ob Pipeline leer, wenn ja Parameter Name und Event verarbeiten
    if (-not $list){$output = "set%20" + $Name + "%20" + $Event +"%20"}

    else {
        # Alle Elemente aus Pipeline holen
        foreach ($element in $list) { $output += $element + "%20"}
        }
    }
catch { }
}
end{ # Der End Block wird genau einmal durchlaufen

    $output = $output.Substring(0, $output.Length - 3) # Letztes %20 löschen
    Write-Verbose $output
    $URL="http://$Hostname/fhem?cmd=$output&fwcsrf=$token"
    Invoke-WebRequest -UseBasicParsing -Uri $URL | out-null
}


Gruß Otto