[gelöst] Warten auf presence eines AVR im Netzwerk?

Begonnen von Gernott, 16 Januar 2014, 00:07:28

Vorheriges Thema - Nächstes Thema

Gernott

Hallo

Ich habe folgende Problematik und würde mich über einen Lösungshinweis freuen. Ein Yamaha AVR hängt an einer Steckerleiste, zusammen mit einer Fritzbox, die den Netzwerkzugang für Internetradio über WLAN bereitstellt. Die Steckdosenleiste wird durch eine Fritzdect 200 überwacht und im Standby komplett abgeschaltet, einschließlich der Fritzbox.

Für meine Familie habe ich jetzt eine 1-Button-Lösung programmiert, die folgendes macht:
Wenn die Steckdose aus ist --> einschalten. Nun braucht die Fritzbox aber einige Zeit zu starten und der AVR benötigt dann noch Zeit, bis er "present" meldet. Erst dann kann die Abfolge weiterer Kommandos an den AVR gesendet werden.

Zur Zeit mache ich es mit einer festen Wartezeit von 2 min:


sub startNetRadio()
{
if (Value('FBDECT_16') eq "Aus") {
  fhem "set FBDECT_16 on";
  sleep 120;
}
if (ReadingsVal('AV_Receiver', 'state', 0) eq "off") {
  fhem "set AV_Receiver on";
  sleep 5;
}
fhem "set AV_Receiver volumeStraight -55";
sleep 2;
fhem "set AV_Receiver input netradio";
sleep 4;
fhem "set AV_Receiver remoteControl enter";
sleep 2;
fhem "set AV_Receiver remoteControl enter";
}


Geht das Warten auf die Netzwerkferfügbarkeit des AVR etwas eleganter, z.B. mit einem einmaligen notify auf das Reading presence oder state, die beide bei Nichtverfügbarkeit "absent" melden?

Viele Grüße
G.

chris1284

wie wäre es mit einem at?
du definierst ihn zur laufzeit und schaust zb alle x minuten/sekunden ob der AVR present ist. Wenn ja wird der at wieder glöscht und der rest-code ausgeführt.


Gernott

Hallo

Danke für die Antwort. Leider bin ich nicht so fit. Hättest Du bitte mal ein Beispiel?

Gruß
G.

Puschel74

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.

Gernott

Hallo

habe jetzt mal folgendes probiert. Ein notify mit folgendem code in DEF


virtueller_Aktor_Btn2.(ON|OFF) {
if (Value('FBDECT_16') eq "Aus") {
  fhem("set FBDECT_16 on");
}
if (ReadingsVal('AV_Receiver', 'state', 0) eq "absent") {
  fhem("define av.wait_until_present notify AV_Receiver.(on|off) delete av.wait_until_present;;set TestSchalter on")
} else {
    fhem("set TestSchalter on");
   }
}


Zur Laufzeit wird das notify "av.wait_until_present" angelegt, was sich im Erlebensfall (AV_Receiver ändert seinen Satus von absent nach on oder off) selbst löscht und dann die Aktion (hier: Einschalten eines dummy TestSchalter) ausführt.

Nun zu meiner Frage: Ist das eine sinnvolle Vorgehensweise oder kann so etwas zu Problemen führen?
Ich würde eventuell das temporäre notify auch noch nach einer festgesetzten Zeit löschen, falls der AV_Receiver sich aus irgendwelchen Gründen nicht mit on oder off meldet.

Gruß
G.

Gernott

Zum Abschluß - ich mache das jetzt mit dem notify so:

virtueller_Aktor_Btn2.(ON|OFF) {
fhem("attr av.netSWR3on disable 1");
if (Value('FBDECT_16') eq "Aus") {
  fhem("set FBDECT_16 on");
}
if (ReadingsVal('AV_Receiver', 'state', 0) eq "absent") {
  fhem("define av.wait_until_present notify AV_Receiver.(on|off) delete av.wait_until_present;;{startNetRadio()}");
  fhem("define a1 at +00:04:00 {deleteDefineIfExists('av.wait_until_present')}")
} else {
    fhem("{startNetRadio()}");
   }
}


Wenn der AV-Receiver absent meldet, wird zur Laufzeit ein notify gesetzt, was beim Erscheinen des AV-Receivers im Netzwerk (state on oder off) wieder gelöscht wird. Falls irgendwas schief geht, wird das notify nach 4 min wieder entfernt.

Gruß
G.