[patch] 99_Utils.pm - add round() function

Begonnen von betateilchen, 07 Februar 2015, 20:28:19

Vorheriges Thema - Nächstes Thema

betateilchen



Index: 99_Utils.pm
===================================================================
--- 99_Utils.pm (Revision 7910)
+++ 99_Utils.pm (Arbeitskopie)
@@ -237,6 +237,11 @@
   return $ret;
}

+sub round($$) {
+  my($v,$n) = @_;
+  return sprintf("%.${n}f",$v);
+}
+
1;

=pod
@@ -336,26 +341,10 @@
       nc replacement.
       </li></br>

-    <li><b>getUniqueId()</b><br>
-      return the FHEM uniqueID used by the fheminfo command. Uses the
-      getKeyValue / setKeyValue functions.
+    <li><b>round("value", "digits")</b><br>
+      round &lt;value&gt; to given digits behind comma
       </li></br>

-    <li><b>setKeyValue(keyName, value)</b><br>
-      store the value in the file $modpath/FHEM/FhemUtils/uniqueID (the name is
-      used for backward compatibility), or in the database, if using configDB.
-      value may not contain newlines, and only one value per key is stored.
-      The file/database entry will be written immediately, no explicit save is
-      required.  If the value is undef, the entry will be deleted.
-      Returns an error-string or undef.
-      </li></br>
-
-    <li><b>getKeyValue(keyName)</b><br>
-      return ($error, $value), stored previously by setKeyValue.
-      $error is set if there was an error.  Both are undef, if there is no
-      value yet for this key.
-      </li></br>
-
   </ul>
</ul>
=end html

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Wozu braucht man sowas? Ausser fuer die Ausgabe, und da hat man doch sprintf.
getUniqueId & co will ich rigendwo dokumentiert haben, auch wenn sie nach fhem.pl gewandert sind.

betateilchen

Zitat von: rudolfkoenig am 08 Februar 2015, 10:17:09
Wozu braucht man sowas?

Beispielsweise für einfache Verwendung in RSS und InfoPanel Layoutsdefinitionen. Ausserdem stolpere ich immer wieder darüber, dass perl offenbar die einzige Sprache ist, in der es round() nicht als eigene Funktion gibt.

Zitat von: rudolfkoenig am 08 Februar 2015, 10:17:09
getUniqueId & co will ich rigendwo dokumentiert haben,

Das macht durchaus Sinn.

Aber in der 99_Utils.pm wird höchstwahrscheinlich niemand die Dokumentation zu Funktionen suchen, die gar nicht in dieser Datei vorhanden sind. Vielleicht würde es in der 98_fheminfo mehr Sinn machen. Ausserdem sind einige "zentrale" Funktionen aus der fhem.pl bisher überhaupt nirgends dokumentiert, beispielsweise die Zeichensatzkonvertierungen oder die FileRead/FileWrite




-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Habs eingecheckt, aber die Doku von getUniqueId nicht entfernt.

In der Math::Round Paket gibt es ein round() und ein nearest(), allerdings ist Math::Round() nicht in der fb7270-er perl Paket enthalten. Du koenntest aber leicht sagen, dass InfoPanel auf dem FB7270 nicht unterstuetzt wird :)

betateilchen

Was spricht eigentlich dagegen, der fhem.pl einen commandref-Teil nur zur Dokumentation von solchen Funktionen wie getUniqueId etc. zu verpassen?

Bezüglich Math::Round: Es gäbe beispielsweise auch mit Time::Piece eine Menge Möglichkeiten, viele Zeitverarbeitungen innerhalb von fhem zu vereinfachen. Und Fritzboxen stehen bei meinen Modulentwicklungen genausowenig im Focus wie Microsoft Plattformen. Trotzdem versuche ich, so wenige zusätzliche Module wie möglich zu benötigen.

Solange die Unterstützung von AVM Hardware nicht offiziell abgekündigt wird, werden wir mit unseren Meinungen aber vermutlich nicht auf einen gemeinsamen Nenner kommen ;)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: rudolfkoenig am 08 Februar 2015, 12:16:30
Du koenntest aber leicht sagen, dass InfoPanel auf dem FB7270 nicht unterstuetzt wird :)


  • InfoPanel benötigt die round() Funktion nicht.
  • InfoPanel läuft (zumindest ab dem morgigen Update) auch auf FB7270, lediglich die Layout-Tags "img" und "trash" sind nicht nutzbar, wenn die beiden in der commandref genannten libraries fehlen. Das Einbinden von SVG plots funktioniert hingegen problemlos, allerdings ohne Skalierungsmöglichkeit im Layout. Diese Einschränkungen werden vom Modul selbst verwaltet.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!