Perl Noob - brauche mal ein bisschen Hilfe, wie cURL für Nest Protect einbinden

Begonnen von Mitch, 12 Mai 2017, 15:13:10

Vorheriges Thema - Nächstes Thema

Mitch

Hallo Zusammen,

ich bin gerade dabei mich in die Nest API ein zu arbeiten.
Ich kann prima meinen Nest Protect anfragen und ihn auch in Realtime "einbinden".
Das ganze geht mit cURL.

Jetzt bin ich leider der totale Perl-Noob und frage mich, wie ich einen cURL Aufruf am besten in FHEM bekommen.
Es gibt ja WWW::Curl (http://search.cpan.org/~szbalint/WWW-Curl-4.17/lib/WWW/Curl.pm), aber ich kann damit nicht so viel anfangen  :-[

Der cURL Aufruf wäre:
curl -v -L \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer c.TOKEN" \
  -X GET "https://developer-api.nest.com/"


Die "Realtime" Verbindung wäre:
curl -v -L -H "Accept:text/event-stream" \
-H "Authorization: Bearer c.TOKEN" \
  -X GET "https://developer-api.nest.com/


Bei der Einmalabfrage bekomme ich ein JSON zurück, welches ich weiter verarbeiten kann.
Ich habe mir mal einen "Workaround" gebastelt, indem ich einen Shellscript regelmäßig aufrufe, mir das JSON ziehe und dieses in fhem mit dem HTTPMOD Modul einlese.
Ist natürlich von hinten durchs Auge in die Brust

Wenn ich die Realtimeabfrage per Command in der Konsole laufen lasse, bekomme ich zyklisch
event: keep-alive
data: null

zurück und im Fall eines Alarms, eben den Alarm.

Die Frage ist nur wieder, wie ich dies in fhem bekomme?
Wenn ich den Task abschieße, oder die Konsole schließe, ist natürlich auch alles weg.
FHEM im Proxmox Container

justme1968

warum der umweg über das shellscript und nicht direkt HTTPMOD?

ansonsten bieten sich immer die fhem HttpUtils an. am besten im non blocking mode. ein umweg über curl oder andere externe libs oder programme ist nicht nötig.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Mitch

Wie gesagt, mit Perl stehe ich auf Kriegsfuß  ;D

Das HTTPMOD Modul habe ich mir angeschaut und das Commandref bestimmt 10x gelesen.
Ich werde aber nicht so ganz schlau daraus.
Außerdem unterstützt es anscheinend nicht OAuth 2.0 Authorization mit Bearer Token.

Gibt es denn zu HttpUtils auch eine Doku?
FHEM im Proxmox Container

DeeSPe

MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

krikan


Mitch

okay, Danke. Im Wikki hatte ich nicht geschaut, nur Commandref  :-[

FHEM im Proxmox Container

KernSani

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Mitch

Bestimmt nicht, es ist leider nich gar nichts gelöst.
Wie kommst du da drauf?!  ???
FHEM im Proxmox Container

KernSani

Zitat von: Mitch am 12 Mai 2017, 18:50:42
Wie kommst du da drauf?!  ???
Hätte ja sein können, dass die httputils Doku geholfen hat.

Was erwartest du jetzt? Eine Lösung, wie du das mit httputils umsetzen kannst? Dann lass uns an deinen bisherigen Versuchen teilhaben. Oder Alternative Lösungsvorschläge?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Thorsten Pferdekaemper

Hi,
also wenn Du irgend eine Programmiersprache kannst oder das ganze mit einem Skript hinbekommst, dann kannst Du z.B. mit

http://<fhem-ip>:<fhem-port>/fhem?cmd=setreading%20<irgendeindevice>%20<irgendeinreading>%20<irgendeinwert>

...in FHEM ein Reading setzen und damit auch einen Event auslösen. <irgendeindevice> kann z.B. ein Dummy sein.
Du wirst ggf. über das csrfToken stolpern. Das kannst Du für Versuchszwecke erst einmal ausschalten. Später kannst Du dann eine eigene FHEMWEB-Instanz bauen, die nur auf lokale Requests antwortet.
Gruß,
   Thorsten
FUIP

Mitch

Sorry, KernSani, aber was ist das für eine doofe Antwort.
Ich habe doch meine "Versuche" schon ganz deutlich beschrieben.

@Thorsten, danke, aber ich brauche keine Programmiersprache (ja, ich kann ein paar [außer Perl]), es geht ja um einen simplen cURL Aufruf.
Und es geht nicht mit Deine "Idee", aber evtl. so ähnlich. Danke, da bastel ich noch etwas weiter.

Es handelt sich hier übrigens um eine Cloud REST API bei Google, die ich per cURL abfrage.


Warum ich hier schreibe und was ich erwarte?

Naja, früher wurde genau so ein Modul entwickelt und daran haben dann alle teilhaben können.
Ich erinnere mich noch sehr gut an das Thema BT mit PebleBee "auslesen" und für die Anwesenheitserkennung zu nutzen.
Da habe ich auch mit einem kleinen Shellscript angefangen, gepostet, danach haben andere mit gemacht, danach wieder jemand, der das in Perl "übersetzt" hat und schon war das Modul gebohren.

Schade, scheint wohl heute nicht mehr der Fall zu sein  :-\
FHEM im Proxmox Container

Thorsten Pferdekaemper

Zitat von: Mitch am 12 Mai 2017, 20:16:06aber ich brauche keine Programmiersprache
Aha, wie willst Du das dann machen? Mit Backsteinen?

Zitates geht ja um einen simplen cURL Aufruf.
Na den kannst Du aus FHEM einfach machen:

"curl -v -L -H \"Content-Type: application/json\" -H \"Authorization: Bearer c.TOKEN\" -X GET \"https://developer-api.nest.com/\""

Das bringt Dir aber nichts, da Du ja auch die Antwort auswerten willst. Außerdem willst Du wahrscheinlich in FHEM ein Device mit Readings haben. ...und ich habe irgendwo was von OAuth gelesen. Also nicht wirklich sooo simpel.

ZitatUnd es geht nicht mit Deine "Idee",
Das glaube ich Dir nicht. Wenn Du ein Skript schreiben kannst, was das auf dem Screen ausgibt, und Du curl hast, dann kannst Du das auch in FHEM pumpen, wie ich beschrieben habe.

ZitatEs handelt sich hier übrigens um eine Cloud REST API bei Google,
Brrrrrr. Da sind mindestens 2,5 Gründe drin, warum ich das niemals an mein FHEM angebunden haben wollte. "Cloud REST API". Hilfe...

ZitatNaja, früher wurde genau so ein Modul entwickelt und daran haben dann alle teilhaben können.
Ich erinnere mich noch sehr gut an das Thema BT mit PebleBee "auslesen" und für die Anwesenheitserkennung zu nutzen.
Da habe ich auch mit einem kleinen Shellscript angefangen, gepostet, danach haben andere mit gemacht, danach wieder jemand, der das in Perl "übersetzt" hat und schon war das Modul gebohren.
Schade, scheint wohl heute nicht mehr der Fall zu sein  :-\
Doch, das ist heute auch noch der Fall, wenn es genügend oder die richtigen Leute interessiert. Vielleicht kannst Du ja noch jemand dafür gewinnen, oder aber Du lernst halt Perl. Ich habe es auch gelernt. Ist dann halt eine Programmiersprache mehr. Wenn man eine kann, dann kann man doch irgendwie alle. (Ok, mal sowas wie Lisp, Prolog etc. nicht mitgerechnet.)

Ich würde Dir empfehlen, mal an meiner "Idee" dranzubleiben. Das geht bestimmt irgendwie.

Gruß,
   Thorsten
FUIP

Mitch

#12
Nein, weder Backsteine noch Programmiersprache  ;D

Mir ist schon klar, wie ich einen cURL Befehl aus fhem aufrufe, aber wie du richtig sagst, das bringt mir nicht.
Und die Readings habe ich schon in fhem, das war das kleinste Problem.
Deswegen war Deine Idee gut, aber hilft nicht weiter.

Es geht ja darum, eine ständige Verbindung zur REST API zu haben, also eine dauerhafte Verbindung zur Nest/Google Cloud, um in Echtzeit informiert zu werden.

BTW: wer keine Cloud mag, oder Google, oder sonst was, der muss ja nicht  ;D
Ich bin Fan von Cloudlösungen, okay, ich verdiene auch mein Geld damit  ;)

Klar kann man Perl lernen....wenn man Zeit hat...
Aber ich kenne das aus dem Job, ich arbeite immer gerne zusammen mit meinem Team und deswegen dachte ich hier klappt das auch (hat ja früher auch öfter).
Jeder weiß irgendwas und zusammen bastelt man das dann zusammen  ;)

Aber okay, mal sehen, vielleicht gibt es ja noch den einen oder anderen, der auch Interesse an Nest hat.
Und wenn nicht...
FHEM im Proxmox Container

KernSani

#13
Zitat von: Mitch am 12 Mai 2017, 20:16:06
Sorry, KernSani, aber was ist das für eine doofe Antwort.
Ich habe doch meine "Versuche" schon ganz deutlich beschrieben.
Nun, du hast deine initialen Versuche beschrieben, daraufhin hast du vom einigen Forumsmitgliedern Anregungen bekommen, wie man das Problem angehen könnte. Ich war davon ausgegangen, dass du dich daraufhin evtl. mit httputils oder ähnlichem beschäftigt hattest (und darauf bezog sich die Frage nach deinen Versuchen)


Zitat von: Mitch am 12 Mai 2017, 20:16:06
Warum ich hier schreibe und was ich erwarte?

Naja, früher wurde genau so ein Modul entwickelt und daran haben dann alle teilhaben können.
Ich erinnere mich noch sehr gut an das Thema BT mit PebleBee "auslesen" und für die Anwesenheitserkennung zu nutzen.
Da habe ich auch mit einem kleinen Shellscript angefangen, gepostet, danach haben andere mit gemacht, danach wieder jemand, der das in Perl "übersetzt" hat und schon war das Modul gebohren.
Na das ist doch etwas ganz anderes. Bei mir entstand hier der Eindruck "Da sitzt einer mit einem Shell-Skript und wartet - andere Vorschläge ignorierend - dass ihm das in FHEM integriert wird". Da deine Intention aber eine andere ist, könntest du das vielleicht anders angehen. Was hältst du davon, das Thema umzubenennen - z.b. in "Modul für NEST API bauen - wer macht mit?" das Ganze vielleicht in das "Sonstige Systeme" Sub-Forum verschieben und schon geht's los?

Edit: Irgendwie ärgert mich der Editor gerade :-S
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Thorsten Pferdekaemper

Zitat von: Mitch am 12 Mai 2017, 20:50:47
Es geht ja darum, eine ständige Verbindung zur REST API zu haben,
Das ist doch ein Widerspruch, oder? Eine der Eigenschaften von REST ist doch gerade, nicht ständig eine Verbindung offen zu haben.
Aber egal. Wenn Du das irgendwie in Deinem Skript hinbekommst, dann musst Du doch nur an der Stelle, an der Du die "Echtzeit-Nachricht" bekommst den FHEM-Aufruf machen. Dann noch dafür sorgen, dass das Skript als Service läuft und fertig.
Gruß,
   Thorsten
FUIP