FHEM von außen steuern - Overhead

Begonnen von Det20, 30 November 2022, 09:12:33

Vorheriges Thema - Nächstes Thema

Wernieman

- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Otto123

Zitat von: Det20 am 30 November 2022, 12:11:42
Die Frage ist halt: Kann ich "fhem?cmd=...&XHR=1" verwenden, ohne den ganzen Kladeratsch als Rückwert zu bekommen?
Ich würde Dir MQTT empfehlen. Aber wenn Du das nicht willst, kannst Du per HTTP und einem Script das ganze erledigen:
https://heinz-otto.blogspot.com/2019/02/fhem-http-client.html

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

Det20

#17
Ach, auf die Idee mit Telnet bin ich noch garnicht gekommen. Wie schicke ich den Befehl denn von 'innen' los?
So?


  use Net::Telnet();
  my $tab = new Net::Telnet (Timeout => 50,Port => 7072);

  $tab->open("192.168.100.29");
  # $t->login($username, $passwd);
  $tab->print("setreading a test 1");
  return "OK";

Wernieman

FHEm Telnet macht nicht das Login wie Standard Telnet, sondern einfach, in dem das PW gesendet wird .. siehe meinen Link ein paar Beiträge oben ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Det20

Zitat von: Wernieman am 01 Dezember 2022, 12:58:50
FHEm Telnet macht nicht das Login wie Standard Telnet, sondern einfach, in dem das PW gesendet wird .. siehe meinen Link ein paar Beiträge oben ...

Habe es versucht, funktioniert super und schnell, allerdings nur synchron. Bekommt man das auch asynchron hin? Und was meinst du mit PW?

Reinschki

Zitat"fhem?cmd=...&XHR=1"
Schon mal folgendes probiert:
"fhem?cmd=...&XHR=0"

Det20

#21
Wie ...? XHR=0 ist ohne Output? Das wäre zu einfach.

marvin78


Det20

Nope, bringt nix, kommt alles genauso wie mit xhr=1

Otto123

Zitat von: Det20 am 01 Dezember 2022, 13:06:31
Habe es versucht, funktioniert super und schnell, allerdings nur synchron. Bekommt man das auch asynchron hin?
Was meinst Du  mit synchron oder asynchron ?  ???
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

Wernieman

Hast Du eigentlich meinen  Beitrag #15 gelesen?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Det20

Zitat von: Otto123 am 01 Dezember 2022, 16:58:20
Was meinst Du  mit synchron oder asynchron ?  ???

Dass fhem während der telnet Ausführung nicht blockiert

bartman121

#27
Also, soweit ich weiß hat fhem keine Rest-API. Es ist mir auch unklar was hier wirklich die Anforderung ist.

Geht es wirklich nur darum Daten aus einem fhem an ein zweites fhem zu senden?

Warum wird das per http-GET gemacht? Es gibt doch auch andere Wege ohne Overhead.

Aber hier ist schienbar eine Rest-API Mal entwickelt worden: https://github.com/matgoebl/FhAPI

BTW, du schreibst, dass fhem bei "ohne Output" ein ok liefern soll? Wozu dann doch  Inhalt im Body? Wenn der Response-Header mit 200 bereits sagt "okay!"?


Otto123

Zitat von: Det20 am 01 Dezember 2022, 18:13:28
Dass fhem während der telnet Ausführung nicht blockiert
Dabei wird FHEM nicht automatisch blockiert. Da wird ein Befehl an FHEM gesendet. Wenn dessen Ausführung FHEM blockiert ist es genauso wie wenn der Befehl auf anderem Weg zu FHEM gelangt.
Also mMn ist besteht kein Unterschied zwischen Befehlen über FHEM, übers Web Interface oder über die Telnet Schnittstelle.
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

Det20

Ne, ich meine das System, das sendet. Einen HTTP-Request kann ich NonBlocking abschicken. Habe ich einen Timeout von 2 Minuten, geht das (FHEM-) Leben trotzdem weiter.
Habe ich bei Telnet einen Timeout von 2 Minuten, dann bleibt die (FHEM-) Welt solange stehen und löst ggf ein Watchdog-Event aus. Ich könnte es höchstens in einen Thread auslagern, weiß aber nicht, wie FHEM damit umgehen kann.