Hallo,
warum ist die Hilfe im Modul am Ende?
Perl wird so oder so immer die komplette File parsen (keine Spekulation) und keine Unterschiede in der Ausführungsgeschwindigkeit machen (reine Spekulation)
help.pm müsste immer durchparsen bis die Hilfe kommt (keine Spekulation)
MfG
ZitatPerl wird so oder so immer die komplette File parsen (keine Spekulation)
Stimmt so nicht ganz, für Perl-Module müssen immer mit einem "true" enden.
Deshalb enden die meisten Perl-Files mit einem
1;
Alles, was danach kommt, interessiert den Interpreter nicht mehr.
Daher kann man danach auch (so wie in diesem Falle) einfach HTML-Code (oder was auch immer) anhängen.
lg, Stefan[/code]
Hatte ich auch gedacht. Dem ist aber nicht so. Der HTML-Code ist auch nicht einfach so angehängt sondern ein Perl-konformer Kommentar. Bau doch mal einen Fehler nach dem 1; ein.
MfG
Also, zB mein OBIS-Modul endet ganz normal mit "true" (naja gut, halt mit einer "Art" true)
Und danach folgt plain HTML-Code
if (length($msg)>$msgLength*2) {
$valu=substr($msg,0,$msgLength*2);
$tmp.=$valu;
$msg=substr($msg,$msgLength*2);
}
# Log 3," Split Msg: $tmp $msg";
return $msgLength,$msgType,$valu,$msg,$tmp;
};
}
"Cogito, ergo sum.";
=pod
=item device
=item summary Collects data from Smartmeters that report in OBIS-Standard
=item summary_DE Wertet Smartmeter aus, welche ihre Daten im OBIS-Standard senden
=begin html
<a name="OBIS"></a>
<h3>OBIS</h3>
<ul>
This module is for SmartMeters, that report their data in OBIS-Standard. It dosen't matter, wether the data comes as PlainText or SML-encoded.
<br><br>
Mit "=pod" beginnt der Pod Block. Das ist kein HTML.
Da macht erst der Pod Formatter ein HTML draus.
Bau doch mal zwischen "1;" und "=pod" einen "Unsinn" rein, dann kommt ein Fehler. :)
LG,
Stephan.
Was genau ist Dein Wunsch oder Anliegen. Ich verstehe gerade die Diskussion nicht so wirklich.
Zitat von: CoolTux am 14 November 2019, 21:52:01
Was genau ist Dein Wunsch oder Anliegen. Ich verstehe gerade die Diskussion nicht so wirklich.
Hallo,
Es geht nur um die generelle Verbesserung der Ausführungsgeschwindigkeit. In help.pm ist ja noch Potential da.
Das einmaligen füllen von %cmds dauert so wie es ist zu lange. Muss aber sein. Auch die Identifizierung command|helper|device ist sinnvoll.
Hlp => "Command $mod not loaded. Use \"help $mods{$mod}\" for more help" könnte man besser machen wenn man schon alle Dateien nach command|helper|device durchsucht ...
Wie man die ladbaren Helpers und Devices (analog Commands) mit help.pm abruft ist mir auch unklar / nicht implementiert. Die Informationen werden aktuell extrahiert und nicht verwendet. Die item summary ist auch noch nicht abrufbar.
MfG
Ok ich verstehe nun was Du möchtest. Du hast ja definitive Thesen getroffen.
Der nächste Schritt wäre mit Messungen Deine Thesen Beweisbar zu machen. Um danach mittels besseren Code FHEM besser zu machen und die Community zu unterstützen.
Vielen Dank schon mal für Deine Mühe, die Community freut sich immer über Hilfe und Verbesserungen.
ich les mal mit und bin gespannt auf die messergebnisse :)
Eine weitere Idee:
- es könnten auch noch 10-20 Dummy-Module einfügt werden (Befehle aus FHEM.pl, Global - siehe Beispiel).
'help define' würde dann funktionieren.
- 'help' (Übersicht) könnte dann auch mehrsprachig funktionieren wenn %cmds{Befehl}Hlp = item summary (_DE) entspricht (damit gefüllt wird), keine Ahnung ob das so angedacht ist ???
- das Befüllen von %cmds{Befehl}Hlp in sub_command_Initialize ist sinnvoll, aber nicht brauchbar, da ja nicht alle Befehle geladen sind.
- einsprachige Hilfe aus Fhem.pl könnte dann auch raus.
MfG
Beispiel: 98_define.pm
=pod
=item command
=item summary [option] <name> <type> <options>, define a device
=item summary_DE [option] <name> <type> <options>, define a device
=begin html
<a name="define"></a>
<h3>define</h3>
<ul>
<code>define [option] <name> <type> <type-specific></code><br>
<br>
Define a device. You need devices if you want to manipulate them (e.g.
set on/off), and the logfile is also more readable if it contains e.g.
"lamp off" instead of "Device 5673, Button 00, Code 00 (off)". <br>
After definition, the global event "DEFINED" will be generated, see the
notify section for details.<br>
<br><br>
Each device takes different additional arguments at definition, see the
corresponding device section for details.<br>
<br>
Options:<br>
<ul>
<li>-temporary<br>
Add the TEMPORARY flag to the definition, which will prevent saving the
device to fhem.cfg.
</li><br>
<li>-ignoreErr<br>
Reduce the number of errors displayed when a certain FHEM-module cannot
be loaded. Used by fhem.cfg.demo, as using the RSS example requires the
installation of several uncommon perl modules.
</li><br>
</ul>
</ul>
=end html
=begin html_DE
<a name="define"></a>
<h3>define</h3>
<ul>
<code>define [option] <name> <type> <type-specific></code>
<br>
<br>
Definiert ein Gerät. Sie müssen Geräte einrichten um sie zu
beeinflussen (z.B. das Kommando set on/off auszuführen). Gleichfalls
ist das Logfile besser lesbar wenn es z.B. "lamp off" anstatt "Device 5673,
Button 00, Code 00 (off)" als Text enthält. <br>
Nach der Durchführung wird das globale Ereignis "DEFINED" generiert.
<br><br>
Je nach Typ benötigt man unterscheidliche Argumente, lesen Sie sich
bitte die zu dem jeweiligen Gerät gehörenden Abschnitte durch.
<br><br>
Optionen:<br>
<ul>
<li>-temporary<br>
Setzt den TEMPORARY Marker, was das Abspeichern dieser Definition in
fhem.cfg verhindert.
</li><br>
<li>-ignoreErr<br>
Reduziert die Anzahl der Fehlermeldungen, falls ein FHEM-Modul nicht
geladen werden kann. Wird in fhem.cfg.demo verwendet, da das RSS Beispiel
etliche, normalerweise nicht installierte perl-Module benötigt.
</li><br>
</ul>
</ul>
=end html_DE
=cut
1;
Ich stelle fest, dass der Threadersteller bisher eigentlich keinerlei konstruktive Beiträge geliefert hat. Alle seiner Posts laufen darauf hinaus, dass "man" in FHEM irgendwelche generellen Dinge ändern müsste oder sollte. Mag ja sein, dass so etwas als "Principal Strategist" zum Selbstverständnis gehört- aber ich stelle doch mal die ketzerische Frage nach der "hidden agenda".
LG
pah