Philips Hue Strips mit Homematic Bewegungsmelder steuern

Begonnen von Asteal, 17 Februar 2019, 22:16:29

Vorheriges Thema - Nächstes Thema

Asteal

Hallo,

folgendes Projekt habe ich bis jetzt soweit umgesetzt:

1. Homematic Bewegungsmelder steuern Homematic Dimmer mit folgender direkt Peeriung:


set BewegungsmelderVorraumEcke_Motion peerChan 0 DimmerVorraumEcke_Dim single
set BewegungsmelderVorraumEcke_Motion regSet minInterval 60
set DimmerVorraumEcke_Dim regSet shOnTime 120 BewegungsmelderVorraumEcke_Motion
set DimmerVorraumEcke_Dim regSet shDimJtOn on BewegungsmelderVorraumEcke_Motion
set DimmerVorraumEcke_Dim regSet shCtValLo 0 BewegungsmelderVorraumEcke_Motion
set DimmerVorraumEingang_Dim regSet shCtValHi 60 BewegungsmelderVorraumEcke_Motion
set DimmerVorraumEcke_Dim regSet shCtOff ltHi BewegungsmelderVorraumEcke_Motion
set DimmerVorraumEcke_Dim regSet shCtOn ltHi BewegungsmelderVorraumEcke_Motion


2. Die Bewegungsmelder steuern die Philips Hue LED Streifen:


define Befehl_LichtVorraumLEDBewegungsmelder BewegungsmelderVorraumEcke_Motion:motion.* set HUEDevice15,HUEDevice14 rgb FFA100; setreading $SELF bri-calc 100; set HUEDevice15,HUEDevice14 on-for-timer 120


Sollen aber nur zwischen 21 und 6 Uhr funktionieren:

define Befehl_ZeitsteuerungLED_OFF at *06:00:00 { if (($wday == 1,2,3,4,5,6,7) && (($hour >= 6 || $hour < 21))) { fhem("set Befehl_LichtVorraumLEDBewegungsmelder inactive") } }
define Befehl_ZeitsteuerungLED_ON at *21:00:00 { if (($wday == 1,2,3,4,5,6,7) && (($hour >= 21 || $hour < 6))) { fhem("set Befehl_LichtVorraumLEDBewegungsmelder active") } }


Die Tasten des Bewegungsmelders habe ich noch aus einem anderen Post übernommen und kann so auch nochmal die Farben separat steuern:

define Befehl_LichtVorraumLED notify BewegungsmelderVorraumEcke set HUEDevice15,HUEDevice14 toggle (danach editieren)

BewegungsmelderVorraumEcke_Btn_(Unten|Oben):(Short|Long).* {
    Log3($SELF, 5, $EVENT);

    if ($EVENT =~ qr/(Short|Long) ([0-9]*)_.*/p) {
        my $targetDevs = "HUEDevice15,HUEDevice14";
        my $maxBri = 254;
        my $duration = $1;
        my $counter = $2;

        Log3($SELF, 5, 'Duration: ' . $duration . ' / Counter: ' . $counter);

        if ($NAME =~ /.*_Oben$/ && $duration eq 'Short') {
            # Kurz oben = Licht an
            fhem("set $targetDevs rgb FFA100; setreading $SELF bri-calc 100");

        } elsif ($NAME =~ /.*_Unten$/ && $duration eq 'Short') {
            # Kurs unten = Licht aus
            fhem("set $targetDevs off; deletereading $SELF bri-calc");

        } elsif ($NAME =~ /.*_Unten$/ && $duration eq 'Long') {
            # Lang unten = Licht Rot
            fhem("set $targetDevs rgb F21903; setreading $SELF bri-calc 100");

       } elsif ($NAME =~ /.*_Oben$/ && $duration eq 'Long') {
            # Lang oben = Licht Blau
            fhem("set $targetDevs rgb 0000F9; setreading $SELF bri-calc 100");
        }
    }
}



3. Nun muss ich noch das direkt Peering in dieser Zeit deaktiveren.

Ich probiers mal wie folgt, hoffe es geht ;D

define NachtlichtAUS at *21:00:00 set DimmerStufen_Dim_V_01,DimmerVorraumEcke_Dim_V_01,DimmerVorraumEingang_Dim_V_01 pct 00
define NachtlichtEIN at *06:00:00 set DimmerStufen_Dim_V_01,DimmerVorraumEcke_Dim_V_01,DimmerVorraumEingang_Dim_V_01 pct 100


...hat nicht funktioniert :(

Asteal

Hallo,

zur Übersicht ne ne Antwort:

Habe es nun wie folgt gelöst:

Direkt Peering deaktiviert und nur noch per Bewegungsmelder die LED Streifen geschaltet:

define Befehl_BewegungsmelderVorraumEcke_LEDStrip_1230_1730 DOIF
{if (["BewegungsmelderVorraumEcke_Motion:motion"] and [BewegungsmelderVorraumEcke_Motion:brightness] < 60 and [12:30-17:30|8] or [12:30-17:30|7] ) {
    fhem_set("HUEDevice14,HUEDevice15 rgb FFA100");
    set_Exec("off",70,'fhem_set("HUEDevice14,HUEDevice15 off")'); 
  }
}




MadMax-FHEM

Ich verwende ja kein DOIF bin aber hier drüber "gestolpert" und daher nur folgende Anmerkungen:

warum sofort nach DOIF (-if ;)  ) gleich nach Perl und noch mal if?

Und das mit dem letzten "Uhrzeit-or" ist sicher so gewollt!?

Weil hier wie in Mathe gilt: "Punkt vor Strich" bzw. "and vor or"...

Also werden alle 'and' ausgewertet und am Ende nach dem 'or' "gekuckt"...

Evtl. ist aber: and (Uhrzeit1 or Uhrzeit2) gewünscht?

Direktes Peering bedeutet, dass Sensor und Aktor direkt per Funk kommunizieren (ohne fhem) das lässt sich somit per fhem gar nicht beeinflussen (maximal "zurück korrigieren" jedes Mal, wenn die direkte Verbindung etwas "falsch" gemacht hat)...
Der Vorteil: es wird auch eine Aktion ausgelöst, wenn fhem nicht läuft...

Also wenn du es in der Hand haben willst: Peering komplett aufheben: unset
Und dann wie die HUE auch per set-Befehl...

Aber wenn es läuft wie gewollt, dann einfach ignorieren...
...wie geschrieben: nur Anmerkungen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)