FHEM Forum

FHEM => Automatisierung => Thema gestartet von: DS_Starter am 22 Mai 2024, 22:53:17

Titel: 02_HTTPAPI - Attribute im Device funktionieren nicht wie erwartet
Beitrag von: DS_Starter am 22 Mai 2024, 22:53:17
Hallo Klaus,

ich habe mich mit deinem Modul etwas beschäftigt. Es bietet mir vermutlich einen sehr guten Dienst als Agent für eine Anwendung.

Dabei ist mir aufgefallen, dass disable bzw. devicesCtrl nicht arbeiten. Grund ist, dass $name in der Sub HTTPAPI_Read -> Übergabe an HTTPAPI_TcpServerWrite nicht den Namen des Device enthält, sondern den Namen der temporären Web-Instanz.

Wenn in Sub HTTPAPI_Read ergänzt wird:

  # accept request and create a child
  if ($hash->{SERVERSOCKET}) {
    my $chash = TcpServer_Accept($hash, "HTTPAPI");
    return if (!$chash);
    $chash->{encoding} = $encoding;                           # Zeile 252
    $chash->{cname} = $name;
    $chash->{CD}->blocking(0);
    return;
  }

Und später:

      # CGI Aufruf
      $ret = HTTPAPI_TcpServerWrite(HTTPAPI_CGI($hash, $hash->{cname}, $url));   # Zeile 316

klappt es wie erwartet.
In der Zeile 117 (sub HTTPAPI_CGI) habe ich mal testweise den Kommentar von

  readingsSingleUpdate($defs{$name}, 'request', $request, 0);

entfernt. Ich finde es hilfreich wenn im Modul der letzte Request dokumentiert wird.
Weiterhin ist es etwas unschön falls "get" keine Daten zurückgibt, ein "error=400 Bad Request" returned wird. Nicht jeder get-Befehl muß unbedingt einen String zurück liefern.

LG,
Heiko



Titel: Aw: 02_HTTPAPI - Attribute im Device funktionieren nicht wie erwartet
Beitrag von: klaus.schauer am 24 Mai 2024, 11:25:08
Hallo Heiko,
ich habe die Änderungen so übernommen. Weitergehende Tests hast Du ja schon gemacht. Lasse das noch ein paar Tage bei mir laufen, bevor ist das veröffentliche.
ZitatWeiterhin ist es etwas unschön falls "get" keine Daten zurückgibt, ein "error=400 Bad Request" returned wird. Nicht jeder get-Befehl muß unbedingt einen String zurück liefern.
Kann man sicher noch optimieren und die Fehlermeldung nur ausgeben, falls das Kommando oder das Reading nicht existiert.
ZitatWahrscheinlich brauche ich dann noch die Möglichkeit Internals auszulesen.
Bisher gab es dazu bei mir keinen Bedarf. Das Modul sollte bewusst möglichst kompakt und ohne unnötigen Ballast sein. Kann man aber sicher auch einbauen.
ZitatAber das würde ich dir im Forum vorschlagen.
Wenn es Dir nichts ausmacht, bitte eine Info über "persönliche Post". Ich lese regelmäßig nur wenige Foren.
ZitatWirf die ganzen Prototypen ($$$$) raus. Die machen nur Ärger beim reload 02_HTTPAPI und braucht man nicht.
Das verstehe ich nicht. Vielleicht kannst Du mir das mit einem Beispiel verdeutlichen.
Titel: Aw: 02_HTTPAPI - Attribute im Device funktionieren nicht wie erwartet
Beitrag von: DS_Starter am 24 Mai 2024, 11:35:27
Hallo Klaus,

danke. Melde mich wieder per PM.

LG,
Heiko
Titel: Aw: 02_HTTPAPI - Attribute im Device funktionieren nicht wie erwartet
Beitrag von: betateilchen am 24 Mai 2024, 14:34:32
Zitat von: klaus.schauer am 24 Mai 2024, 11:25:08
ZitatWirf die ganzen Prototypen ($$$$) raus. Die machen nur Ärger beim reload 02_HTTPAPI und braucht man nicht.
Das verstehe ich nicht. Vielleicht kannst Du mir das mit einem Beispiel verdeutlichen.

Verwende anstatt

sub HTTPAPI_Define($$) {
einfach

sub HTTPAPI_Define() {
Titel: Aw: 02_HTTPAPI - Attribute im Device funktionieren nicht wie erwartet
Beitrag von: klaus.schauer am 24 Mai 2024, 15:25:27
Ok verstanden. Die automatische Prüfung der Variablenliste finde ich aber nicht ganz nutzlos. Jedenfalls hat mich schon das eine oder andere Mal beim Umbau von Routinen vor Flüchtigkeitsfehlern bewahrt.

Weshalb kann es denn dadurch zu Ärger beim reload kommen?
Titel: Aw: 02_HTTPAPI - Attribute im Device funktionieren nicht wie erwartet
Beitrag von: DS_Starter am 24 Mai 2024, 16:36:00
ZitatWeshalb kann es denn dadurch zu Ärger beim reload kommen?
Führe mit deinem aktuellen Modul einfach mal ein reload 02_HTTPAPI aus. Dann wirst du es sehen.

Es gab zu Prototypen auch mal eine größere Diskussion/Abhandlung -> https://forum.fhem.de/index.php?topic=109526.msg1035088#msg1035088
Titel: Aw: 02_HTTPAPI - Attribute im Device funktionieren nicht wie erwartet
Beitrag von: klaus.schauer am 25 Mai 2024, 19:49:15
Heiko hat das Modul um die Funktion "readinternal" erweitert und ein paar Optimierungen vorgenommen. Danke dafür. Das aktuelle Modul steht mit dem nächsten Update zur Verfügung.