FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: SizZle am 26 April 2016, 21:07:28

Titel: Blinkanzeige von Telefonanrufen
Beitrag von: SizZle am 26 April 2016, 21:07:28
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!
Titel: Antw:Blinkanzeige von Telefonanrufen
Beitrag von: marvin78 am 26 April 2016, 21:10:34
Lass es doch blinken, bis ein event:.connect oder ein event:.disconnect kommt.
Titel: Antw:Blinkanzeige von Telefonanrufen
Beitrag von: SizZle am 26 April 2016, 21:16:36
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:
Titel: Antw:Blinkanzeige von Telefonanrufen
Beitrag von: SizZle am 03 Mai 2016, 18:59:23
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
Titel: Antw:Blinkanzeige von Telefonanrufen
Beitrag von: Puschel74 am 03 Mai 2016, 19:23:15
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.
Titel: Antw:[Gelöst]Blinkanzeige von Telefonanrufen
Beitrag von: SizZle am 03 Mai 2016, 19:43:16
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?
Titel: Antw:[Gelöst]Blinkanzeige von Telefonanrufen
Beitrag von: Wernieman am 03 Mai 2016, 20:45:11
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");
Titel: Antw:Blinkanzeige von Telefonanrufen
Beitrag von: SizZle am 05 Mai 2016, 19:19:15
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!