Hallo,
Kann man mit FHEM bei einer FRITZ!Box 6591, die mit FBAHAHTTP eingebunden ist, die LEDs der Fritzbox an und ausschalten?
Wenn ja, wie?
Neugierige Grüße,
Andreas
Hallo Andreas,
über FBAHAHTTP wüsste ich nicht, aber über das Fritzbox Modul könntest Du mit TR064 die LEDs beim Neustart der Box blinkern lassen ;)
Spaß beiseite: Es soll über die lua Schnittstelle gehen. http://fritz.box/system/led_display.lua
Das Modul hat zwar lua aber ich denke nicht alles. Ich weiß Jörg hat da mal was gebastelt für Profile https://forum.fhem.de/index.php?topic=109689.0
Vielleicht geht es irgendwie? Im IPPhone Forum gibt es auch ein Script
Gruß Otto
Das sollte ja über lua gehen:
http://fritz.box/data.lua?sid=<SID>&led_display=<0|1|2>&apply=&oldpage=/system/led_display.lua
Das SID kriegt man aus dem FritzBox Modul:
$defs{FritzBox}{fhem}->{sid}
Vielen Dank für den Input!
Kann man eine URL wie diese
http://fritz.box/data.lua?sid=<SID>&led_display=<0|1|2>&apply=&oldpage=/system/led_display.lua
einfach in einen FHEM-Befehl einbauen?
Zitat von: amenomade am 29 September 2020, 19:44:31
Das sollte ja über lua gehen:
http://fritz.box/data.lua?sid=<SID>&led_display=<0|1|2>&apply=&oldpage=/system/led_display.lua
Das SID kriegt man aus dem FritzBox Modul:
$defs{FritzBox}{fhem}->{sid}
Man keine URL mittels GetFileFromURL() (https://wiki.fhem.de/wiki/HttpUtils#GetFileFromURL) aufrufen.
Ansonsten wäre es mit einem HTTPMOD machbar.
So ein HTTPMOD:
defmod FBleds HTTPMOD http://fritz.box/system/led_display.lua 0
attr FBleds replacement01Mode expression
attr FBleds replacement01Regex %%sid%%
attr FBleds replacement01Value { $defs{FritzBox}{fhem}->{sid} }
attr FBleds set01Data sid=%%sid%%&led_display=$val&apply=
attr FBleds set01Max 2
attr FBleds set01Min 0
attr FBleds set01Name ledValue
attr FBleds verbose 5
schickt den richtigen Befehl bei "set FBleds ledValue 2":
2020.09.30 20:39:17 4: FBleds: HandleSendQueue sends set01 with timeout 2 to http://fritz.box/system/led_display.lua,
data: sid=9f10682af7a6c797&led_display=2&apply=, No Header
(Voraussetzung ist ein funktionierendes FRITZBOX Device mit User und pw gesetzt, damit man eine gültige sid kriegt)
Allerdings scheint es bei mir keine Wirkung auf den LEDs zu haben. ledValue 2 sollte die LEDs ausschalten.
Das ist aber was im Skript hier z.B. gemacht wird https://github.com/jhubig/FritzBoxShell/releases/tag/v1.0.5
Vielleicht kannst Du erstmal den Skript testen: https://github.com/jhubig/FritzBoxShell/wiki/Installation,-Configuration-&-First-test
Wenn es geht, dann gucken wir weiter mit einem HTTPMOD. Wenn es nicht geht... weiss ich nicht.
Ja, leider hat das auch bei mir/meiner FB keine Wirkung...
Muss das Script installiert/vorhanden sein?
Wenn ich die Beiträge in diversen Foren dazu richtig verstehe, hat AVM da was in der Firmware / Funktion geändert.
Es gibt aber ein php Script (https://www.mengelke.de/Projekte/FritzBox-Tools) was aktuell noch entwickelt wird - das sollte man mal testen.
Gruß Otto
Kooles Skript!
LED Status ermitteln:
get <fritzbox> luaQuery box:settings/led_display
Und die interessante Zeile (LED setzen):
request('POST','/data.lua',"sid=$sid&apply=&page=led&ledDisplay=$led[0]&envLight=$led[1]&dimValue=$led[2]"); // LED schalten:
Also: folgendes HTTPMOD schaltet mit "set FBleds aus/an" die Leds aus/an (Nebeneffekt: es setzt auch die Helligkeit auf "Sehr hell" und die Anpassung an das Umgebungslicht an - das sind die envLight und dimValue Parameter, die ich fest kodiert habe - da gibt es aber Spielraum) :
defmod FBleds HTTPMOD http://fritz.box/data.lua 0
attr FBleds replacement01Mode expression
attr FBleds replacement01Regex %%sid%%
attr FBleds replacement01Value { $defs{FritzBox}{fhem}->{sid} }
attr FBleds set01Data sid=%%sid%%&apply=&page=led&ledDisplay=2&envLight=1&dimValue=3
attr FBleds set01Name aus
attr FBleds set01NoArg 1
attr FBleds set02Data sid=%%sid%%&apply=&page=led&ledDisplay=0&envLight=1&dimValue=3
attr FBleds set02Name an
attr FBleds set02NoArg 1
Und jetzt vollständig mit
- set FBleds an|aus
- set FBleds envLight(An|Aus)
- set FBleds dimValue 1|2|3
- set FBleds getStatus
Zuerst ein "set FBleds getStatus" machen, damit die Readings ausgefüllt werden. Danach nutzt er die Readings, um bei einem set die andere Werte nicht zu ändern.
defmod FBleds HTTPMOD http://fritz.box/data.lua 0
attr FBleds reading20JSON data_ledSettings_ledDisplay
attr FBleds reading20Name ledDisplay
attr FBleds reading21JSON data_ledSettings_envLight
attr FBleds reading21Name envLight
attr FBleds reading22JSON data_ledSettings_dimValue
attr FBleds reading22Name dimValue
attr FBleds replacement01Mode expression
attr FBleds replacement01Regex %%sid%%
attr FBleds replacement01Value { $defs{FritzBox}{fhem}->{sid} }
attr FBleds replacement02Mode expression
attr FBleds replacement02Regex %%envLight%%
attr FBleds replacement02Value ReadingsVal("FBleds","envLight",1)
attr FBleds replacement03Mode expression
attr FBleds replacement03Regex %%dimValue%%
attr FBleds replacement03Value ReadingsVal("FBleds","dimValue",3)
attr FBleds replacement04Mode expression
attr FBleds replacement04Regex %%ledDisplay%%
attr FBleds replacement04Value ReadingsVal("FBleds","ledDisplay",0)
attr FBleds set00Data sid=%%sid%%&page=led
attr FBleds set00Name getStatus
attr FBleds set00NoArg 1
attr FBleds set00ParseResponse 1
attr FBleds set01Data sid=%%sid%%&apply=&page=led&ledDisplay=2&envLight=%%envLight%%&dimValue=%%dimValue%%
attr FBleds set01Name aus
attr FBleds set01NoArg 1
attr FBleds set01ParseResponse 1
attr FBleds set02Data sid=%%sid%%&apply=&page=led&ledDisplay=0&envLight=%%envLight%%&dimValue=%%dimValue%%
attr FBleds set02Name an
attr FBleds set02NoArg 1
attr FBleds set02ParseResponse 1
attr FBleds set03Data sid=%%sid%%&apply=&page=led&ledDisplay=%%ledDisplay%%&envLight=1&dimValue=%%dimValue%%
attr FBleds set03Name envLightAn
attr FBleds set03NoArg 1
attr FBleds set03ParseResponse 1
attr FBleds set04Data sid=%%sid%%&apply=&page=led&ledDisplay=%%ledDisplay%%&envLight=0&dimValue=%%dimValue%%
attr FBleds set04Name envLightAus
attr FBleds set04NoArg 1
attr FBleds set04ParseResponse 1
attr FBleds set05Data sid=%%sid%%&apply=&page=led&ledDisplay=%%ledDisplay%%&envLight=%%envLight%%&dimValue=$val
attr FBleds set05Max 3
attr FBleds set05Min 1
attr FBleds set05Name dimValue
attr FBleds set05ParseResponse 1
Das funktioniert bei meiner 7490 ;) fix umgesetzt :)
Hinweis zum Einsatz:
- URL anpassen falls die Fritzbox nicht auf fritz.box hört.
- { $defs{FritzBox}{fhem}->{sid} } anpassen auf das FHEM Fritzbox Device. Ohne das geht es nicht! (SID)
Stimmt. Und dazu, sollte das Device nicht FBleds heissen, dann auch die 'replacementXXvalue ReadingsVal("<name>",...' anpassen
Ihr seid "der Gerät"! ;)
Herzlichen Dank! Das klappt wunderbar!!!!
Jetzt muss ich noch ein webCmd einbauen (zur komfortablen Darstellung!) und ein oder zwei "at", um die Anzeige zu aktualisieren bzw Nachts ein/aus zu schalten. Das sollte ich (hoffentlich) hin bekommen...
Allerdings gibt es kein "State", wenn ich das richtig sehe?
[gelöst] im Titel des ersten Post?
Zitat von: ahstax am 03 Oktober 2020, 12:45:35
Allerdings gibt es kein "State", wenn ich das richtig sehe?
Nein, das setzt HTTPMOD nicht standardmässig. Kann man aber mit stateFormat einfach lösen. Du hast ja die Readings ;)
Als Reading nehme ich dann einen Wert dieser?
Zitat von: amenomade am 03 Oktober 2020, 02:39:03
Und jetzt vollständig mit
- set FBleds an|aus
- set FBleds envLight(An|Aus)
- set FBleds dimValue 1|2|3
- set FBleds getStatus
Ein dieser:
READINGS:
2020-10-03 02:37:02 dimValue 3
2020-10-03 02:37:02 envLight 1
2020-10-03 02:37:02 ledDisplay 0
Z.B.:
attr FBleds stateFormat { ReadingsVal("FBleds", "ledDisplay", 0) == 0 ? "an" : "aus" }
oder
attr FBleds stateFormat { "leds:".(ReadingsVal("FBleds", "ledDisplay", 0) == 0 ? "an" : "aus")." env:".(ReadingsVal("FBleds", "envLight", 0) == 0 ? "aus" : "an")." dim:".ReadingsVal("FBleds", "dimValue", 3) }
Zitat von: amenomade am 03 Oktober 2020, 13:14:06
attr FBleds stateFormat { ReadingsVal("FBleds", "ledDisplay", 0) == 0 ? "an" : "aus" }
Der ist es (in meinem Fall)!
D A N K E ! ! ! :)