neues Modul Astro.pm

Begonnen von Prof. Dr. Peter Henning, 05 Juli 2017, 21:39:21

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

Für mein in Arbeit befindliches Hausautomatisierungsmodul habe ich etwas mehr Daten über Sonne und Mond benötigt.
Ich habe mir daher erlaubt, die Routinen von dieser Seite hier: http://lexikon.astronomie.info/java/sunmoon/ von ein paar kleineren Fehlern zu befreien und nach Perl zu migrieren.

Resultat ist das angehängte Modul. Dazu sollten für den eigenen Standort die globalen Attribute
(Edit: Modul ist eingecheckt und wird per Update verteilt)

attr global longitude <wert>
attr global latitude <wert>
attr global altitude <wert>


gesetzt werden. Mit
define IRGENDEINNAME Astro
wird dann ein Astro-Device angelegt, dessen Readings periodisch upgedated werden (default 1 Stunde), das aber auch mit Parametern aufgerufen werden kann.

Der Nutzen liegt z.B. darin, dass man sich für einen Tag in der Zukunft den Sonnenaufgang anzeigen lassen kann.

LG

pah

betateilchen

Falls es erlaubt ist, ohne dass mir wieder irgendeine Geflügelverschlepperei nach Südosteuropa vorgeworfen wird, hier (m)ein Tipp zum einfachen automatischen Laden des Moduls in FHEM:


  • die Moduldatei habe ich umbenannt in AstroUtils.pm (ohne Zahl davor)
  • am Anfang meiner 99_myUtils.pm habe ich ein "require AstroUtils;" eingefügt

Da die 99_myUtils.pm beim FHEM-Start vor allen anderen Moduldateien geladen wird, ist somit sichergestellt, dass die Funktionen aus dem Modul sehr frühzeitig verfügbar sind und es keine Probleme gibt, falls irgendein Device darauf zugreifen möchte.

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

Prof. Dr. Peter Henning

Udo, ich baue noch ziemlich viel an diesen Dingen herum - eventuell wird daraus sogar ein Astro"-Device.

LG

pah

betateilchen

#3
Wenn das mein Modul wäre, würde ich die Werte einfach als JSON zurückliefern, fhem.pl stellt dazu seit einiger Zeit eine eigene Funktion toJSON() bereit, mit der man beliebige Datentypen (scalar, array, hash) auf simpelste Weise in json konvertieren kann.

Zitat von: Prof. Dr. Peter Henning am 06 Juli 2017, 06:33:14
eventuell wird daraus sogar ein Astro"-Device.

Dann hättest Du aber immer noch das "Reihenfolge-Problem" beim Start von FHEM, sofern andere devices auf readings dieses Astro-devices zugreifen wollen, bevor es definiert ist.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Prof. Dr. Peter Henning

#4
Wieso ich ?

LG

pah

betateilchen

Weil Du als Maintainer eines solchen zukünftig vielleicht existierenden Moduls den Anwendern das Verhalten im "Fehlerfall" erklären müsstest  :P
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

es gibt irgendwo einen thread bei dem es um die abhäbgigkeit von devices untereinander ging und die probleme die es beim start machen kann.

diese probleme kann man vermeiden in dem man nicht in der DefineFn versucht aufs andere device zuzugreifen sondern erst verzögert nach dem fhem komplett läuft. die verzögerungen bekommt man entweder durch eine NotifyFn auf global:INITIALIZED oder durch einen InternalTimer mit verzögerung 0.

d.h. es ist aufgabe des benutzenden moduls und nicht des bereitstellenden moduls das 'richtig' zu machen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Prof. Dr. Peter Henning

#7
@betateilchen: "Müsste", soso. Wie gesagt:
ZitatWurks. :'(
Sehe ich nicht so.

@justme1968: Das geht noch viel einfacher. Selbstrverständlich kann man in jedem eigenen Modul auch ein
require "95_Astro.pm";
an den Anfang setzen. Und sogar ohne Definition eines Astro-Devices auf die somit bekannten Routinen zugreifen. Etwa per
Astro_Get( IRGENDEINE HASH REFERENZ,"dummy","text", "SunRise","2019-12-24");
um den Sonnenaufgang an Heiligabend 2019 zu bekommen.

LG

pah

justme1968

das oben bezog sich auf den zugriff auf readings.

klar geht der aufruf einer routine auch direkt. jedenfalls so lange das andere modul damit klar kommt das es eventuell noch kein eigenes device und irgendwelche initialisierungen noch nicht gelaufen sind die z.b. eigene attribute benötigen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

betateilchen

Zitat von: Prof. Dr. Peter Henning am 07 Juli 2017, 09:13:53
@justme1968: Das geht noch viel einfacher. Selbstrverständlich kann man in jedem eigenen Modul auch ein
require "95_Astro.pm";
an den Anfang setzen. Und sogar ohne Definition eines Astro-Devices auf die somit bekannten Routinen zugreifen. Etwa per
um den Sonnenaufgang an Heiligabend 2019 zu bekommen.

Das ist doch genau das,

was ich in meinem Beitrag https://forum.fhem.de/index.php/topic,73951.msg656393.html#msg656393

vorgeschlagen habe? Wenn man das require in die 99_myUtils.pm packt,


  • muss man das nur einmal tun
  • KANN das auch jeder Anwender tun, weil es "seine" Datei ist
  • hat man die Funktionen aus einem so geladenen Modul zum frühestmöglichen Zeitpunkt zur Verfügung und muss sich über Reihenfolgen keine Gedanken mehr machen. Warum nicht einfach die Mechanismen nutzen, die FHEM bereits bietet?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Prof. Dr. Peter Henning

Leute, worüber diskutieren wir hier eigentlich ?

Udo wollte mir ausreden, daraus ein Device zu machen. Wollte ich aber. Ich habe gepostet, dass man _seinen_ Vorschlag auch mit einem Device-Modul umsetzen kann.

Also herrscht doch Mir, Druschba, Blini.

LG

pah

Morgennebel

Zitat von: Prof. Dr. Peter Henning am 07 Juli 2017, 10:09:30
Also herrscht doch Mir, Druschba, Blini.

Klär mich auf, bitte...

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

CoolTux

Zitat
Hi KugelblitzIn, sollte Tevje der MiLchmann die Milch der frommen Denkungsart hier ausgegossen haben ? Dann würden ja Mir, Druschba, Blini herrschen und alle Kratzbäume wären mehr als flüssig... ;-) Und wo bleibt unser geliebter Zoo aus den diversen (Un) Tierchen ?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

justme1968

zum eigentlichen thema:

wie wäre es pro device den globalen standort mit instanz attributen überschreiben zu können um sich ein device mit den readings für einen anderen ort anzulegen?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Prof. Dr. Peter Henning

André: Gute Idee. Ich schau mal auf mein Zeitbudget.

Morgennebel: Friede, Freundschaft, Eierkuchen (nicht ganz, aber die sind dort unbekannt).

LG

pah