Hauptmenü

REST-API / HTTP

Begonnen von ttww, 27 August 2013, 21:31:43

Vorheriges Thema - Nächstes Thema

ttww

Hi,

gibt es eine REST-API zu FHEM ?
Ich habe in der Doku Telnet und JSON gefunden, beides würde (zur Not :-)) gehen, aber REST erscheint mir einfacher...

Also z.B.:
   http://xx.xx.xx.xx:port/GET/lampe/status
oder
   http://xx.xx.xx.xx:port/GET?dev=lampe,attr=status
oder so ähnlich....

Und das gleiche natürlich auch mit einem entsprechenden SET :-)

Habe ich da was übersehen oder gibt es sowas nicht ?

Schlussendlich möchte ich von einem OpenRemote-Controller meinen FHEM Raspberry steuern....

Grüße,
   Thomas

drdownload

es gibt die open transporter schnittstelle aber keine "offizielle" rest api. und man kann natürlich auch über die links im webinterface schalten. (analog dazu was andfhem macht)
CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,

sto

Würde gerne nochmals auf diese Frage zurück kommen.
Zugriff über's Web-IF ist ok. Aber...

  • wie kann ich vermeiden, dass der ganze HTML-Code der Seite als Antwort unnötig über die Leitung geht?
  • wie komme ich (elegant) an den neuen Zustand ran?
Eine REST-API schiene mir hier schon ziemlich nützlich, meint ihr nicht?

Danke, Dieter

Thorsten Pferdekaemper

Zitat von: sto am 02 März 2016, 09:05:49
Würde gerne nochmals auf diese Frage zurück kommen.
Zugriff über's Web-IF ist ok. Aber...

  • wie kann ich vermeiden, dass der ganze HTML-Code der Seite als Antwort unnötig über die Leitung geht?
  • wie komme ich (elegant) an den neuen Zustand ran?
Eine REST-API schiene mir hier schon ziemlich nützlich, meint ihr nicht?

Danke, Dieter
Hi,
ich glaube, dafür ist das Modul jsonlist2 gedacht. Bei mir funktioniert z.B. folgendes:

http://192.168.xxx.yyy/fhem?cmd=jsonlist2 dg_ku_Lampe21 state&XHR=1

Das liefert dann:

{
  "Arg":"dg_ku_Lampe21 state",
  "Results": [
  {
    "Name":"dg_ku_Lampe21",
    "Readings": {      "state": { "Value":"off", "Time":"2016-03-01 19:02:43" }    }
  }  ],
  "totalResultsReturned":1
}

Gruß,
   Thorsten
FUIP

sto

Super - besten Dank.
(In dem Fall sehe ich auch keinen unmittelbaren Bedarf mehr für eine REST-API.)

Nairolf123

Zitat von: Thorsten Pferdekaemper am 02 März 2016, 10:17:06
Hi,
ich glaube, dafür ist das Modul jsonlist2 gedacht. Bei mir funktioniert z.B. folgendes:

http://192.168.xxx.yyy/fhem?cmd=jsonlist2 dg_ku_Lampe21 state&XHR=1

Das liefert dann:

{
  "Arg":"dg_ku_Lampe21 state",
  "Results": [
  {
    "Name":"dg_ku_Lampe21",
    "Readings": {      "state": { "Value":"off", "Time":"2016-03-01 19:02:43" }    }
  }  ],
  "totalResultsReturned":1
}

Gruß,
   Thorsten

Hi zusammen,

ist es auch möglich nur den Wert "off" auszulesen? Also ich möchte eine URL in der Art http://192.168.xxx.yyy/fhem?cmd=jsonlist2 dg_ku_Lampe21 state value&XHR=1 aufrufen, die mir dann wirklich nur "Off" ohne das restliche JSON zurückliefert.

Danke & Grüße,
Florian

dev0

Du kannst auch perl Funktionen aufrufen:

http://192.168.xxx.yyy:8083/fhem?cmd={ReadingsVal('device','reading','default')}


Ans url encoden denken.

Nairolf123

Zitat von: dev0 am 04 Januar 2017, 09:12:11
Du kannst auch perl Funktionen aufrufen:

http://192.168.xxx.yyy:8083/fhem?cmd={ReadingsVal('device','reading','default')}


Ans url encoden denken.

DANKE!!! Funkioniert ;-). Hoffe ich habe bald Zeit, das in meinem Garmin Uhren Widget einzubauen, um dort auf der Startseite z. B. Temperatur oder ähnliches anzuzeigen.

Grüße,
Florian

PS: Wer es noch nicht kennt und eine neuere Garmin Uhr hat: https://apps.garmin.com/de/apps/ab37134f-1282-48df-a3be-ce0e583e3291;jsessionid=02695A9FFEBF7A53913DF9515E628547

Nairolf123

Zitat von: dev0 am 04 Januar 2017, 09:12:11
Du kannst auch perl Funktionen aufrufen:

http://192.168.xxx.yyy:8083/fhem?cmd={ReadingsVal('device','reading','default')}


Ans url encoden denken.

Leider kann ich das so nicht für mein Widget für Garmin Uhren verwenden, da die dortige Laufzeitumgebung nur Web-Zugriffe erlaubt, die einen bestimmten Response-Typ liefern (z. B. JSON, FIT, GPX, aber kein Text oder HTML). Wenn ich etwas wie:

http://192.168.xxx.yyy:8083/fhem?cmd={ReadingsVal('device','reading','default')}&XHR1

aufrufe, dann ist die Response reiner Text, was auch im HTTP Response Header steht:

Content-Type:text/plain; charset=UTF-8


Da Garmin jedoch JSON unterstützt, wollte ich Abfragen mittels JSONLIST2 machen. Doch auch hier steht im Response Header, dass es sich um "text/plain" handelt, obwohl die Response selbst klar JSON ist.

Daher meine Frage:

  • Kann ich JSONLIST2 dazu bringen, auch im Response Header den Content-Type als JSON zu markieren?
  • Gibt es eine andere Möglichkeit FHEM zu befragen, so dass es JSON zurückliefert?

Danke & Grüße,
Florian

rudolfkoenig

ZitatKann ich JSONLIST2 dazu bringen, auch im Response Header den Content-Type als JSON zu markieren?
Bisher nicht, ich habe aber FHEMWEB/JsonList2/XmlList gerade erweitert, so dass bei XHR=1 das passende Content-Type gesetzt wird.

P.S.: Ich habe dieses Posting nur per Zufall gesehen (Anfaengerfragen lese ich nicht): das sind keine Anfaengerfragen, bitte in den passenden Bereich posten.