Logitech G Tastatur - Senden von Befehl direkt an FHEM

Begonnen von 87insane, 26 Dezember 2018, 16:39:44

Vorheriges Thema - Nächstes Thema

87insane

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?

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

87insane

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......

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

87insane

#5
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

CoolTux

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.

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

87insane

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


CoolTux

Unter Windows? Keine Ahnung. Du brauchst ein Shellprogramm womit man url Aufrufe machen kann, oder ein telnetclient für die Shell.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

#9
Simpler Aufruf in Powershell Quelle
# 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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz