Wie baue ich "Endlosschleife" in ein Modul

Begonnen von Wernieman, 09 Januar 2014, 07:44:25

Vorheriges Thema - Nächstes Thema

Wernieman

Hallo (und guten Morgen),

ich bin gerade dabei, eine Unterstützung für mpd in fhem einzubauen.
Siehe auch http://forum.fhem.de/index.php/board,53.0.html

Jetzt hänge ich aber an einem Implementierungsproblem:
Mit mpc idle bleipt der Prozess stehen, bis eine Änderung im mpd stattfindet, so das man dann die Statusänderung in fhem machen kann. Ist also eine Event-Bassierte Lösung, die ich besser finde als simples Polling.

In Pseudocode:
Schleife Beginn
  Lesen Status mpd -> Update fhem
  mpc idle
Schleife Ende


Nur ..
a) wie implementiert man so etwas in fhem? Habe mich intensiv versucht in die Doku und den anderen beispielen zu knien, aber keine Lösung gefunden
b) Kann man in fhem auch Überwachen, ob die Schleife noch läuft? Sie dann Eventuell wieder starten bei problemen?

Ich weiß, das man es extern von fhem lösen könnte ... nur würde mir eine Implementierung in fhem besser gefallen.

Danke für Anregungen!

Werner
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

UliM

RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Wernieman

Hallo,

danke für die Info, genau die Doku habe ich nicht gefunden .. dann habe ich heute Abend viel Lesestoff ,o)

Gruß,
Werner
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

UliM

Hi,
Gern :)
Im Wiki gibt's auch ne Guideline für die Benennung von Befehlen für Video/Audiogeräte, aber die hast Du ja vmtl gefunden.
Gruß Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Wernieman

Hallo,

habe es mir in einer "pause" kurz durchlesen können. InternalTimer wird aber doch für Polling benötigt?

In diesem Falle bleibt aber die Abfrage so lange stehen, wie der "pseudosleep" "mpc idle" beendet wird.

Alternativ könnte ich mit "mpc ideloop" eine Dauerschleife als "pseudogerät" öffnen. Kann die fhem Funktion DevIo_OpenDev auch auf Programmausgaben angewendet werden?

Danke für eine Antwort .. schwimme noch sehr im Thema und habe auch noch keine analogdefinition gefunden, an der ich lernen könnte

Gruß,
Werner
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

justme1968

wenn die kommunikation mit dem mpd über ein socket geht musst du dieses in die fhem select list hängen und fhem ruft dann automatisch deine readFn auf sobald daten da sind.

schau dir mal z.b. das mailcheck oder itunes modul an. die verwenden das beide.

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

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

Wernieman

Über das Socket würde ich "nur" mitkriegen, das sich Daten geändert haben. Kann ich dann Problem los über das gleiche Socket Kommandos setzen und Daten empfangen?

Würde sogar den "Umweg" über die Konsole überflüssig machen ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

justme1968

wie gesagt kenne ich mpd nicht. prinzipiell und von fhem seite aus reicht ein socket.

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

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

Wernieman

O.K. danke schon mal für den Hinweis.

Rein Prinzipiell kann man dem Socket sagen, das er sich solange schlafenlegen soll, bis eine Statusänderung stattfindet. Dann meldet er sich zurück, das eine Änderung (im Modul XX) stattgefunden hat. Mann muß aber den genauen Status abfragen. Wenn man Ihn nicht schlafenlegt, gibt es einen TimeOut.

Alternativ (und bisher von mir wegen meiner Mangelnden Kenntnis verwendet) war die verwendung eines Kommandozeilenprogramms. Da gibt es die Möglichkeit zu pollen oder eben das Programm "schlafenzulegen". Wenn es aufwacht kann man eben den Output parsen. Nur .... wie geht es prinzipiell ...

Finde nur das itune-Device von Dir nicht ... wird scheinbar ein anstrengendes Wochenende ;o)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

justme1968

itunes ist hier im forum im threaf zu finden. im wiki ist auch ein link.

ein anderes beispiel wäre mailcheck. 

wenn du nach selectList Sucht findest so noch mehr module.

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

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

Wernieman

#10
Schon mal danke ... habe also genug zu lesen ;o)

P.S. nach selectList zu suchen bringt mir leider praktisch nicht :o(
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html