Hauptmenü

Sonnenstand berechnen

Begonnen von Loredo, 18 Mai 2013, 14:41:38

Vorheriges Thema - Nächstes Thema

Puschel74

Hallo,

zu
Zitat1. Modul von oben als 98_sunpos.pm im FHEM Ordner speichern und FHEM neu starten bzw rereadcfg ausführen.
müsste eigentlich auch ein
reload 98_sunpos.pm
reichen.

FHEM neu starten macht zwar das selbe aber das finde ich "etwas" übertrieben um ein Modul zu laden.

Aber ich möchte hier in keinster Weise deine Arbeit für FHEM kritisieren - also bitte nicht falsch verstehen ;-)

Aber eine Bitte hätte ich noch - könntest du das nochmal als 98_sunpos.pm hochladen - also die Datei und nicht den Code.
Danke

Grüße

P.S.: Ich werds mir geich mal runterladen und einbinden.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Loredo

Zitat von: Puschel74 schrieb am So, 09 Juni 2013 19:43
Zitat1. Modul von oben als 98_sunpos.pm im FHEM Ordner speichern und FHEM neu starten bzw rereadcfg ausführen.
müsste eigentlich auch ein
reload 98_sunpos.pm
reichen.

Ja. Ich schrieb ja auch rereadcfg geht genauso. So weit auseinander liegen die Befehle auch nicht. Letztendlich ist es nur ein Hinweis, dass man etwas in der Richtung tun muss. Bleibt jedem überlassen, wie er es ausführt :-)

Zitat von: Puschel74 schrieb am So, 09 Juni 2013 19:43Aber eine Bitte hätte ich noch - könntest du das nochmal als 98_sunpos.pm hochladen - also die Datei und nicht den Code.

Sorry, macht natürlich Sinn. Anbei!


Gruß
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Puschel74

Hallo,

danke erstmal für das PM-File ;-)

Aber bei rereadcfg denke ich an das neu einlesen der Konfig - und wenn das Modul noch nicht definiert ist bzw. das define in FHEM noch nicht programmiert ist wird auch das Modul nicht geladen (soweit mein Wissenstand).

Daher wird es da mit Sicherheit zu Nachfragen von Anfängern (wie mir) kommen.

Ein reload lädt das Modul - egal ob in FHEM schon was definiert ist um das Modul anzusprechen (glaube ich).
Aber ich kann damit auch völlig daneben liegen.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Loredo

Mit dem reload ist man sicher auf der sicheren Seite.
IMHO impliziert ein rereadcfg aber auch ein reload aller Module.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Puschel74

Hallo,

Zitat von: Loredo schrieb am So, 09 Juni 2013 19:55Mit dem reload ist man sicher auf der sicheren Seite.
IMHO impliziert ein rereadcfg aber auch ein reload aller Module.

Nur damit ich das auch endlich mal verstehe - danke für deine Geduld.

ALLER Module oder nur bestimmter Module?
99_xxx.pm wird, soweit ich weiß automatisch geladen.
Nur mit 98_xxx.pm kenn ich mich nicht so aus da ich meine immer unter 99_xxx.pm abspeichere und dann ein reload durchführe.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Loredo

Zitat von: Puschel74 schrieb am So, 09 Juni 2013 19:58Nur damit ich das auch endlich mal verstehe - danke für deine Geduld.

ALLER Module oder nur bestimmter Module?
99_xxx.pm wird, soweit ich weiß automatisch geladen.
Nur mit 98_xxx.pm kenn ich mich nicht so aus da ich meine immer unter 99_xxx.pm abspeichere und dann ein reload durchführe.

Keine Ahnung. Ausprobieren würd ich sagen.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Puschel74

Hallo,

ok. Mache ich.

Danke dir nochmal für deinen Einsatz und deine Geduld mit mir.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Dietmar63

readcfg liest alle Definitionen der fhem.cfg ein und lädt kein Modul neu ein.
Ein reload ersetzt den Code des Moduls im Laufzeitsystem, ist äußerst praktisch bei der Weiterentwicklung von Modulen.

Ich habe mir ein dummy gebastelt, das mit den passenden notifys die wichtigsten reloads bei mir per Knopfdruck ermöglicht:

define Befehl                 dummy
attr   Befehl                 webCmd rest:HC:99:RT:WOL:RR:PT:P1h



define BefehlUT               notify Befehl:99          {fhem ("reload 99_Utils_Ort")}
define BefehlRT               notify Befehl:RT          {fhem ("reload 98_RandomTimer")}
define BefehlHC               notify Befehl:HC          {fhem ("reload 98_Heating_Control")}

probiert es mal aus ist wirklich praktisch.

@Loredo:
wie/wann wird die sunpos_Notify Funktion aufgerufen?

In vielen Modulen wird dazu ein InternalTimer gesetzt. Mit dem folgenden Code wird sunpos_Notify alle 15 Minuten ausgeführt.
Am Besten in sunpos_Define einmal sunpos_Notify direkt aufrufen und am Ende von sunPos_notify den folgendne Code anhängen:

  my $nextTime = time() + 15*60;  
  RemoveInternalTimer($hash);
  InternalTimer($nextTime, "sunpos_Notify", $hash, 0);


Eigentlich könnte man das Modul gleich so erweitern, dass vom Modul selbst Ereignise wie
northeast, north-northeast, north ... gefeuert werden, wenn bestimmte azimuth-Werte erreicht werden:

 
  readingsBeginUpdate($hash);
  readingsBulkUpdate ($hash,  "sunpos", "north");
  readingsEndUpdate  ($hash,  defined($hash->{LOCAL} ? 0 : 1));


zu dieser Definition von sunpos:
define WeatherStation.sunpos sunpos WeatherStation
kann man dann die Ereignisse mit einem notify weiterverarbeiten:

define sunposAuswert notify WeatherStation.sunpos:.* { doAnything() }
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

stromer-12

Ich hatte auch nach einer Funktion gesucht, und habe da auch was gefunden und angepasst war in javascript.
Ist sogar etwas kürzer.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

Loredo

Hi Dietmar,

Zitat von: Dietmar63 schrieb am So, 09 Juni 2013 23:58wie/wann wird die sunpos_Notify Funktion aufgerufen?

In vielen Modulen wird dazu ein InternalTimer gesetzt. Mit dem folgenden Code wird sunpos_Notify alle 15 Minuten ausgeführt.
Am Besten in sunpos_Define einmal sunpos_Notify direkt aufrufen und am Ende von sunPos_notify den folgendne Code anhängen:

  my $nextTime = time() + 15*60;  
  RemoveInternalTimer($hash);
  InternalTimer($nextTime, "sunpos_Notify", $hash, 0);


Ja, beim Aufruf gibt es wirklich noch Probleme.
Momentan ist es wohl Zufall, dass sunpos_Notify aufgerufen wird. Ein Symptom scheint zu sein, dass die beiden Readings nicht nur bei dem gewollten Device (WeatherStation in meinem Fall, also das, was ich als Parameter bei der Definition mit angegeben habe), sondern auch bei anderen Devices. Vermutlich wird momentan die Funktion bei jeder Statusänderung ausgeführt und der Reading-Wert dann dem jeweiligen Device ebenfalls zugewiesen. Ich habe die anderen Module, die ich als Vorlage genommen habe, diesbezüglich leider nicht richtig verstehen können :-(

Wie löse ich das? Deine Zeilen hinzuzufügen dürfte dabei ja allein nicht ausreichend sein.

Zitat von: Dietmar63 schrieb am So, 09 Juni 2013 23:58Eigentlich könnte man das Modul gleich so erweitern, dass vom Modul selbst Ereignise wie
northeast, north-northeast, north ... gefeuert werden, wenn bestimmte azimuth-Werte erreicht werden:

 
  readingsBeginUpdate($hash);
  readingsBulkUpdate ($hash,  "sunpos", "north");
  readingsEndUpdate  ($hash,  defined($hash->{LOCAL} ? 0 : 1));


zu dieser Definition von sunpos:
define WeatherStation.sunpos sunpos WeatherStation
kann man dann die Ereignisse mit einem notify weiterverarbeiten:

define sunposAuswert notify WeatherStation.sunpos:.* { doAnything() }

die readings*Update Funktionen verstehe ich auch nicht.
Grundsätzlich ist es sicherlich eine gute Idee die Readings entweder nur dem mit dem sunpos Modul definierten Device zuzuordnen oder aber eben den Readings Wert (wie bei dem average oder dewpoint Modul) einem bestimmten Device mit zuzuordnen (so habe ich es bisher eigentlich angedacht gehabt, deshalb auch der Parameter "WeatherStation", um die neuen Readings dort zusätzlich zuzuweisen).

Ich kriege das leider nicht richtig sortiert wie so ein Modul auszusehen hat :-(
Gibt es da denn keine Doku oder ein Dummy-Modul zu? Ich finde den vorhandenen Code schwer zu lesen.


Gruß
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

Zitat von: str0mer schrieb am Mo, 10 Juni 2013 00:36Ich hatte auch nach einer Funktion gesucht, und habe da auch was gefunden und angepasst war in javascript.
Ist sogar etwas kürzer.

Schön, hast es aber nicht geteilt oder als Modul verfasst :-)
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

stromer-12

Ich habe es in deinen Modul eingebaut anstelle deiner Funktion.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

Loredo

Zitat von: str0mer schrieb am Mo, 10 Juni 2013 01:01Ich habe es in deinen Modul eingebaut anstelle deiner Funktion.

Danke, jetzt vermischt du mein Modul mit deinem, da es den selben Namen hat. Das dürfte sicherlich einige verwirren.
Ich schaue es mir auch mal an, letztendlich sollte es aber nur ein Modul geben, was dann alles macht. Das erhöht auch die Chance, dass es ins SVN kommt und alle es einfach benutzen können ;-)
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

stromer-12

Ich kann es wieder löschen.

Löschen geht nicht mehr.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

Dietmar63

ZitatJa, beim Aufruf gibt es wirklich noch Probleme.
Momentan ist es wohl Zufall, dass sunpos_Notify aufgerufen wird. Ein Symptom scheint zu sein, dass die beiden Readings nicht nur bei dem gewollten Device (WeatherStation in meinem Fall, also das, was ich als Parameter bei der Definition mit angegeben habe), sondern auch bei anderen Devices. Vermutlich wird momentan die Funktion bei jeder Statusänderung ausgeführt und der Reading-Wert dann dem jeweiligen Device ebenfalls zugewiesen. Ich habe die anderen Module, die ich als Vorlage genommen habe, diesbezüglich leider nicht richtig verstehen können :-(

Ich denke, dass es als erstes wichtig ist, dass du dir überlegst, wie dein Modul genutzt werden soll. Ich sehe da eigentlich nur eine Möglichkeit:
Dein Modul errechnet alle n Minuten den Azimuth und die Höhe der Sonne über dem Horizont für die gegebenen Koordinaten auf der Weltkugel.
Du führst drei Readings im Modul selbst ein

azimuth       (91°)
altitude      (46°)
compassPoint  north-east ...


Diese Readings werden dann ggf. alle n Minunten verändert. Ich denke alle 5 Minuten ist ein guter Wert: 24*60/360.  
Der Update der Readings führt dazu, dass alle notifys, die sich auf die Readings von sunpos beziehen, sofort feuern.  

Wenn du nichts dagegen hast sehe ich mir das Modul an und ändere es ensprechend.

Zitatdie readings*Update Funktionen verstehe ich auch nicht.
Grundsätzlich ist es sicherlich eine gute Idee die Readings entweder nur dem mit dem sunpos Modul definierten Device zuzuordnen oder aber eben den Readings Wert (wie bei dem average oder dewpoint Modul) einem bestimmten Device mit zuzuordnen (so habe ich es bisher eigentlich angedacht gehabt, deshalb auch der Parameter "WeatherStation", um die neuen Readings dort zusätzlich zuzuweisen).

Es ist mir nicht bekannt, dass eine solche Dokumentation gibt. Ich habe seit Anfang des Jahres auf der Basis von Twiglight Heating_Control entwickelt. Tobias hat mir geholfen. Inzwischen habe ich einen ganz guten Überblick. Das Problem ist manchmal, dass sich am Standard für die Modulentwicklung etwas ändert, und aufgrund der mangendend Doku nicht so klar ist.

Die Readings würde ich auch einführen.
Die Grundstruktur deines Moduls bleibt weitestgehend unangetastet - sieht schon ganz gut aus.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm