Manuellt stopp av scen med väggbrytaren?

Post Reply
Earplugged
Medlem
Posts: 158
Joined: 03 Feb 2016, 17:16
8

Håller på att laborera med en "väckarklocka" som sakta dimmar upp taklampan under en viss tid, hur tusan skriver jag koden för att kunna stoppa uppdimningen om jag manuellt släcker med väggbrytaren?

Jag använder motorvärmarstyrningen som grund och då blir startTime tiden då dimmern börjar på noll och departureTime blir när den dimmat upp till 100% och man skall gå upp, problemet är att om jag släcker manuellt mellan start och departure börjar den ju dimma upp igen.

if (outTemp < 10) and (heaterState == 0) then
if (currentTime >= startTime) and (currentTime < departureTime) then
if (WorkDay == "True") then
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1203
Joined: 03 Jan 2015, 16:49
9
Location: Vegby
Contact:

Glöm motorvärmar-timern!
Använd Dawn Simulator i stället! Där har du sju olika sätt att dimma upp morgonljuset.

Code: Select all

--[[
%% properties
%% globals
--]]

-- http://forum.fibaro.com/index.php?/topic/12798-dawn-simulator-lua-engine/

-- Debug om man vill se vad som händer
-- fibaro:debug("HC2 start script at " .. os.date());

-- LUA - Grynings-simulator V1.0.1
--
-- Wake up "naturally", illuminated by a soft light and progressive.
-- Based on open source Robert Penner's original easing equations (Copyright © 2001 Robert Penner) 
-- Copyright © 2013 Jean-christophe Vermandé

-- USER SETTINGS :
-- Type of equation used to generate the curve (dimming).
-- Välj mellan: linear, inQuad, inExpo, outExpo, inOutQuad, inOutExpo, outInExpo

local curve = "inExpo"; -- Type of equation used to generate the curve (dimming).
local debug = false;     -- To log in HC2 debug area
local devices = {29};   -- IDs of devices to be varied (only dimmable device), eg. {1, 16, 10}
local startValue = 10;   -- Begin value
local endValue = 100;   -- End value
local duration = 600;    -- Execution time in seconds of the scene


-- DO NOT EDIT THE CODE BELOW (except to suit your needs) --


dawnSimulatorEngine = {
  version = "1.0.1"
};
function dawnSimulatorEngine:init(startValue, endValue, duration, devices, curve, debug)
  self._lastValue = 0 
  self._startValue = startValue or 0;
  self._endValue = endValue or 100;
  self._duration = duration or 1;
  self._devices = devices or {}; 
  self._curve = equations.map[curve or 'linear'];  -- require 'equations' to operate
  self._debug = debug or true;
end
function dawnSimulatorEngine:_update(value)  
  self._lastValue = value; -- keep in memory the last value to compare later
  -- loop in deveices
  local name, id;
  for i=1, #self._devices do
    id = tonumber(self._devices[i]);
    fibaro:call(id, "setValue", value);
    if (self._debug) then
      name = fibaro:getName(id);
      if (name == nil or name == string.char(0)) then
        name = "Unknown"
      end
      fibaro:debug("Device:" .. name .. " setValue: " .. value);
    end
  end
end
function dawnSimulatorEngine:_compute(time)
  return math.ceil(tonumber(self._curve(time, self._startValue, self._endValue, self._duration)));
end
function dawnSimulatorEngine:start()
  local computedValue;
  local doWhile = true;
  local time = 0;
  -- timeline
  while (doWhile == true) do
    computedValue = self:_compute(time);
    -- prevent multiple call with same value
    if (computedValue ~= self._lastValue) then
      -- update device value
      self:_update(computedValue);
    end
    time = time + 1;
    if (time > self._duration) then
      doWhile = false;
      if (self._lastValue < self._endValue) then
        -- force target value
        self:_update(computedValue);
      end
    else
      fibaro:sleep(1000);
    end
    -- do while
  end
end
    
-- Easing function (Penner's Easing Equations)
equations = equations or {
  version = "1.0.1",
  -- Linear
  linear = function(t, b, c, d)
    return c * t / d + b;
  end,
  -- InQuad
  inQuad = function(t, b, c, d)
    t = t / d;
    return c * math.pow(t, 2) + b;
  end,
  -- InOutQuad
  inOutQuad = function(t, b, c, d)
    t = t / d * 2;
    if t < 1 then
      return c / 2 * math.pow(t, 2) + b;
    else
      return -c / 2 * ((t - 1) * (t - 3) - 1) + b;
    end
  end,
  -- InOutExpo
  inOutExpo = function(t, b, c, d)
    if t == 0 then return b end
    if t == d then return b + c end
    t = t / d * 2;
    if t < 1 then
      return c / 2 * math.pow(2, 10 * (t - 1)) + b - c * 0.0005;
    else
      t = t - 1;
      return c / 2 * 1.0005 * (-math.pow(2, -10 * t) + 2) + b;
    end
  end,
  -- OutInExpo
  outInExpo = function(t, b, c, d)
    if t < d / 2 then
      return equations.outExpo(t * 2, b, c / 2, d);
    else
      return equations.inExpo((t * 2) - d, b + c / 2, c / 2, d);
    end
  end,
  -- InExpo
  inExpo = function(t, b, c, d)
    if t == 0 then
      return b;
    else
      return c * math.pow(2, 10 * (t / d - 1)) + b - c * 0.001;
    end
  end,
  -- OutExpo
  outExpo = function(t, b, c, d)
    if t == d then
      return b + c;
    else
      return c * 1.001 * (-math.pow(2, -10 * t / d) + 1) + b;
    end
  end
};

-- Equations map
equations.map = {
  ['linear'] = equations.linear,
  ['inQuad'] = equations.inQuad,
  ['inExpo'] = equations.inExpo,
  ['outExpo'] = equations.outExpo,
  ['inOutQuad'] = equations.inOutQuad,
  ['inOutExpo'] = equations.inOutExpo,
  ['outInExpo'] = equations.outInExpo
}

-- START SIMULATOR ENGINE
if (debug) then fibaro:debug("Starting the process"); end
--startEngine(equations.map[curve]);
dawnSimulatorEngine:init(startValue, endValue, duration, devices, curve, debug);
dawnSimulatorEngine:start();
if (debug) then fibaro:debug("End of the process"); end
Min gamla ombyggda HC2 har fått ett nytt liv och min HC3 är nu nedkopplad.
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
Earplugged
Medlem
Posts: 158
Joined: 03 Feb 2016, 17:16
8

Ja där har jag lite att leka med i kväll :-)

Har inte hunnit kolla igenom koden och är ingen hejare på det egentligen heller men avbryter denna kod dimningen om jag manuellt tänder/släcker under uppvakningen? Hur styr jag starttiden?

Vill ju ha en funktion liknande motorvärmarstyrningen där jag enkelt anger tid på telefonen/surfplattan då jag vill vakna och om den skall vara av/på precis som man ställer sin "vanliga" väckarklocka.
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1203
Joined: 03 Jan 2015, 16:49
9
Location: Vegby
Contact:

Kopiera bara in koden i en LUA-scen och sätt de parametrar du vill ha:
Typ av kurva, vilken eller vilka enheter som skall dimmas, dimmerns start- och slutvärde samt hur lång tid scenen skall ta.
Jag styr starttiden via GEA och låter den gå full tid och stänger sedan av den efter någon timme.

Du kan ju använda en strippad motorvärmar-VD för att starta scenen och vill du sedan avbryta scenen så stoppar du den och stänger av dimmern. Det kan du ju också lägga in i din VD.
Fullt utvecklad VD styr ju även de sju moderna så att du kan vakna med olika gryningsljus varje dag i veckan :-)
Attachments
Olika moder i Dawn simulator
Olika moder i Dawn simulator
Dawn simulator modes.png (9.61 KiB) Viewed 6972 times
Min gamla ombyggda HC2 har fått ett nytt liv och min HC3 är nu nedkopplad.
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
Earplugged
Medlem
Posts: 158
Joined: 03 Feb 2016, 17:16
8

Det är själva stoppet som är mitt bekymmer, ingen som har en lösning på detta?

Vill inte drabbas av en morgontrött sambo som förtvivlat försöker släcka med strömbrytaren och inget händer.... jag har inga problem med att starta en VD osv för att avbryta scenen men resten av familjen kommer inte acceptera det...
hsn
Medlem
Posts: 30
Joined: 20 Nov 2014, 20:09
10
Location: Stockholm

Kolla även in denna tråd

http://www.zwaveforum.se/viewtopic.php? ... keup#p9857

Den kör jag själv lätt modifierad och avbryts om du trycker på väggbrytaren
Post Reply