Bei Anruf LED Lichtband auf bestimmte Farbe einstellen und anschließend zurück

Begonnen von Dedi75, 13 Oktober 2017, 16:29:36

Vorheriges Thema - Nächstes Thema

herrmannj

ja, mach gleich richtig. Der Aufwand ist nur marginal.

In %data benötigst Du einen Key exklusiv für Dich, zB:

%data{'phonesignal'}

Dort hinterlegst Du dann die alten Werte

%data{'phonesignal'}{'hue'} = ReadingsVal ... 'hue'  usw

Bei Ring sichern, bei disconnect rückschreiben.

Dedi75

Was mir dabei noch einfällt. Ich müsste ja hier auch noch die Zeit triggern, so dass die alten Werte nur zurückgeschrieben werden, wenn der disconnect innerhalb der 20 Sek. erfolgt.

Ich würde also den Wert nicht mehr im Notify speichern, sondern im %Data und dann jeweils auf diesen Wert zurückgreifen.

So würde ich mir dann den groben Ablauf vorstellen:

- Also erst einmal auf .ring reagieren
    Fritz_Monitor:event:.ring {my $d="Wohn_LED_01";

- Dann die Color pro Rufnummer hinterlegen.
    my %color; $color{"Anrufername1"}{"hue"}=140; $color{"Anrufername1"}{"sat"}=100; $color{"Anrufername1"}{"val"}=100;
    my %color; $color{"Anrufername2"}{"hue"}=140; $color{"Anrufername2"}{"sat"}=100; $color{"Anrufername2"}{"val"}=100;
  usw.


- prüfen ob es einen Wert in %Data{ring} gibt und dieser älter als 20 Sek. ist
    if (%Data{ring} größer als 20 Sek.) ?!?

wenn Wert in %Data{ring} älter als 20 Sek.
- alte Daten Speichern in %Data{phonesignal} - also versuchen diese Daten nun in Data zu speichern: my $h=ReadingsVal($d,"hue",0); my $s=ReadingsVal($d,"saturation",0); my
  $v=ReadingsVal($d,"brightness",0)

    ?!?

- ring in %Data{ring} Datum, Uhrzeit setzen
    ?!?

- set ausführen und Daten aus Data{phonebook} abholen
    fhem "set $d HSV $hue,$sat,$val; set $d HSV $hue,$sat,$val $t q; set $d HSV $h,$s,$v 0 q - muss noch angepasst werden

wenn wert in %Data{ring}nicht älter als 20 Sek.
- alte Werte NICHT in %Data speichern
    Nichts zu tun

- ring in %Data{ring} Datum, Uhrzeit setzen
    ?!?

- set ausführen und Daten aus Data{phonebook} abholen
    fhem "set $d HSV $hue,$sat,$val; set $d HSV $hue,$sat,$val $t q; set $d HSV $h,$s,$v 0 q - muss noch angepasst werden

Oh Gott - mal schauen ob ich das zusammen basteln kann  :o

Dedi75

Das mit der Wartezeit habe ich schon mal versucht einzubauen. Hab auch noch das Datum mit eingebaut, damit er dann nicht jeden Tag um die Uhrzeit auf Disabled steht.
@Jörg: Keine Sorge, dass andere mit dem Hash %Data verfolge ich weiterhin, aber ich muss das ganze erstmal iwie verstehen.

Es scheint aber irgendetwas noch nicht ganz korrekt, da ich folgenden Fehler erhalte:

2017.10.18 09:16:32 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 2519) line 1.
2017.10.18 09:16:32 3: eval: my $EVENT='event: ring';my $EVTPART0='event:';my $EVTPART1='ring';my $TYPE='FB_CALLMONITOR';my $NAME='FritzBox_Monitor';my $SELF='TelefonLED';{my $d="Wohn_LED_01"; my %color; $color{"Anrufername1"}{"hue"}=140; $color{"Anrufername1"}{"sat"}=100; $color{"Anrufername1"}{"val"}=100; $color{"Anrufername2"}{"hue"}=287; $color{"Anrufername2"}{"sat"}=100; $color{"Anrufername2"}{"val"}=100; $color{"Anrufername3"}{"hue"}=239; $color{"Anrufername3"}{"sat"}=100; $color{"Anrufername3"}{"val"}=100; my $call=ReadingsVal("FritzBox_Monitor","external_name",""); my $hue=0; my $sat=100; my $val=100; my $aktZeit={strftime("%Y-%m-%d %H:%M:%S",localtime)}; my $WarteZeit={strftime("%Y-%m-%d %H:%M:%S",localtime time+10)}; if (exists($color{$call})) {$hue=$color{$call}{"hue"}; $val=$color{$call}{"val"}; $sat=$color{$call}{"sat"};} my $t=20; my $h=ReadingsVal($d,"hue",0); my $s=ReadingsVal($d,"saturation",0); my $v=ReadingsVal($d,"brightness",0); fhem "set $d HSV $hue,$sat,$val; set $d HSV $hue,$sat,$val $t q; set $d HSV $h,$s,$v 0 q; attr TelefonLED disabledForIntervals $aktZeit-$WarteZeit";}


Dieses hat er mit nun bei disabledForIntervals reingeschrieben.
disabledForIntervals - HASH(0x1f80468)-HASH(0x339b220)


Hier noch das aktuelle DIF:
FritzBox_Monitor:event:.ring {my $d="Wohn_LED_01"; my %color; $color{"Anrufername1"}{"hue"}=140; $color{"Anrufername1"}{"sat"}=100; $color{"Anrufername1"}{"val"}=100; $color{"Anrufername2"}{"hue"}=287; $color{"Anrufername2"}{"sat"}=100; $color{"Anrufername2"}{"val"}=100; $color{"Anrufername3"}{"hue"}=239; $color{"Anrufername3"}{"sat"}=100; $color{"Anrufername3"}{"val"}=100; my $call=ReadingsVal("FritzBox_Monitor","external_name",""); my $hue=0; my $sat=100; my $val=100; my $aktZeit={strftime("%Y-%m-%d %H:%M:%S",localtime)}; my $WarteZeit={strftime("%Y-%m-%d %H:%M:%S",localtime time+10)}; if (exists($color{$call})) {$hue=$color{$call}{"hue"}; $val=$color{$call}{"val"}; $sat=$color{$call}{"sat"};} my $t=20; my $h=ReadingsVal($d,"hue",0); my $s=ReadingsVal($d,"saturation",0); my $v=ReadingsVal($d,"brightness",0); fhem "set $d HSV $hue,$sat,$val; set $d HSV $hue,$sat,$val $t q; set $d HSV $h,$s,$v 0 q; attr TelefonLED disabledForIntervals $aktZeit-$WarteZeit";}

Oh man - ich glaub ich raff das nie wie das ordentlich geschrieben wird  :o

Mir ist noch aufgefallen, dass wenn er das attr disabledForIntervals schreibt, FHEM ja auch ein Save haben möchte. Muss das unbedingt. Ist ja eigentlich egal, da ich den Wert nicht länger brauche oder sollte man das noch iwie berücksichtigen?

Dedi75

Ok ich hab es nun:
disabledForIntervals - 2017-10-18 11:49:23-2017-10-18 11:49:33

Nun mal schauen, ob er das auch so in dem Format wirklich korrekt macht - teste ich heute Abend.

die {} waren zuviel in dem:
my $aktZeit={strftime("%Y-%m-%d %H:%M:%S",localtime)}; my $WarteZeit={strftime("%Y-%m-%d %H:%M:%S",localtime time+10)};

Richtig nun so:
my $aktZeit=strftime("%Y-%m-%d %H:%M:%S",localtime); my $WarteZeit=strftime("%Y-%m-%d %H:%M:%S",localtime time+10);

Das mit den Klammern versteh ich nie  >:(

Dedi75

Ok das "disabledForIntervals" arbeitet wohl nicht mit einem Datum - SCHADE

ZitatdisabledForIntervals HH:MM-HH:MM HH:MM-HH-MM...
Optionales Attribut zur Deaktivierung der Anrufliste innerhalb von bestimmten Zeitintervallen. Das Argument ist eine Leerzeichen-getrennte Liste von Minuszeichen-getrennten HH:MM Paaren (Stunde : Minute). Falls die aktuelle Uhrzeit zwischen diese Werte fällt, dann wird die Ausführung, wie bei disable, ausgesetzt. Statt HH:MM kann man auch HH oder HH:MM:SS angeben.

Um einen Intervall um Mitternacht zu spezifizieren, muss man zwei einzelne Intervalle angeben, z.Bsp.:
23:00-24:00 00:00-01:00
Standardwert ist nicht gesetzt (dauerhaft aktiv)