[Gelöst] FHEM HTTP Json

Begonnen von SamNitro, 27 Januar 2023, 13:31:57

Vorheriges Thema - Nächstes Thema

SamNitro

Hallo, ich habe mir ein Stream Deck zugelegt, jetzt reizt es mich damit auch mein Smarthome zu schalten. Leider ist das für mich noch nicht so einfach.
Es gibt dort ein plugin Names API Ninja womit man schalten und Daten abrufen kann. Jetzt habe ich eine Vorlage gefunden die mit Tasmota funktioniert.

Wenn ich folgenden Befehl absetzte
http://IP/cm?cmnd=power1%20toggle
bekomme ich per HTTP
{"POWER1":"OFF"}
als Rückgabe. damit kann das Plugin arbeiten.

jetzt meine frage ist das mit FHEM auch möglich?

LÖSUNG:
https://forum.fhem.de/index.php/topic,131880.msg1260481.html#msg1260481

LG Patrick
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

Otto123

#1
Hi Patrick,

kurz und knapp: ja: mit HTTPMOD und JSONMOD
Oder für die eine Funktion auch mit HttpUtils selbst https://wiki.fhem.de/wiki/HttpUtils

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

SamNitro

#2
Aber damit schalte ich doch aus FHEM selber raus oder?
ich muss diesen Befehl quasi im Webbrowser absetzen.

10.1.1.3:8083/fhem?cmd=set%20HmIPW_Licht_Abstellkammer%20toggle&XHR=1

aber hier bekomme ich keine Rückmeldung
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

Otto123

Ich dachte Du willst von FHEM aus das Stream Deck schalten?
Du willst vom Stream Deck in FHEM schalten?
ok, falsch verstanden  :-[,
Dann würde ich empfehlen ein API WEB einrichten https://wiki.fhem.de/wiki/CsrfToken-HowTo#Alternative_Konfiguration

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

SamNitro

sorry aber leider verstehe ich dann immer noch nicht wie ich die Rückmeldung bekomme. :/
ZitatDu willst vom Stream Deck in FHEM schalten?

Ja incl direkter Rückmeldung
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

Otto123

#5
FHEM liefert mW bei set Kommandos keine Rückmeldung über FHEMWEB. Ich weiß leider nicht ob man da etwas aktivieren kann.
Du kannst natürlich Werte abfragen ...

Du kannst schauen ob das Modul HTTPAPI so etwas leistet https://forum.fhem.de/index.php/topic,128374.msg1229510.html#msg1229510
bzw. help HTTPAPI
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

rudolfkoenig

ZitatFHEM liefert mW bei set Kommandos keine Rückmeldung über FHEMWEB.
Klar doch. Die meisten set Befehle liefern aber im Normalfall nichts zurueck.

SamNitro

Zitat von: rudolfkoenig am 27 Januar 2023, 14:53:14
Klar doch. Die meisten set Befehle liefern aber im Normalfall nichts zurueck.
Okay aber für einen Laien wie mich bestimmt auch nicht so einfach aktivierbar?!
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

Otto123

Zitat von: rudolfkoenig am 27 Januar 2023, 14:53:14
Klar doch. Die meisten set Befehle liefern aber im Normalfall nichts zurueck.
Ok falsch ausgedrückt, aber genau sein Beispiel im ersten Post: Er will set aktor toggle absetzen und als Rückmeldung den Status on oder off erhalten. Bei FHEM erfolgt diese Rückmeldung im state vom Device und nicht als Antwort auf den set Befehl. Den state könnte man danach abfragen.

Aber dieses gewünschte Verhalten macht die HTTPAPI offenbar auch nicht, sie reflektiert nur:
ZitatSet
API command line for executing a set command
Request:
http://<ip-addr>:<port>/<apiName>/set?device=<devname>&action=<cmd>
Response:
<device>=<cmd>|error=<error message>
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

SamNitro

Zitat von: Otto123 am 27 Januar 2023, 16:30:14
Aber dieses gewünschte Verhalten macht die HTTPAPI offenbar auch nicht, sie reflektiert nur:

musste ich zu bedauern auch feststellen :(
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

rudolfkoenig

ZitatEr will set aktor toggle absetzen und als Rückmeldung den Status on oder off erhalten.

Na dann:
define w FHEMWEB 8083
attr w csrfToken mySecret

define d_1 dummy
attr d_1 setList on off
attr d_1 useSetExtensions 1


und
% wget -q -O - 'http://localhost:8083/fhem?cmd=set d_1 toggle;{Value("d_1")}&fwcsrf=mySecret&XHR=1'
off
% wget -q -O - 'http://localhost:8083/fhem?cmd=set d_1 toggle;{Value("d_1")}&fwcsrf=mySecret&XHR=1'
on


Von mir aus auch als JSON:
% wget -q -O - 'http://localhost:8083/fhem?cmd=set d_1 toggle;{toJSON({status=>Value("d_1")})}&fwcsrf=mySecret&XHR=1'
{"status":"off"}

Otto123

@Rudi Der Vorschlag war in meinem Kopf - ich hatte Hemmungen :) weil da war noch was
ZitatAchtung: unterschiedlicher Befehlsarten (FHEM/Shell/perl) in einer Kommandozeile sind nicht unterstützt, auch wenn es in manchen Fällen funktioniert.
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

SamNitro

Zitat von: rudolfkoenig am 27 Januar 2023, 17:36:51
Von mir aus auch als JSON:
% wget -q -O - 'http://localhost:8083/fhem?cmd=set d_1 toggle;{toJSON({status=>Value("d_1")})}&fwcsrf=mySecret&XHR=1'
{"status":"off"}


Das ist genau das was ich brauche vielen Dank schonmal dafür.
Allerdings habe ich jetzt ein kleines anderes Problem, meine HMIP Geräte zeigen mir den Status invertiert an.
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

SamNitro

http://10.1.1.3:8083/fhem?cmd={toJSON({status=%3EValue(%22HmIPW_Licht_Abstellkammer%22)})}&XHR=1

Wobei der status alleine richtig angezeigt wird...
evtl brauche ich eine kleine pause, wait oder sleep?
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

rudolfkoenig

Zitatevtl brauche ich eine kleine pause, wait oder sleep?
set in FHEM wartet nicht darauf, dass ein Befehl im Geraet ausgefuehrt wird, in vielen Faellen ist nicht mal bekannt, ob er ausgefuehrt wurde.
Weiterhin waere warten kontraproduktiv: solange man FHEM blockiert, wird auch HMIP sein Status nicht aktualisieren.

HMIP kenne ich nicht, manche andere Module setzen den Status vor Ankunft der Bestaetigung vom Geraet auf set_on / set_off.
Diesen Fall koennte man (mit etwas Glueck) so loesen:
wget -q -O - 'http://localhost:8083/fhem?cmd=set d_1 toggle;{toJSON({status=>(Value("d_1")=~s/set_//r)})}&fwcsrf=mySecret&XHR=1'