Blinkanzeige von Telefonanrufen

Begonnen von SizZle, 26 April 2016, 21:07:28

Vorheriges Thema - Nächstes Thema

SizZle

Hallo zusammen,

ich möchte mit einem LED Controller (LW12) eine farbliche Visualisierung bestimmter Anrufergruppen auf der FritzBox realisieren.
Ziel ist es bei einer Übereinstimmung den LED Streifen in einer bestimmten Farbe blinken zu lassen. Leider klappt das nicht so wirklich :(

Zwar gehen die LEDs in der richtigen Farbe an, aber das mit dem blinken scheint nicht so einfach.
Ich habe es mit folgendem Code versucht:

Fritz_Box:event:.ring {
my $varIntNum = ReadingsVal("Fritz_Box", "internal_number", undef);
my $varExtNum = ReadingsVal("Fritz_Box", "external_number", undef);
if ($varExtNum eq "<TELEFONNUMMER>") {
fhem ("set LED_8 HSV 120,100,100");
while((ReadingsVal("Fritz_Box", "event", undef)) == "ring")
{
fhem ("set LED_8 HSV 120,100,100 1 q");
fhem ("set LED_8 HSV 120,100,0 1 q");
}
}
}


Ich glaube meine Schleife ist da nicht so passend... Gibt es eine andere möglichkeit, den LED Streifen blinken zu lassen, solange das Telefon klingelt?

Vielen Dank schon mal für eure Hilfe!

marvin78

Lass es doch blinken, bis ein event:.connect oder ein event:.disconnect kommt.

SizZle

Wenn es denn überhaupt mal blinken würde :D

Im Log sehe ich auch nur den Befehl vor der while Schleife. Also für mich macht das den Eindruck, dass der diese Schleife überhaupt nicht mag ....

Als Test habe ich jetzt noch folgendes versucht:
Fritz_Box:event:.ring {
my $varIntNum = ReadingsVal("Fritz_Box", "internal_number", undef);
my $varExtNum = ReadingsVal("Fritz_Box", "external_number", undef);
if ($varExtNum eq "") {
fhem ("set LED_8 HSV 120,100,100");
while(1)
{
fhem ("set LED_8 HSV 120,100,100 1 q");
fhem ("set LED_8 HSV 120,100,0 1 q");
my $CurrentStatus = ReadingsVal("Fritz_Box", "event", undef);
if($CurrentStatus  != "ring")
{
last;
}
}
}
}


Leider auch ohne Erfolg...
Im FHEM Log sehe ich nur diese eine Zeile:
Zitat2016.04.26 21:13:35 3: LED_8 set HSV 118, 95, 63 with ramp: 0, flags:

SizZle

Also habs jetzt wie folgt gelöst:

define di_Anruf_TEST DOIF ([Fritz_Box:event] eq "ring" and [Fritz_Box:external_name] eq "<AnruferName>")((set LED_8 HSV 118,95,63 1 q)(set LED_8 HSV 118,95,0 1 q))DOELSEIF([Fritz_Box:external_name] eq "<AnruferName>") ((set LED_8 HSV 118,95,0 1 q))
attr di_Anruf_TEST do always
attr di_Anruf_TEST repeatcmd 2

Puschel74

Danke das du deine Lösung hinterlässt.
Könntest du dem Titel deines ersten Beitrags bitte noch ein Gelöst hinzufügen - dann sehen andere das es eine Lösung gibt.
Danke.
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.

SizZle

Aber gerne doch.

Hätte nun aber noch eine kleine Frage.
Da ich den LED Streifen auch normal verwende, würde ich in der DOELSEIF gerne den initialen Wert setzen.
Also wenn die LEDs vorher blau waren, sollen sie nach dem geblinke wieder grau werden.

Wäre dann etwa so:
DOIF ([Fritz_Box:event] eq "ring" and [Fritz_Box:external_name] eq "<AnruferName>")(
>>$originalState = LED HSV
(set LED_8 HSV 118,95,63 1 q)
(set LED_8 HSV 118,95,0 1 q)
)DOELSEIF([Fritz_Box:external_name] eq "<AnruferName>") (
(set LED_8 HSV $originalState)
)


Kenne mich mit der Perl Syntax leider nicht so gut aus...Kann mir da eventuell jemand helfen?

Wernieman

Dein Ursprüngliches Problem dürfte daran liegen:
fhem ("set LED_8 HSV 120,100,100 1 q");
fhem ("set LED_8 HSV 120,100,0 1 q");

Fhem setzt den befehl ab und geht gleich zum nächsten ..... aber mal eine andere Frage, warum machst Du bei einem solchen Problem 2 fhem Zeilen auf? Besser .. und deterministischer:
hem ("set LED_8 HSV 120,100,100 1 q; set LED_8 HSV 120,100,0 1 q");
- 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

SizZle

Danke für den Tipp. Bin mit der Syntax leider noch nicht so vertraut :)

Aber zu meinem aktuellen Problem:
Wie kann ich den aktuellen Zustand des LED Streifens speichern, sodass ich diesen nach dem Anruf wiederherstellen kann?
Hier mein Versuch:

([Fritz_Box:event] eq "ring" and [Fritz_Box:external_name] eq "<Name>")({
my $LED8hue= ReadingsVal("LED_8", "hue", "");
my $LED8saturation= ReadingsVal("LED_8", "saturation", "");
my $LED8brightness= ReadingsVal("LED_8", "brightness", "");
fhem("set LED_8 HSV 118,95,63 1 q;set LED_8 HSV 118,95,0 1 q")
})DOELSEIF(
[Fritz_Box:external_name] eq "<Name>")(
(set LED_8 HSV $LED8hue,$LED8saturation,$LED8brightness 1 q)
)


Leider tut sich da überhaupt nichts. Also nicht mal das blinken geht mehr...
Wie gesagt bin ich was Perl angeht ein absoluter Anfänger, daher ist der Fehler hier vermutlich ziemlich einfach. Wäre aber sehr dankbar für eventuelle Lösungsvorschläge!