FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: mumpitzstuff am 16 Juli 2023, 13:01:27

Titel: BulkUpdate auch über telnet/Kommando verfügbar?
Beitrag von: mumpitzstuff am 16 Juli 2023, 13:01:27
Soweit ich das sehen konnte besteht aktuell nicht die Möglichkeit ein Bulk Update von Readings über telnet oder als Komando zu übergeben. Falls die Annahme richtig sein sollte, besteht eventuell die Möglichkeit das nachzurüsten?

So in etwa:
perl /opt/fhem/fhem.pl 7072 'readingsbeginupdate <hash>; readingsbulkupdate <hash> <device> <reading> x; readingsendupdate <hash> 1;'
Der telnet use case würde dann ähnlich aussehen.

Hintergrund:
Manchmal werden externe Programme aufgerufen, die dann wiederum von außen Werte an FHEM übergeben. Das "scheint" aktuell nur über setreading zu funktionieren, was bei mehreren Werten aber schnell ineffizient wird.
Titel: Aw: BulkUpdate auch über telnet/Kommando verfügbar?
Beitrag von: Dr. Boris Neubert am 16 Juli 2023, 13:37:07
Hallo,

es sind ja schon sehr spezielle Anwendungsfälle, die die gewünschte Funktionalität erfordern. Und in der angegebenen Form benötigt der Anwender schon Kenntnisse der Interna von FHEM. Wäre es da nicht einfacher, eine Perl-Funktion zu schreiben, die das Benötigte leistet, und diese in dem Kommando aufzurufen?

sub setreadings() {
  my ($devicename, %readingvaluepairs)= @_;
  ...
}

Viele Grüße
Boris
Titel: Aw: BulkUpdate auch über telnet/Kommando verfügbar?
Beitrag von: rudolfkoenig am 16 Juli 2023, 15:15:25
Oder man ruft readingsBeginUpdate(),etc mit etwas Escape-Akrobatik direkt in einem Perl-Ausdruck auf.
Titel: Aw: BulkUpdate auch über telnet/Kommando verfügbar?
Beitrag von: betateilchen am 16 Juli 2023, 17:57:27
Zitat von: Dr. Boris Neubert am 16 Juli 2023, 13:37:07Wäre es da nicht einfacher, eine Perl-Funktion zu schreiben, die das Benötigte leistet, und diese in dem Kommando aufzurufen?

Beim Aufruf eines Kommandos (im Sinne eine FHEM Befehls) ist es halt recht aufwändig, einen hash zu übergeben. Die Idee mit einer entsprechenden Funktion könnte ich mir gut vorstellen.

Weiter gedacht: eine Funktion "setBulkReadings($devicename, %readingvaluepairs, $doTrigger)" könnte ich mir gut in der 99_Utils.pm vorstellen.

Andererseits: mit json2reading() steht in der fhem.pl ja bereits eine einfach zu verwendende Funktion zur Verfügung, mit der man mehrere readings auf einmal erzeugen kann.
Titel: Aw: BulkUpdate auch über telnet/Kommando verfügbar?
Beitrag von: mumpitzstuff am 16 Juli 2023, 19:52:29
Zitat von: betateilchen am 16 Juli 2023, 17:57:27
Zitat von: Dr. Boris Neubert am 16 Juli 2023, 13:37:07Wäre es da nicht einfacher, eine Perl-Funktion zu schreiben, die das Benötigte leistet, und diese in dem Kommando aufzurufen?

Beim Aufruf eines Kommandos (im Sinne eine FHEM Befehls) ist es halt recht aufwändig, einen hash zu übergeben. Die Idee mit einer entsprechenden Funktion könnte ich mir gut vorstellen.

Weiter gedacht: eine Funktion "setBulkReadings($devicename, %readingvaluepairs, $doTrigger)" könnte ich mir gut in der 99_Utils.pm vorstellen.

Andererseits: mit json2reading() steht in der fhem.pl ja bereits eine einfach zu verwendende Funktion zur Verfügung, mit der man mehrere readings auf einmal erzeugen kann.

Die Funktion war mir bisher nicht bekannt, aber ich glaube diese Funktion könnte ich auch nicht einfach von außen aufrufen und auch nur über eine Anwenderfunktion schleifen. Oder täusche ich mich da?
Titel: Aw: BulkUpdate auch über telnet/Kommando verfügbar?
Beitrag von: mumpitzstuff am 16 Juli 2023, 19:56:21
Zitat von: Dr. Boris Neubert am 16 Juli 2023, 13:37:07Hallo,

es sind ja schon sehr spezielle Anwendungsfälle, die die gewünschte Funktionalität erfordern. Und in der angegebenen Form benötigt der Anwender schon Kenntnisse der Interna von FHEM. Wäre es da nicht einfacher, eine Perl-Funktion zu schreiben, die das Benötigte leistet, und diese in dem Kommando aufzurufen?

sub setreadings() {
  my ($devicename, %readingvaluepairs)= @_;
  ...
}

Viele Grüße
Boris

Hmm okay stimmt. Da könnte man etwas generelles draus basteln. Mir war nicht klar, das ich Userfunktionen direkt von außen aufrufen kann...
Titel: Aw: BulkUpdate auch über telnet/Kommando verfügbar?
Beitrag von: rudolfkoenig am 16 Juli 2023, 20:14:47
ZitatMir war nicht klar, das ich Userfunktionen direkt von außen aufrufen kann...
Ueber HTTP kann man genau das aufrufen, was man von einem notify/at/etc.
Beispiel:
http://localhost:8083/fhem&cmd={Log 1,"Hello"}&XHR=1&fwcsrf=...

Ich wuerde den Weg ueber MQTT + JSON gehen.
Das ist portabel und effizient.
Titel: Aw: BulkUpdate auch über telnet/Kommando verfügbar?
Beitrag von: mumpitzstuff am 16 Juli 2023, 20:35:57
Sieht gut aus. Danke. Damit experimentiere ich mal etwas.