Neue Version von HTTPMOD mit neuen Features zum Testen

Begonnen von StefanStrobel, 05 Dezember 2015, 08:31:32

Vorheriges Thema - Nächstes Thema

Augschburger

Hallo Stefan,

vielen Dank! So klappt's jetzt ganz wunderbar.
Ich Depp hab mir immer nur den Inhalt von "buf" nach regexr.com kopiert und bin nie auf die Idee gekommen, die Seite mal mit wget zu holen.  >:( :-X

Aber Dein <td [^>]+>
verstehe ich nicht. Kannst Du mir das bitte noch kurz erklären? ^=Zeilenanfang, aber dann müssen doch zwei schließende spitze Klammern kommen, damit das matched, oder? Nein, blöde Frage, die kommen ja nicht und es matched trotzdem. Ich kapier's nicht.

Und warum funktioniert an den beiden Stellen (vor "2/6" und "Heute")
  <tr class="tr1">
    <td style="width:100%; font-weight: bold;"><a href="/alpspitz-edelsberg-ostallgaeu/schneebericht/">Alpspitz / Edelsberg - Nesselwang</a></td>
    <td class="right nowrap" width="40">20 cm</td>
    <td class="right nowrap" width="40">20 cm</td>
    <td class="right nowrap" width="40">-</td>
   
    <td class="center nowrap"
        style="color: #999999;">
        2/6</td>
    <td style="padding-top: 2px; padding-bottom: 0; padding: 0; padding-top: 2px;"><img src="/images/icons/lifte-pisten/status1.png" border=0 width=17 height=17></td>
    <td class="right nowrap" width="100" >
    Heute, 07:00
    </td>
  </tr>

das <td.*?>
nicht, das müsste doch immer matchen? Oder pfuscht da fhem dazwischen? Mit anderen Worten, selbst wenn ich einen Parser in myUtils schreiben würde, hätte ich dasselbe Problem? Oder würde dort das ".*?" funktionieren?

Danke nochmal!
  Hans-Jörg

StefanStrobel

Hallo Hans-Jörg,

zwischen den [] Klammern werden die erlaubten Zeichen aufgelistet. Ein ^ negiert das. [^>]+ bedeutet also "mehrfach irgendetwas, nur kein >". Ich vermute dass das .*? an den Zeilenumbrüchen scheitert. Fhem ist da unschuldig.

Gruss
    Stefan

Augschburger

#107
Hallo Stefan,

Danke! Das macht Sinn. Das Negieren hatte ich komplett vergessen...
So sieht's dann aus:
(http://up.picr.de/24504721ie.png)

Viele Grüße,
  Hans-Jörg

Bootscreen

Moin,

ich weiß nicht warum, aber heute hat sich mein HTTPMOD nach nem Update auf den Stand von letztem Jahr zurückgesetzt. Also hab ich es aus dem ersten Post neu runtergeladen und in FHEM integriert und hab folgende Meldung bekommen:
Too many arguments for main::HTTPMOD_AddToQueue at ./FHEM/98_HTTPMOD.pm line 741, near "1)"
BEGIN not safe after errors--compilation aborted at ./FHEM/98_HTTPMOD.pm line 1115.


Hab jetzt erstmal eine Version aus meinem Backup genommen, vllt sollte da aber nochmal nachgeschaut werden.
Gruß
Oliver

FHEM 5.7 Hardware:
Raspberry PI B+ | HomeMatic USB 2 | 433Mhz Sender (pilight) | nanoCUL (433Mhz)

Gernott

Zitat von: Bootscreen am 09 Februar 2016, 11:04:45
Also hab ich es aus dem ersten Post neu runtergeladen und in FHEM integriert und hab folgende Meldung bekommen:
Too many arguments for main::HTTPMOD_AddToQueue at ./FHEM/98_HTTPMOD.pm line 741, near "1)"
BEGIN not safe after errors--compilation aborted at ./FHEM/98_HTTPMOD.pm line 1115.


Bei mir dieselbe Fehlermeldung, nach Erstimplementierung.
Gruß
G.

StefanStrobel

Hallo Oliver und Gernott,

kann es sein, dass Ihr das neue Modul eingespielt habt und dann reload 98_HTTPMOD.pm eingegeben habt und nicht shutdown restart?
In den neuen Versionen haben sich die Aufruf-Parameter bei einigen Funktionen geändert. Wenn man dann das alte Modul bereits geladen hat und dann das Neue nachläd, passen wohl die alten Prototypen-Definitionen nicht zum neuen Code.
Ich wüsste nicht was ich dagegen tun kann. Nach einem Restart sollte aber alles ok sein.

Gruss
    Stefan

Gernott

Hallo Stefan

Ja, Deine Annahme stimmt. So stand es auch irgendwo im eq3-Firmwareholen-Thread. Habe nun mal einen Restart gemacht. Damit war das Problem erledigt. Im Log stehen auch keine Fehler.

Vielen Dank!

Gruß
G.

OppiM

Hi,

ich benutze die aktuelle Version vom 5.2. um eine XML Struktur auszuwerten. Funktioniert sehr gut, allerdings habe ich diesen Fehler im Log:

error deleting XPathStrict nodeset: Can't call method "cleanup" on an undefined value at ./FHEM/98_HTTPMOD.pm line 1546.


Außer ist mir FHEM ein paarmal quasi eingefroren, das Log wurde zu diesem Zeitpunkt mit folgenden Einträgen gefüllt:
Cannot fork: Cannot allocate memory

Diese Fehler treten auch erst auch, seitdem ich die neuere Version von HTTPMOD benutze. Kann das zusammenhängen?

Gruß,
Michael

frank

#113
Cannot fork: Cannot allocate memory
dein speicher ist zu klein. mit stacktrace kannst du wahrscheinlich erfahren, wer speicher haben wollte.

bei meiner fritzbox kommt es auch hin und wieder, besonders gern mit plotfork=1. nach einem reboot ist dann erstmal wieder gut, bis zur nächsten überforderung. wenn du pech hast, killt der kernel dein fhem.

@stefan
falls die meldung durch httpmod ausgelöst wurde, wäre es schön, wenn zu diesem fehler auch etwas im reading LAST_ERROR erscheinen könnte.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

OppiM

Hallo Frank,

Zitatdein speicher ist zu klein.
und da denkt man, 8GB Hauptspeicher sollten für ein Linux-System erst mal reichen...

Ich hab gerade mal nach der Speichernutzung von FHEH gesehen, obwohl ich FHEM heute Nachmittag wg. dem Fork-Fehlers neu gestartet hatte, war der FHEM-Prozess schon auf 4GB (!) Speicher angewachsen. Allein beim Schreiben dieses Beitrags ist der FHEM-Prozess wieder von 232M (direkt nach dem Start) auf über 280M angewachsen.

Gibt es eine Möglichkeit festzustellen, welches Modul von FHEM sich den Speicher nimmt? stacktrace hab ich mal gesetzt.

Gruß,
Michael

frank

ich muss mit 125k auskommen und davon will die fritzbox auch noch was, ... man wie ungerecht.  8)
jeder fork dupliziert quasi fhem. eine fhem instanz bekommt bei mir ca 30-40k.
bei diesen gbyte mengen tippe ich bei dir auf dblog, oder du hast noch was anderes laufen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

StefanStrobel

Hallo Michael,

Hast Du evt. Einen CubieTruck?
Da hat die XML Bibliothek scheinbar ein Memory leak.

Gruß
   Stefan

OppiM

Hi Stefan,

nein, FHEM läuft auf meinem Linux-Server (Ubuntu, Core i3, 8GB Speicher), der bei mir alle Serveraufgaben abdeckt (SMB, Proxy, MRTG, mySQL, etc.).

Und da der ehr 24x7 läuft, kann er dann auch FHEM mit abdecken. CPU und Speicher sollten da eigentlich für ausreichen, aber in letzter Zeit ist FHEM da sehr gierig geworden. Könnte es an der Umstellung auf DbLog liegen?

Gruß,
Michael

StefanStrobel

Hallo Michael,

versuch doch den Fehler einzugrenzen, indem Du einzelne Teile für eine Weile deaktivierst und den Speicherverbrauch alle 10 Minuten protokollierst.

Gruss
    Stefan

StefanStrobel

Hallo,

ich habe gerade wieder eine neue Version zum Testen an den ersten Post hier gehängt. Diesmal gibt es ein paar größere Änderungen:

Ich habe setKeyValue und GetKeyValue eingebaut, damit man Passwörter außerhalb der Konfiguration speichern kann.
Zum Setzen muss enableControlSet auf 1 stehen, dann gibt es einem Set-Befehl mit Option storeKeyValue. Dem kann man einen key, z.B. password und einen Wert, z.B. geheim geben. z.B.:

set storeKeyValue password geheim


Zum Verwenden des Passwortes definiert man ein eigenes Replacement mit Mode key, z.B.:

attr mydevice get05Name profile
attr mydevice get05URL http://www.mydevice.local/getprofile?password=%%password%%
attr mydevice replacement02Mode key
attr mydevice replacement02Regex %%password%%
attr mydevice get05Replacement02Value password


Dadurch dass ich in der neuen Version auch bei Get-Kommandos Eingabeparameter erlaubt habe und bei Set-Kommandos das Parsen der Response, sind die Attribute, die auf Map und Expr enden, nicht mehr eindeutig. Früher war Map bei Get für die Ausgabeumwandlung und bei Set für die Eingabeumwandlung zuständig. Heute passt das so alles nicht mehr vernünftig.
Deshalb habe ich IMap und IExpr für die Eingabeverarbeitung und OMap und OExpr für die Ausgabeaufbereitung eingeführt. Die alten Map und Expr Attribute sind damit überholt.

Da es noch einige andere Altlasten in den Attributen gibt - z.B. die Uralt-Syntax readingsNameTemp Temperatur o.ä., enableXPath mit xpath: in der Regex etc. habe ich einen Set-Befehl eingebaut, der die alten Attribute in die neuen verwandelt.

set upgradeAttributes

Bitte vorsichtig testen und vorher die Konfiguration sichern. Bei mir hat es zwar schön funktioniert, aber das muss nichts bedeuten ;-)

Wer noch alte Attribute verwendet bekommt jetzt entsprechende Log-Meldungen.

Für Leute mit SSL-Problemen gibt es das neue Attribut sslArgs. Das kann z.B. so gesetzt werden:

attr myDevice sslArgs SSL_verify_mode,SSL_VERIFY_NONE

Dann findet keine Verifikation mehr statt, was die Sicherheit aushebelt, aber möglicherweise nötig ist, wenn man Geräte mit illegalen Zertifikaten auslesen möchte und die Zertifikate nicht ausgetauscht werden können. Der Wert des Attributes wird in einen Hash gewandelt und an HttpUtils übergeben.
Ebenso gibt es die neuen Attribute sslVersion und httpVersion. Die Werte werden jeweils an HttpUtils durchgereicht.

Gruss
    Stefan