FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Det20 am 30 November 2022, 09:12:33

Titel: FHEM von außen steuern - Overhead
Beitrag von: Det20 am 30 November 2022, 09:12:33
Hallo,

ich ändere innerhalb meines FHEM Systems einige Readings von 'außen', also einem anderen System, mit "fhem?cmd=...&XHR=1". Das funktioniert super, allerdings wird als Antwort von FHEM jedesmal die gesamte Oberfläche (HTML) zurückgegeben, was natürlich für unnötig Last im Netzwerk sorgt. Kann man das so ändern, dass nur "ok" oder "1" oder so zurück gegeben wird?
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Wernieman am 30 November 2022, 09:26:11
In dem Du z.B. über terminal oder mqtt gehst .... gibt bestimmt auch noch mehr Möglichkeiten
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Det20 am 30 November 2022, 10:12:30
Terminal war mir zu instabil. Das Gerät, was die Daten zum FHEM sendet (ebenfalls ein FHEM), ist per WLAN im Netz. Und WLAN am Raspberry ist so eine Sache: Dauernd war die Verbindung weg. mit &XHR=1 läuft es super, allerdings benötige ich den ganzen Feedback-Overhead nicht.
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Wernieman am 30 November 2022, 10:27:38
ZitatTerminal war mir zu instabil.
Sorry aber dem kann ich zu 100% Wiedersprechen. Wenn man nicht mit fhem.pl, sondern ncat (o.Ä.) Arbeitet, geht es supereinfach und superstabil. habe es hier mehrfach im Einsatz.

Wenn Du aber so große Netzwerkprobleme hast, ist gerade der Einsatz von MQTT die große Alternative. Gerade das Protokoll ist entwickelt worden für instabile Netze ....

P.S.
Du hast eventuell eine FritzBox-Wlan und verwendest die Interne Raspi-WLan-Hardware?
Dann ist klar, warum Du WLAN-Probleme hast ....

P.S.S.
Erst jetzt gelesen: Du willst also eigentlich Daten von FHEM zu FHEM bringen?
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Det20 am 30 November 2022, 10:31:35
Ja, von FHEM (Heizungszähler im Stromkasten ohne LAN) an FHEM (außerhalb Stromkasten mit LAN).
FHEM2FHEM war völlig instabil, das habe ich aufgegeben.
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Wernieman am 30 November 2022, 10:41:24
FHEM2FHEM nutzt das Terminal, aber Terminal muß nicht gleich FHEM2FHEM sein. Du hast danach gefragt, Werte in FHEM reinzupusten. Das geht eben mit dem Terminal super .....
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Det20 am 30 November 2022, 10:42:24
Hast du ein praktisches Beispiel?
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Wernieman am 30 November 2022, 10:52:50
- Hast Du im Telnet ssl aktiviert oder nicht?
- Mit oder Ohne Passwort?

Ohne SSL: Zitiere mich mal selber: https://forum.fhem.de/index.php/topic,80371.msg723862.html#msg723862 (https://forum.fhem.de/index.php/topic,80371.msg723862.html#msg723862)

P.S. Sufu benutzt?
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: frank am 30 November 2022, 11:06:59
Zitat... von FHEM (Heizungszähler im Stromkasten ohne LAN) ...
wie kommen denn die daten aus dem schrank raus?
wlan, oder?
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Det20 am 30 November 2022, 11:38:09
Ja
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Wernieman am 30 November 2022, 12:04:43
????? Was willst Du uns damit sagen ?????
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Det20 am 30 November 2022, 12:11:42
War die Antwort auf "wlan, oder?".
Die Frage ist halt: Kann ich "fhem?cmd=...&XHR=1" verwenden, ohne den ganzen Kladeratsch als Rückwert zu bekommen?

[Edit]
Wobei mir gerade einfällt, vielleicht geht es mit "HEAD" statt "GET".
Antwort: Nein, bei HEAD statt GET kommt auch ganz viel zurück
[/Edit]
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Wernieman am 30 November 2022, 16:07:33
Mir nicht bekannt .... was aber diesbezüglich nichts heißt ....
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Det20 am 30 November 2022, 16:09:44
Na dann mache ich doch mal einen Feature-Request @RudolfKoenig. Vielleicht über einen Parameter "output=0" / 1 / 2 steuerbar. 0 = Leere Seite, 1 = "OK", 2 = "wie aktuell". Default dann halt 2.
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Wernieman am 30 November 2022, 16:22:58
Ob der dieses hier liest ist Fraglich ....
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Wernieman am 30 November 2022, 16:25:43
Aber mal ein kurzer Blick in die Doku:
https://fhem.de/commandref.html#HTTPAPI (https://fhem.de/commandref.html#HTTPAPI)
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Otto123 am 30 November 2022, 16:26:49
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
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Det20 am 01 Dezember 2022, 12:40:28
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";
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag 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 ...
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Det20 am 01 Dezember 2022, 13:06:31
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?
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Reinschki am 01 Dezember 2022, 13:28:59
Zitat"fhem?cmd=...&XHR=1"
Schon mal folgendes probiert:
"fhem?cmd=...&XHR=0"
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Det20 am 01 Dezember 2022, 13:31:55
Wie ...? XHR=0 ist ohne Output? Das wäre zu einfach.
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: marvin78 am 01 Dezember 2022, 14:20:17
Aber so einfach ist es...
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Det20 am 01 Dezember 2022, 14:35:56
Nope, bringt nix, kommt alles genauso wie mit xhr=1
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Otto123 am 01 Dezember 2022, 16:58:20
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 ?  ???
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Wernieman am 01 Dezember 2022, 17:02:12
Hast Du eigentlich meinen  Beitrag #15 gelesen?
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Det20 am 01 Dezember 2022, 18:13:28
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
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: bartman121 am 01 Dezember 2022, 19:17:00
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!"?

Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Otto123 am 01 Dezember 2022, 23:14:35
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.
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Det20 am 02 Dezember 2022, 09:35:10
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.
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: bartman121 am 02 Dezember 2022, 09:42:58
Aber das eigentliche Problem ist doch nicht das bisschen Traffic? Deine Netzwerkverbindung ist unbrauchbar. Was ist das Problem dort anzusetzen?
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Det20 am 02 Dezember 2022, 09:50:48
Doch, genau das ist es. Von der Logik her macht das ja auch keinen Sinn: Ich nutze die direkte Ansteuerung ja, um *ohne* die Oberfläche etwas zu schalten. Zurück bekomme ich aber die *gesamte* Oberfläche. Das ist doch sinnfrei, wenn ich das wollte, dann könnte ich mich ja auch direkt einloggen. Also wird automatisiert etwas von außen aufgerufen, um zu schalten. Dieser Automatismus bekommt aber etwas zurück, mit dem er sowieso absolut garnichts anfangen kann: Unnötige Bytes in Form der gesamten Oberfläche. Wenn ich auf diese Art nun 20 Readings von außen aktualisiere und das im 10 Sekunden Intervall, dann bekomme ich pro Minute 6*20*ca-12 KB unnötige Daten geliefert. Macht bei Gigabit vielleicht nicht viel aus, bei einer schlechten WLAN Anbindung aber schon.

Nutze ja in einer Datenbank auch kein 255 Zeichen VARCHAR Feld für eine Postleitzahl, einfach nur weil es geht. Vielleicht bin ich aber auch einfach nur von der alten Schule und achte auf Platzverschwendung. Stamme halt aus Zeiten, als man sich noch Gedanken über Speicher-Optimierung machen musste.

Aber davon ab ist die Telnet-Lösung eleganter und hat deutlich weniger Overhead. Müsste halt nur noch klären, inwiefern das öffnen/verbinden/schließen FHEM auf Sender-Seite blockiert.
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Wernieman am 02 Dezember 2022, 11:07:25
Kannst Du ja dafür ein Modul scheiben und es non-Blocking ausführen  ;)

Aber worauf ich von Dir noch keine Antwort bekommen habe, frage ich zum letzten mal: Dir meinen Beitrag #15 angesehen?

Btw:
Und MQTT ist auch keine Möglichkeit für Dich?
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Det20 am 02 Dezember 2022, 11:09:05
Ja, #15 angesehen, bringt mir aber nix. Ich kann mit HTTP Daten abrufen. Wenn aber 12 KB zurückkommen, dann kommen die zurück, egal wie ich abrufe. Das ist doch genau mein ursprüngliches Problem. Ich glaube wir drehen uns im Kreis.
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Otto123 am 02 Dezember 2022, 12:18:06
Ich glaube wir drehen uns im Kreis.
Ich glaube Du baust Problem auf wo keine sind  ::)

Du willst Telnet von FHEM aus machen? (Sorry aber der eigentliche Use Case ist irgendwie wegen der ganzen Problemwellen verloren gegangen)
https://fhem.de/commandref_modular_DE.html#command
So ein FHEM Aufruf blockiert nicht sondern wird im Hintergrund (extra Prozess) aufgeführt:
"echo set lamp on|nc DeinHost -w 1 7072"

Aber wenn Du "knausrig" ;) bist und die Verbindung schlecht ist: MACH ES MIT MQTT!

Edit:
ZitatIch kann mit HTTP Daten abrufen...
Ich meine die FHEM HTTP API arbeitet anders, da wird ja nicht FHEMWEB abgefragt. Du solltest Dir das wirklich anschauen und nicht einfach mutmaßen :)

Edit:
ZitatFHEM2FHEM war völlig instabil
das nutzt allerdings die Telnet Schnittstelle. Ich fürchte aber eher das instabil war durch falschen Einsatz / Konfig begründet? Wie zeigte sich diese Instabilität? Wie war die Konfig?
Aber wenn dies alles richtig konfiguriert war, dann setze bitte wirklich auf MQTT. Das ist dafür designed.
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: bartman121 am 02 Dezember 2022, 13:42:35
also ich hab mal fix mit http-api aus #15 getestet ....

Aber wie mehrfach betont, ohne funktionierendes Netzwerk wirst du selbst damit Probleme bekommen.
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Wernieman am 02 Dezember 2022, 14:54:17
Sorry aber jetzt stehe ich auf dem Schlauch. Kannst Du mir bitte die Grafiken erklären?
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: bartman121 am 02 Dezember 2022, 15:03:29
Das sind die Entwicklertools vom Browser... Das waterfall-diagramm ist in diesem fall nicht sehr umfangreich, damit analysiert man Webseiten um zu schauen wann was vom Browser geladen wird und wie lange es jeweils dauert....

In der Tabelle unten steht quasi, was was ausgeführt wurde, was geladen wurde und auch woher. Wichtig ist size und die Zeit wie lange es gedauert hat.

Ich wollte nur zeigen, dass er nur 109byte übertragen hat.....

Im zweiten Beispiel habe ich zwei Kommandos aufgezeichnet, jeweils 109byte....

Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Wernieman am 02 Dezember 2022, 15:21:48
Also genau das, was der Threatersteller wollte .....

Danke für Deine Erklärung! (Wobei ich die Entwicklertools kenne, nur hatte ich irgendwie das Diagramm nicht verstanden ...)
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: bartman121 am 03 Dezember 2022, 21:21:14
Mich interessiert jetzt schon noch was daraus geworden ist. Die httpapi aus #15 müsste ja die zufriedenstellende Lösung gewesen sein?

Oder ist der TE jetzt doch darauf gekommen, dass das eigentliche Problem das Netzwerk ist?

Viele Grüße

Andreas
Titel: Antw:FHEM von außen steuern - Overhead
Beitrag von: Det20 am 03 Dezember 2022, 21:54:58
Also, nimm es mir nicht übel, aber du kannst jetzt noch 100 mal schreiben, dass das Netzwerk das Problem ist, ändert jedoch nichts an der Tatsache, dass KEIN LAN KABEL IM STROMKASTEN ist. Nix. Null. Nur WLAN. Punkt.

Und eine api Schnittstelle gibt keine Kilometerlangen Resultate zurück. Weder in pascal noch c# noch c++. Nur 0,1 oder tatsächlich angeforderte Daten. Weiß ich, bin Entwickler. Darum ging es ursprünglich.

Ich habe es mit telnet gelöst. Es wird alle 10 Sekunden eine Verbindung geöffnet und alles auf einmal verschickt. Kommt es zu einem Fehler (eval), dann wird alles in einen Cache geschrieben und beim nächsten mal mit übertragen