Bewegung im Raum erkennen – LUA & HC3-Skript 1

FIBARO HC3 - Bewegung

Unser erstes Skript mit dem FIBARO Home Center 3… Also auch eine Premiere für uns. Wir zeigen euch, wie Ihr Bewegungen mit Bewegungsmeldern in einem Raum erkennen und anhand der erkannten Bewegungen bestimmte Aktionen durchführen lassen könnt.

Bewegung erkennen…

Lange haben wir überlegt mit welchem Skript wir unsere LUA-Serie in Verbindung mit dem FIBARO Home Center 3 starten. Am Ende fiel die Entscheidung auf die Einbindung von MotionSensoren. Dies hat vor allem den Grund, dass die Bewegungserkennung und beispielsweise die dazugehörige Lichtschaltung eine der am weitesten verbreitesten Anwendungsszenarien in einem Smarthome darstellt. In diesem Artikel stellen wir euch also das passende LUA-Skript, sowie die dazugehörigen DECLARATIONS (Conditions/Triggers) vor. Wir haben ja bereits in einem anderen Artikel dargestellt, inwiefern sich der LUA-Editor des FIBARO Home Center 3 mit dem vom FIBARO Home Center 2 unterscheidet. Diesen Artikel findet Ihr HIER!

Kompatible Sensoren mit dem HC3

Welche Bewegungssensoren funktionieren also derzeit überhaupt mit dem FIBARO Home Center 3? Also… getestet haben wir natürlich die FIBARO MotionSensoren, sowie die Aeotec MultiSensor 6-Sensoren. Beide funktionieren zu 100% mit dem HC3. Es können also für das Skript auch beide Arten von Sensoren genutzt werden.

Den Aeotec MultiSensor 6 könnt Ihr natürlich bei uns im Outlet-Shop kaufen. Klickt einfach auf das folgende Bild, um direkt zum Shop zu gelangen… 🙂

Aeotec MultisensorDer Aeotec Multisensor funktioniert sowohl im FIBARO Home Center 2, als auch im FIBARO Home Center 3. Neben der Messung von der Luftfeuchtigkeit kann dieser Sensor auch als Bewegungs-, Helligkeits-, Temperatur-, UV- und als Vibrationssensor genutzt werden.

LUA-Skript für das FIBARO Home Center 3

Wie bereits oben im Artikel geschrieben, unterscheidet FIBARO jetzt zwischen zwei verschiedenen Code-Blocks. Zum einen sind dies die DECLARATIONS (Conditions/Triggers) und zum anderen die Actions. Diese sind unabhängig voneinander auszufüllen und die entsprechenden IDs sind anzupassen. Das Skript findet Ihr jetzt hier…

DECLARATIONS (Conditions/Triggers)
{
  conditions = { {
      id = 321,
      isTrigger = true,
      operator = "==",
      property = "value",
      type = "device",
      value = true
    } },
  operator = "all"
}
ACTIONS
local sensors = {321}

local debug = false
local delay = 0

function actionsMotion()
 print('Führe Aktionen bei Bewegungserkennung aus')
 fibaro.call(115, "turnOn")
end

function actionsNoMotion()
 print('Führe Aktionen nach Ende Bewegung aus')
 fibaro.call(115, "turnOff")
end

function getSensorStatus()
for i,n in ipairs(sensors) do
 if (fibaro.getValue(n, "value")) then
  return 1;
 end
end
 return 0;
end

function getLastBreach()
local breach = 0;
for i,n in ipairs(sensors) do
 local nBreach = tonumber(fibaro.getValue(n, "lastBreached"));
 if(nBreach > breach) then
  breach = nBreach;
 end
end
 return breach;
end

function checkMotion()
lastBreached = getLastBreach();
time = os.time();
if (debug) then print("Zuletzt ausgelöst: Vor "..(time-lastBreached).." Sekunden"); end
if (getSensorStatus() == 1) then
 return true;
end

if ((time-lastBreached)>=delay) then
 return false;
end
 return true;
end

local lastBreached = getLastBreach()

if (getSensorStatus() == 1) then
  print('Bewegung im Raum erkannt - Starte Timer')
  actionsMotion()
 while (checkMotion()) do
  fibaro.sleep(5000);
 end
if (debug) then print("Keine Bewegung mehr erkannt."); end
 actionsNoMotion()
end

Je nachdem, wie viele Bewegungssensoren Ihr in dem entsprechendem Raum besitzt, müssen natürlich die Trigger und auch die ID der lokalen Variablen „sensors“ angepasst werden. Ansonsten funktioniert das Skript leider nicht, da die Szene nicht getriggert wird. Sollten es mehr als ein Sensor sein, dann muss es entsprechend erweitert werden. Dies würde dann in den Declarations folgendermaßen aussehen (Die IDs müssen natürlich entsprechend eurer Sensoren angepasst werden):

{
  conditions = { {
      id = 498,
      isTrigger = true,
      operator = "==",
      property = "value",
      type = "device",
      value = true
    }, {
      id = 504,
      isTrigger = true,
      operator = "==",
      property = "value",
      type = "device",
      value = true
    } },
  operator = "any"
}

In den Funktionen actionsMotion() und actionsNoMotion() können die Aktionen eingetragen werden, welche beim Erkennen von Bewegung ausgeführt werden sollen. Nachdem Ihr alles angepasst habt, sollte das ganze so aussehen (Hier sind zwei MotionSensoren im Einsatz, welche das Licht an-, beziehungsweise ausschalten):

FIBARO HC3 Motion

Wir wünschen euch viel Spaß mit dem Skript und hoffen, dass Ihr alles ohne Probleme einrichten könnt. Sollte dies nicht der Fall sein, dann könnt Ihr natürlich gerne in den Kommentaren eure Frage an uns richten. Wir werden darauf natürlich eingehen… Freuen uns auf euer Feedback! 🙂

Euer IntuITech-Team

Related Posts

47 Responses
  1. Christian

    Moin aus Schleswig Holstein!

    Das ist mega! Vielen lieben Dank für die ersten Szenen! 🙂

    Jetzt noch gerne eine „Jalousie-Szene“ mit Verzögerung bei geöffnetem Fenster, dann läuft das Zuhause wieder einigermaßen! 😉

    Darf ich hier mal ein Beispiel einer HC2-Szene bringen? Daniel wird sie kennen.

    `–[[
    %% autostart
    %% properties
    %% globals
    –]]

    local minSonAuf = ‚-30′ — Vohrzeichen – + min. wo die Sonne Frueher auf geht… SonnenAufgang.
    local minSonUnt = ’60‘ — Vohrzeichen – + min. wo die Sonne Spaeter unter geht… SonnenUntergang.
    local zeitFruehstensAuf = ’06:00′ –Fruehstens wenn die Sonne auf geht.
    local zeitSpaetestensAuf = ’07:00′ –Spaetestens wenn die Sonne auf geht.
    local zeitMaxUntergang = ’23:00′ –Spaetestens wenn die Sonne unter geht.

    1. boomx

      Kommt 🙂

      Wird aber ein wenig anders aufgebaut sein, da das FIBARO Home Center 3 doch mehr Möglichkeiten bietet. Zumindest was die Trigger betrifft, da kann dann ein wenig ressourcenschonender programmiert werden.

  2. Berges01

    Besten Dank
    Das hilft ungemein !
    Aller Anfang ist schwer und so eine Hilfe ist PRIMA !
    Bitte weiter so !
    Grüße aus dem Sauerland.
    F.B.

    1. boomx

      Sehr gerne 🙂

      Es folgen auch noch weitere LUA-Skripte für das FIBARO Home Center 3… damit auch niemandem langweilig wird… 😉

  3. Berges01

    Ein Automatisches Backup auf eine Festplatte im Netzwerk (NAS oder Festplatte an der Fritzbox) wäre nicht schlecht.
    Auch die Verlaufsdaten der Sensoren und Aktoren auf dieses Medium wäre Toll.
    Tja Wünsche hat man halt viele.
    So eine Wunschliste hat sicherlich jeder.
    Noch mal Danke !
    Gruss
    F.B.

    1. boomx

      Wunsch 1.: Derzeit nicht möglich, da alle BackUps des FIBARO HC3 auf dem Home Center 3 gespeichert werden.
      Wunsch 2.: Die Daten können über das erweiterte Einstellungsmenü exportiert werden.

      Gruß

      1. Berges01

        zu 1. Ja das ist schon klar.
        Ein Backup in die Fibaro Cloud ist ja möglich wer es möchte.
        Herunterladen geht ja auch.
        Schade nur das kein Automatische abspeichern per FTP möglich ist.
        zu 2. Auch hier möglich ja OK
        Händisch ist schon mal was aber per FTP automatisch wäre besser.

        Danke für die Info wenn auch leider Negativ aber das wahr ja auch nur ein Wunsch.
        Gruß

  4. Christian

    Ok. Danke!

    Die IDs waren angepasst – komisch 🤨

    Wenn ich Euer Script 1:1 kopiere und nur die IDs anpasse, läßt mich das HC3 die Szene nicht speichern: Prüft das Homecenter die Szene auf Plausibilität

  5. Martin

    Das ist schon mal gut.
    Gut wäre aber, das versuche ich seit 7 Tagen zu machen und es geht nicht.
    Motion Ausgelöst und bei einer Lux z.b. 20, dann schalte Licht ( x) mit der ID ein.
    Und das für Zeit 20 Sek.
    Ich bringe das nicht hin.

    1. boomx

      Guten Morgen…

      auch dies geht mit dem Skript 🙂 Einfach in die actionMotions() die LUX-Abfrage einbauen, danach ein fibaro.sleep und das Licht wieder ausschalten. Alternativ zum fibaro.sleep kann auch einfach der entsprechende Parameter der MotionSensoren auf 20 Sekunden eingestellt werden.

      Gruß

      1. Annonymus

        Hi boomx, welchen Parameter meinst Du denn hier? würde eben genau diese Funktion (Licht schaltet erst nach 20 Sekunden aus) umsetzen.
        Die einfache Sleep-Funktion schaltet das Licht doch immer nach 20 Sekunden aus, egal ob dazwischen eine Bewegung war oder nicht. Ich möchte aber, dass es erst 20 Sekunden nach der letztmaligen Bewegung ausgeht. Klappt das mit dieser Szene?

        1. boomx

          Ja, klar. 🙂

          Du musst nur den Parameter des Bewegungsmeldern entsprechend anpassen. Sofern dieser nach 20 Sekunden keine Bewegung mehr meldet, dann geht das Licht aus.

          Gruß

          1. Annonymus

            Hi boomx,
            ok, und welchen Parameter muss ich anpassen? Bei Fibaro haben alle Parameter eine Nummer. Welchen meinst Du denn?
            Parameter 2 (blind time) kann es nicht sein, denn „blind“ soll der Bewegungsmelder ja nicht sein. Wäre er 20 Minuten blind, würde er ggf. das Licht ausschalten, obwohl während der 20 Sekunden noch Bewegungen stattgefunden haben.
            Parameter 4 (window time) kann es auch nicht sein, denn er steuert nur die Sensitität des Sensors, nicht aber den Zeitversatz
            Parameter 6 (alarm cancellation delay) dieser kommt mir noch am naheliegendsten vor, allerdings passt die eingestellte Zeit nicht zum Verhalten des Sensors.

            Wäre super, wenn Du mir den genauen Parameter benennen könntest, den ich verstellen muss. Ich will ja, dass kein Versatz ab der 1. Bewegung eintritt, sondern dass ein zeitlicher Versatz für NACH der LETZTEN BEWEGUNG eintritt (unabhängig davon, wieviele Bewegungen vorher stattgefunden haben. Danke im Voraus.

          2. boomx

            Parameter 6 ist korrekt. Nach der dort eingestellten Zeit meldet der Sensor, dass keine Bewegung mehr erkannt wurde. Bitte den Sensor nach dem Umstellen manuell aufwecken, damit Parameter übertragen werden.

            Schönen Abend 🙂

  6. Martin

    Habe die ID´s geändert.
    Die Szene läuft im debug durch nur geht das licht nicht an.
    Was mache ich da verkehrt 🙂

    1. boomx

      Guten Morgen…

      Wenn das Skript beim HC3 ohne Probleme durchläuft und alle print()-Ausgaben debuggt werden, dann ist das schonmal gut. 🙂 was hast du denn in den Funktionen actionsMotion() und actionsnoMotion() eingetragen? Hier müssen ja die Aktionen eingetragen werden, welche dann ausgeführt werden sollen.

      Gruß

  7. Martin

    Habe ich gemacht hier mal das aber es kommt eine Fehlermeldung.

    local sensors = {321}

    local debug = false

    function actionsMotion(fibaro.call(115, „turnOn“)
    print(‚Führe Aktionen bei Bewegungserkennung aus‘)
    –fibaro.call(115, „turnOn“)
    end

    1. boomx

      Kann so auch nicht funktionieren, da der Befehl auskommentiert ist. Da müssen die beiden Bindestriche vor dem Befehl entfernt werden 😉

      Gruß

  8. Martin

    Ja habe ich gemacht geht aber auch nicht.
    Warum verschiebst du das nicht in das Forum, könnten andere auch was lernen nicht nur ich.
    Forum ist viel übersichtlicher, einfach in den Lua Ordner? 😉

    1. boomx

      Das kann ich leider technisch nicht.

      Du kannst dort aber gern ein neues Thema aufmachen. Poste bitte deinen Code und die Trigger + die Debug-Ausgabe von deinem FIBARO Home Center 3. Dann schau ich es mir mal an.

      Gruß

  9. Michael K.

    Hallo, ich sehen andere haben die selbe Probleme wie ich, Ich hatte im HC2 diese Lichtszene einige male in meinem Haus laufen immer wieder auf die Bedürfnisse angepasst. Leider bekomme ich diese im HC3 nicht zum laufen.
    Vielleicht habe find ich hier hilfe, deshalb habe ich die HC3 auch hier gekauft.
    Vorab schon mal vielen DANK Gruß Micha

    –[[
    %% properties
    200 value
    202 value
    491 value
    %% globals
    TimeOfDay
    PresentState
    –]]

    –[[ Change – XXX value – above. One for motion sensor, one for Light sensor.
    TimeOfDay global variable and lux make sure that the scene
    will be triggered when you are already in the room and something changes.

    Set your settings below, lights and add extra functions
    Feel free to suggest changes or contact when having problems.
    It is not allowed to sell or distribute this software and earlier versions without the approval of Control Living
    © 2014 – 2015 Smart lights by Control Living
    Version 1.6.7
    –]]

    ——————————————————————–
    ———————–YOUR LIGHT SETTINGS————————–

    motionSensorID = {200}; — change id for your motion sensor.
    LuxSensorID = {202}; — change id for your light sensor.

    –Enter the name of your Global variable. WITHOUT IT, THE SCENE DOES NOT WORK. Capital sensitive!
    sleepState = „SleepState“; –Sleep globalstate variable.
    timeOfDay = „TimeOfDay“; –Time of Day Global variable.
    presentState = „PresentState“; –Present state Global variable.

    –Enter the values of your global variables stated above. If not using, copy the name in front of the „YourValueName“
    sleepStateMapping = {Sleeping=“Sleeping“, Awake=“Awake“};
    timeOfDayMapping = {Morning=“Morning“, Day=“Day“, Evening=“Evening“, Night=“Night“};
    presentStateMapping = {Home=“Home“, Away=“Away“, Holiday=“Holiday“};

    — Set the lux value for which the lights have to be turned on.
    — If you don’t want to use the MinLux then just set it to: 65535
    minLuxMorning = 100;
    minLuxDay = 60;
    minLuxEvening = 40;
    minLuxNight = 30;

    –If the current lux value is above the maxlux, the lights will turn off after their set onTime.
    maxLuxMorning = 300;
    maxLuxDay = 300;

    –[[
    Now the most important part:
    Here you can enter what light, for how long and at what value has to be turned on.
    Leave empty brackets for no lights.
    To set the light value without timer use 2 parameters: {id=LightID, setValue=“VALUE“}
    To set the light value with timer use 3 parameters: {id=LightID, setValue=“VALUE“, onTime=timeInSeconds }
    To set the light value for RGBW: use the above, where setValue is: setValue={R=“255″,G=“255″,B=“255″,W=“255″}
    — RGBW set: {id=LightID, setValue={R=“255″,G=“255″,B=“255″,W=“255″}, onTime=timeInSeconds }
    –]]

    lightsSleeping = {}; –lights that are triggered when Sleepstate is sleeping.
    lightsMorning = {{id=263, setValue=“99″, onTime=90},{id=999, setValue=“99″, onTime=30},{id=902, setValue=“turnOn“, onTime=360}};
    lightsDay = {{id=263, setValue=“80″, onTime=90},{id=999, setValue=“99″, onTime=30}};
    lightsEvening = {{id=263, setValue=“60″, onTime=90},{id=999, setValue=“99″, onTime=30},{id=902, setValue=“turnOn“, onTime=300}};
    lightsNight = {{id=263, setValue=“45″, onTime=90}, {id=999, setValue=“99″, onTime=30}};

    –Manual Override, the time that lights will not be turned ON again after manually turning them off.
    OverrideFor = 90;
    dimmDownTime = 10;

    ——————————————————————–
    ————————-EXTRA FEATURES—————————–

    extraMorningFunc = function()
    — Add your extra code here. If you want some checks or maybe run a virtual device button.
    –This code is always triggered if there is motion.
    — movieLights = {{180, „10“},{181, „10“} };
    –if (xbmc == „playing“ ) then CallLightArray(movieLights);
    ExtraDebug(„Extra morning function called“);
    end

    extraDayFunc = function()
    — Add your extra code here. If you want some checks or maybe run a virtual device button.
    –This code is always triggered if there is motion.
    ExtraDebug(„Extra day function called“);
    end

    extraEveningFunc = function()
    — Add your extra code here. If you want some checks or maybe run a virtual device button.
    –This code is always triggered if there is motion.
    ExtraDebug(„Extra evening function called“);
    end

    extraNightFunc = function()
    — Add your extra code here. If you want some checks or maybe run a virtual device button.
    –This code is always triggered if there is motion.
    ExtraDebug(„Extra night function called“);
    end

    extraLightTriggerChecks = function()
    –add extra checks here. and return the total true or false value.
    –if returning false the lights will not be triggered.
    — for instance: return ( (pcTurnedOff == true ) and (xbmc ~= „Empty“) );
    — return true to enable lights to turn on
    return true;
    end

    extraOffChecks = function()
    –return true to keep lights on.
    return false;
    end

    ——————————————————————–
    ———————-ADVANCES SETTINGS—————————–
    local showStandardDebugInfo = true; — Debug shown in white
    local showExtraDebugInfo = false; — Debug shown in orange

    ——————————————————————–
    ——————————————————————–
    — DO NOT CHANGE THE CODE BELOW —
    ——————————————————————–
    –UPDATE FROM HERE

    –private variables
    startSource = fibaro:getSourceTrigger();
    keepLightsOn = false;
    timerRunning = false;
    previousLights = nil;
    version = „1.6.7“;

    SavedState = {
    homeStatus = „“,
    sleepState = 0,
    timeOfDay = „“,
    lux = 0,
    motion = 0,
    startTime = 0
    }

    CurrentState = {
    homeStatus = „“,
    sleepState = „“,
    timeOfDay = „“,
    lux = 0,
    motionState = 0,
    currentLightArray = {}
    }

    RGBWDeviceType = { „com.fibaro.RGBW“, „com.fibaro.colorController“, „com.fibaro.FGRGBW441M“ }
    BinaryDeviceType = { „com.fibaro.binarySwitch“,“com.fibaro.FGWP101″, „turnOn“ }
    DimmerDeviceType = { „com.fibaro.multilevelSwitch“,“com.fibaro.FGD212″ }

    OffModes = {None, ByScene, ManualOverride }

    function Debug( color, message )
    fibaro:debug(string.format(‚%s‘, „span“, color, message, „span“));
    end

    –Making sure that only one instance of the scene is running.
    fibaro:sleep(50); –sleep to prevent all instances being killed.
    if (fibaro:countScenes() > 1) then
    if (showExtraDebugInfo) then
    Debug( „grey“, „Abort, Scene count = “ .. fibaro:countScenes());
    end
    fibaro:abort();
    end

    ————————–EXECUTION———————————-

    function SetCurrentStatus()
    ExtraDebug(„Updating current variable statuses“);
    CurrentState.homeStatus = GetPresentState();
    CurrentState.timeOfDay = GetTimeOfDay();
    CurrentState.sleepState = GetSleepState();
    CurrentState.lux = GetAverageLuxValue();
    CurrentState.motionState = GetCurrentMotionStatus();
    end

    function SaveCurrentStatus()
    ExtraDebug(„Saving current variable statuses“);
    SavedState.homeStatus = CurrentState.homeStatus;
    SavedState.timeOfDay = CurrentState.timeOfDay;
    SavedState.sleepState = CurrentState.sleepState;
    SavedState.lux = CurrentState.lux;
    SavedState.motion = CurrentState.motionState;
    end

    function CheckStatusChanges()
    ExtraDebug(„Status change check“);
    if (CurrentState.homeStatus ~= SavedState.homeStatus ) or (CurrentState.timeOfDay ~= SavedState.timeOfDay ) then
    if (CurrentState.homeStatus ~= presentStateMapping.Home ) then
    TurnOffLights();
    else
    SceneTriggered();
    –reset time.
    end;
    end
    SaveCurrentStatus();
    — if we still have a motion then reset timer.
    if ( (CurrentState.motionState ~= 0 or extraOffChecks() ) and not IsMaxLuxExceeded() ) then
    ExtraDebug( „Resetting time“ );
    SavedState.startTime = os.time();
    else
    ExtraDebug(„Timer is not reset.“);
    end
    –any other case, we are not resetting the timer.
    end

    function IsMaxLuxExceeded()
    if (CurrentState.timeOfDay == timeOfDayMapping.Morning and CurrentState.lux > maxLuxMorning ) then
    ExtraDebug( „Current lux value: “ .. CurrentState.lux .. “ higher then max Lux Morning: “ .. maxLuxMorning .. „.“);
    return true;
    elseif (CurrentState.timeOfDay == timeOfDayMapping.Day and CurrentState.lux > maxLuxDay ) then
    ExtraDebug( „Current lux value: “ .. CurrentState.lux .. “ higher then max Lux Day: “ .. maxLuxDay .. „.“);
    return true;
    end
    return false;
    end

    function LightsOff( lightArray )
    local stillLightsOn = 0;
    local currentTime = os.time();
    for i = 1,#lightArray do
    if ( lightArray[i].onTime ~= nil) then
    lightItem = lightArray[i];
    lightItem.OffMode = CheckManualOverrideItem( lightItem );
    –local
    if ( lightItem.OffMode == „ManualOverride“ ) then
    ExtraDebug(„Manual override for light: [“ .. lightItem.id .. „]“ .. lightItem.name .. “ active, not turning on“);
    goto continue;
    end
    –On till:
    local timeL = SavedState.startTime + (lightItem.onTime);
    local timeLeft = timeL – currentTime;
    if (timeLeft >= 0 ) then ExtraDebug(„Time left for: [“ .. lightItem.id .. „]“ .. lightItem.name .. „: “ .. timeLeft .. “ seconds“ ); end
    if ( timeLeft < dimmDownTime ) then
    if ( lightItem.OffMode ~= "ManualOverride" ) then
    lightItem.OffMode = "ByScene";
    end
    if ( (timeLeft <= 0) and (lightItem.currentValue ~= 0) ) then
    fibaro:call(lightItem.id, "turnOff");
    StandardDebug("Switch off light: [" .. lightItem.id .. "]'" .. lightItem.name .."'");
    else
    if ( item.lightType == "com.fibaro.multilevelSwitch" ) then
    currentValueDiv = roundit(((lightItem.currentValue) / (dimmDownTime)), 0);
    currentValueNew = (lightItem.currentValue – currentValueDiv);
    if (currentValueNew 0 ) do
    ExtraDebug(„Still in override for: “ .. (OverrideTimer + OverrideFor ) – os.time() .. “ seconds“ );
    fibaro:sleep(1000);
    UpdateLightValues(currentLightArray);
    OverrideForAll = CheckIfAllInOverrideMode(currentLightArray);
    motion = GetCurrentMotionStatus();
    if ( motion ~= 0 ) then
    OverrideTimer = os.time();
    end
    end
    else return false;
    end
    — if ( (OverrideTimer + OverrideFor ) – os.time() minLux ) then
    StandardDebug( „Sensor lux: “ .. newLuxValue .. “ higher then minValue: “ .. minLux .. “ : no action“);
    else
    StandardDebug(„Sensor lux: “ .. newLuxValue .. “ is lower then minValue: “ .. minLux);
    SetLightValues(lightArray);
    CallLightArray( lightArray, „on“ );
    CheckPreviousLights( lightArray );
    end
    else
    ExtraDebug(„ExtraLightTriggerChecks failed, so no lights“);
    end
    end

    function SceneTriggered()
    if ( CurrentState.homeStatus ~= presentStateMapping.Home ) then
    ExtraDebug(„Presentstate = not at home, so no lights“);
    elseif ( CurrentState.sleepState == sleepStateMapping.Sleeping ) then
    LightperDayPart( 65535, lightsSleeping );
    elseif ( CurrentState.timeOfDay == timeOfDayMapping.Morning ) then
    extraMorningFunc();
    LightperDayPart( minLuxMorning, lightsMorning );
    elseif ( CurrentState.timeOfDay == timeOfDayMapping.Day ) then
    extraDayFunc();
    LightperDayPart( minLuxDay, lightsDay );
    elseif ( CurrentState.timeOfDay == timeOfDayMapping.Evening ) then
    extraEveningFunc();
    LightperDayPart( minLuxEvening, lightsEvening );
    elseif ( CurrentState.timeOfDay == timeOfDayMapping.Night ) then
    extraNightFunc();
    LightperDayPart( minLuxNight, lightsNight );
    else
    ErrorDebug( „No lights: “ .. CurrentState.timeOfDay );
    end
    if (keepLightsOn == true) then
    RunTimer();
    end

    1. boomx

      Hi…

      danke für deinen Kommentar. Das Skript werden wir nicht für das HC3 beziehungsweise für das FIBARO Home Center 3 umwandeln. Zum einen ist dies zu viel Aufwand, zum anderen dürfen wir das aufgrund des Copyrights nicht tun. Sorry… du kannst das Skript natürlich selbstständig umwandeln oder unsere Dienstleistung in Anspruch nehmen. Bei dem Skript gehen wir von circa 1 Tag Arbeitsaufwand aus.

      Gruß

  10. Michael K.

    Hallo, vielen Dank für die umgehende Antwort aber da gebe ich lieber das HC3 wieder zurück, beim HC2 kann ich leichter was finden und kenne ich micha auch besser aus was ich das rum spiele.
    Trotzdem vielen DANK

    1. boomx

      Das tut uns leid zu hören…

      Allerdings darf man nicht vergessen, dass viele LUA-Skripte durch die Community noch programmiert werden und auch wir bieten immer neue Skripte für das FIBARO Home Center 3. Dies kommt nach und nach und es wird auch zeitnah mehr Skripte geben, welche sogar besser als die alten Skripte für das HC2 sind. 🙂

      Aber natürlich können wir nicht alle Skripte sofort anpassen. Hier ist viel Arbeitszeit notwendig…

      Gruß

  11. Michael K.

    Guten Morgen, ich verzweifle noch an der LUA Szene mit dem Motion Sensor.
    Ich habe nur die IDs ausgetauscht und dachte es funktioniert, leider nicht ich bekommen nur den Fehler in Zeile 28
    [ERROR] 01.04.2020 09:47:34: (load):28: attempt to compare number with nil
    Passieren tut gar nichts.
    Ich brauche doch nur eine funktioniernde Szene mit LUX und Motion damit ich ein pobliche Lampe steuern kann und ich bekomme das nicht hin auf der neuen HC3.
    Kann mich jemand unterstützen, wäre echt dankbar.
    Gruß MIcha

  12. Michael K.

    Hallo noch mal, jetzt habe ich die Szene soweit hin bekommen das bei der Simulation das Licht angeht, leider nicht im Live Betrieb wenn ich den Raum betrete.
    Das sind die Meldungen die hier auftauchen im Simulationsbetrieb

    [DEBUG] 01.04.2020 11:04:53: Bewegung im Raum erkannt – Starte Timer

    [DEBUG] 01.04.2020 11:04:53: Führe Aktionen bei Bewegungserkennung aus

    [ERROR] 01.04.2020 11:07:30: (load):43: attempt to compare nil with number

    Kann hier jemand was mit anfangen?

    Gruß Micha

    1. boomx

      Bitte poste mal dein Skript. Kann das Problem gerade nicht nachvollziehen… Vor allem, was meinst du mit Simulation?

  13. Michael K.

    ACTION:
    local sensors = {303}

    local debug = false

    function actionsMotion()
    print(‚Führe Aktionen bei Bewegungserkennung aus‘)
    fibaro.call(300, „turnOn“)
    end

    function actionsNoMotion()
    print(‚Führe Aktionen nach Ende Bewegung aus‘)
    fibaro.call(300, „turnOff“)
    end

    function getSensorStatus()
    for i,n in ipairs(sensors) do
    if (fibaro.getValue(n, „value“)) then
    return 1;
    end
    end
    return 0;
    end

    function getLastBreach()
    local breach = 0;
    for i,n in ipairs(sensors) do
    local nBreach = tonumber(fibaro.getValue(n, „lastBreached“));
    if(nBreach > breach) then
    breach = nBreach;
    end
    end
    return breach;
    end

    function checkMotion()
    lastBreached = getLastBreach();
    time = os.time();
    if (debug) then print(„Zuletzt ausgelöst: Vor „..(time-lastBreached)..“ Sekunden“); end
    if (getSensorStatus() == 1) then
    return true;
    end

    if ((time-lastBreached)>=delay) then
    return false;
    end
    return true;
    end

    local lastBreached = getLastBreach()

    if (getSensorStatus() == 1) then
    print(‚Bewegung im Raum erkannt – Starte Timer‘)
    actionsMotion()
    while (checkMotion()) do
    fibaro.sleep(50);
    end
    if (debug) then print(„Keine Bewegung mehr erkannt.“); end
    actionsNoMotion()
    end

    Condtion:
    {
    conditions = { {
    id = 303,
    isTrigger = true,
    operator = „==“,
    property = „value“,
    type = „device“,
    value = true
    } },
    operator = „all“
    }

    Mit Simulation meine ich das ich die Szene mit ausführe im Homcenter und auf dem Debugger verfolge
    Wie gesagt das Licht geht an aber nicht mehr aus.
    Gruß Micha

  14. Klaus

    Die Definition von ‚delay‘ (Abschaltverzögerung in Sekunden als Integer Wert) fehlt.
    Einfach oben nachtragen, dann läuft alles durch.

    Cheers,

    Klaus

  15. Michael K.

    Michael K.
    vielen Dank für eure Hilf, leider weiß ich trotzdem nicht wo ich was ändern soll 🙁
    Sorry.

    1. boomx

      Mehr als in den Kommentaren erwähnen und im Artikel ändern, kann ich leider nicht. Nimm bitte das neue Skript und nutze das…

  16. Michael K.

    michael@kemmer69.de
    super Danke jetzt funktioniert es.
    Jetzt muss ich das HC3 nur noch mit der Alexa App verbinden, gibt es hier eine Anleitung, da es bestimmt auch anders geht als bei der HC2 oder?
    Gruß Micha

  17. Michael K.

    michael@kemmer69.de
    Ech klasse, Amazon schiebt es auf Fibaro, da hier der Hacken ist, da die Apps von Fibaro sind. Ich habe jetzt alles versucht aber es werden weder Dimmer noch Switch noch Rollershutter erkannt sondern nur der Heizungsthermostat von Fibaro und der Aoetec Switch. Bin Ratlos was diese zwei Geräte von den anderen Unterscheidet, die sind genau so Teil von der HC3 wie die anderen Geräte die nicht erkannt werden.
    Vielleicht hat jemand hier die selben Probleme und kann mir einen Tip geben, wenn ich mich an den deutschsprachigen Support von Fibaro wende, lande ich eh wieder bei Intuitech also bei euch 🙂
    Wäre super wenn ich HIlfe bzw. einen Tipp bekommen könnte. Vielleicht liegt es an den Modulen dass diese noch nicht sichtbar sind für Apps oder so.

    Gruß Micha

    1. boomx

      Bei mir werden auch nicht alle angezeigt. Vielleicht liegt hier noch ein Problem in der Firmware vor. Allerdings wird es zeitnah eine neue Firmware für das FIBARO Home Center 3 geben. Würde die noch abwarten, bevor wir etwas bei FIBARO melden. 🙂

      Gruß

  18. Felix

    Super, nur weiter so….

    Hier eine Möglichkeit, wie man den Script nur am Tag ausführen lässt z. Bsp. um nicht bei nächtlichen Toilettenbesuch plötzlich nicht vom Licht geblendet zu werden.

    {
    conditions = { {
    conditions = { {
    isTrigger = false,
    operator = „match>=“,
    property = „cron“,
    type = „date“,
    value = { „00“, „06“, „*“, „*“, „*“, „*“ }
    }, {
    isTrigger = false,
    operator = „match<",
    property = "cron",
    type = "date",
    value = { "00", "23", "*", "*", "*", "*" }
    } },
    operator = "all"
    }, {
    id = 69, — Gerät-ID ist ggf. zu ändern
    isTrigger = true,
    operator = "==",
    property = "value",
    type = "device",
    value = true
    } },
    operator = "all"
    }

    1. boomx

      Hi…

      wenn du von den Modulen eine „Soft-Reconfiguration“ durchführst, dann werden die entsprechenden Module wieder erkannt und an den Alexa-Skill übertragen. 🙂 Hab es getestet und es funktioniert ohne Probleme.

      Gruß

  19. Werner

    Hallo zusammen,

    vielen Dank für die Skripte, bei meinen ersten Gehversuchen haben die sehr geholfen. Freue mich schon auf mehr 🙂

    Frage: kann man in den Conditions auf Globale Variablen zugreifen? Wenn ja, wie? Mit fibaro.getGlobalVariable(„my_var“) hat das im Condition-Teil nicht geklappt.

    Das o. a. Skript habe ich um Helligkeitssensoren, Nutzung für mehrere Motionsensoren (Conditions-Sektion) und einen Override-Modus für manuelle Bedienung ergänzt. Theoretisch ließen sich auch mehrere Lichter schalten, das habe ich aber noch nicht getestet. Vielleicht ist das ja für den einen oder anderen nützlich. Natürlich ohne Garantie und Anspruch auf Fehlerfreiheit. Nutzung auf eigenes Risiko.

    Viele Grüße

    Werner

    {
    — 3 blocks of conditions, each of them must
    — be fulfilled for initalizing the action:
    — motion, lux-level, light is off
    operator = „all“,
    conditions = {
    {
    — subcondition set: start the scene only, when
    — the brightness is below a level of 25 lux for
    — ALL of the sensors.
    operator = „all“,
    conditions = {
    {
    type = „device“,
    id = 62, — lux sensor 1
    property = „value“,
    operator = „<=",
    value = 25, — <– would like to set this parameter via global var
    isTrigger = false
    },
    {
    type = "device",
    id = 105, — lux sensor 2
    property = "value",
    operator = "<=",
    value = 25, — breach) then
    breach = nBreach;
    end
    end
    return breach;
    end

    function checkMotion()
    lastBreached = getLastBreach();
    time = os.time();
    if (debug) then
    print(„Zuletzt ausgelöst: Vor „..(time-lastBreached)..“ Sekunden“);
    end
    if (getSensorStatus() == 1) then
    return true;
    end
    if ((time-lastBreached)>=delay) then
    return false;
    end
    return true;
    end

    local lastBreached = getLastBreach()

    if (getSensorStatus() == 1) then
    print(‚Bewegung im Raum erkannt – Starte Timer‘)
    actionsMotion()
    while (checkMotion()) do
    fibaro.sleep(5000);
    end
    if (debug) then
    print(„Keine Bewegung mehr erkannt.“);
    end
    actionsNoMotion()
    end

    1. Werner

      sorry, das Skript ist nicht komplett kopiert worden, hier der Conditions-Teil noch mal:

      {
      — 3 blocks of conditions, each of them must
      — be fulfilled for initalizing the action:
      — motion, lux-level, light is off
      operator = „all“,
      conditions = {
      {
      — subcondition set: start the scene only, when
      — the brightness is below a level of 25 lux for
      — ALL of the sensors.
      operator = „all“,
      conditions = {
      {
      type = „device“,
      id = 62, — lux sensor 1
      property = „value“,
      operator = „<=",
      value = 25, — <– would like to set this parameter by global var
      isTrigger = false
      },
      {
      type = "device",
      id = 105, — lux sensor 2
      property = "value",
      operator = "<=",
      value = 25, — <– would like to set this parameter by global var
      isTrigger = false
      }
      }
      },
      {
      — if either of the motion sensor fired an event
      — this section returns true
      operator = "any",
      conditions = {
      {
      type = "device",
      id = 60, — motion sensor 1
      property = "value",
      operator = "==",
      value = true,
      isTrigger = true
      },
      {
      type = "device",
      id = 103, — motion sensor 2
      property = "value",
      operator = "==",
      value = true,
      isTrigger = true
      }
      }
      },
      {
      — light must be switched off to take action
      — if it is on already, a user has overridden
      — the scene and knows better than the system 😉
      conditions = {
      {
      type = "device",
      id = 88, — light switch 1
      property = "value",
      operator = "==",
      value = false,
      isTrigger = false
      }
      }
      }
      }
      }

  20. Thomas Mosimann

    Hi,
    ich nutze das Script und es funktioniert prima. Jetzt möchte ich gerne, dass die Lampen aber nur ab einer gewissen Lichtintensität einschalten, und dies idealerweise auch nach Tageszeit gesteuert. Bin aber ratlos wie dies im Script eingebaut werden kann.

    1. boomx

      Guten Morgen,

      dies kannst du über die jeweiligen Funktionen, welche bei Bewegungserkennung und beim Sicher melden ausgeführt werden, mit abfragen. Genau dafür sind ja solche Funktionen da. 🙂 Dies würde dann (in dem Beispiel mit Variablen) aussehen:

      function actionsMotion()
      print(‚Führe Aktionen bei Bewegungserkennung aus‘)
      if (fibaro.getGlobalVariable(‚danielBed‘) == ‚false‘ and fibaro.getGlobalVariable(‚tanjaBed‘) == ‚false‘) then
      print(‚Es ist keiner im Bett. Licht im Flur wird voll angeschaltet!‘)
      fibaro.call(476, „turnOn“)
      fibaro.call(476, „changeBrightness“, 200)
      else
      print(‚Es ist jemand im Bett. Licht im Flur wird gedimmt angeschaltet‘)
      fibaro.call(476, „turnOn“)
      fibaro.call(476, „changeBrightness“, 15)
      end
      end

      Gruß

Leave a Reply

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Letzte Blog-Artikel

IntuITech

Wir bieten immer die besten und neusten Smarthome-Produkte auf dem Markt an. Dank unserer langjährigen Erfahrung können wir immer den besten Support leisten und dich bei deinen Projekten perfekt unterstützen.

Unsere Smarthome-Produkte

11FIBARO Home Center 3 Lite
11Blebox parkingSensor
11Blebox airSensor
11Grenton CLU
11Grenton
11FIBARO Home Center 3