Tvättmaskin (eller någon annan vitvara för den delen)

Post Reply
riro
Medlem
Posts: 52
Joined: 27 Mar 2017, 11:02
7
Location: Falun
Contact:

Försöker lära mig lite LUA och HC2 så detta fick bli mitt första projekt.

Ris, ros och kommentarer mottages gärna.

Code: Select all

--[[
%% properties
15 power
%% events
%% globals
--]]

-- Name of the appliance and parameter that report watts
local idAppliance = 15
local applianceParameter = "power"
-- You need to change to this id and param in the trigger-section at the top

-- Max/Min values
local wattRunning = 200
local wattStandby = 10
-- Minimum seconds to be in standby-state before sending push
local minSeconds = 300

-- Predefined variable with two values (needs to be created)
local statusVarName = "Tvattmaskin"
local statusVarValRunning = "Startad"
local statusVarValDone = "Klar"

-- Push messages to phone (needs to be created)
local idPush = {4}
local pushMessageID = "TvattmaskinKlar"

-- Extra variable (for other Push-messages), set ExtraVariable to "" to disable
local ExtraVariable = "Pushover"
local ExtraString = "Tvättmaskinen är klar;iPhone;1;echo"

-- Show debug text or not
local doDebug = true

-- =============================================================================
msgDebug = function (color, message)
  if doDebug then
  	fibaro:debug("<span style='color: " .. color .. "'>" .. message .. "</span>")
  end 
end

if (fibaro:countScenes() > 1) then
  msgDebug("Red", "Allready running - Aborting!")
  fibaro:abort()
end

local pwrAppliance = fibaro:getValue(idAppliance, applianceParameter)
local secondsSinceUpdate = os.time() - fibaro:getGlobalModificationTime(statusVarName)
msgDebug("Gray", "Using " .. pwrAppliance .. " watts, status is " .. fibaro:getGlobal(statusVarName) .. " the last " .. tostring(secondsSinceUpdate) .. " seconds")

if (tonumber(pwrAppliance) > wattRunning) then
  msgDebug("Yellow", "Usage is " .. pwrAppliance .. " watts, settings status to " .. statusVarValRunning)
  fibaro:setGlobal(statusVarName, statusVarValRunning);
elseif ( (tonumber(pwrAppliance) < wattStandby) and (fibaro:getGlobal(statusVarName) ~= statusVarValDone) ) then
  if (secondsSinceUpdate > minSeconds) then
    msgDebug("White", "Usage below " .. wattStandby .. " watts for " .. tostring(secondsSinceUpdate) .. " seconds")
    if (fibaro:getGlobal(statusVarName) == statusVarValRunning) then
      msgDebug("Green", "State is " .. statusVarValRunning .. " and usage is below " .. tostring(wattStandby) .. " for more than  " .. tostring(minSeconds) .. " seconds")

      for loop,Push in pairs(idPush) do
        msgDebug("Green", "Sending push message " .. tostring(pushMessageID) .. " to devcie " .. tostring(Push))
        fibaro:call(Push, "sendDefinedPushNotification", pushMessageID)
      end

      if (string.len(ExtraVariable) > 1) then
        msgDebug("Green", "Setting variable '" .. ExtraVariable .. "' = '" .. ExtraString .. "'")
        fibaro:setGlobal(ExtraVariable,ExtraString)
      end

      msgDebug("Yellow", "Setting state to  " .. statusVarValDone)
      fibaro:setGlobal(statusVarName, statusVarValDone);
    end

  else
    msgDebug("Orange", "To few seconds (prevent flapping and spamming)")
  end
end
-- =============================================================================
riro
Medlem
Posts: 52
Joined: 27 Mar 2017, 11:02
7
Location: Falun
Contact:

Kan tillägga att jag har ett schema som triggar scenen en gång var 5'e minut...
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1203
Joined: 03 Jan 2015, 16:49
9
Location: Vegby
Contact:

Kan tillägga att jag har ett schema som triggar scenen en gång var 5'e minut...
Visst är det kul att göra egna scener, men det finns färdiga sådana på forumet också :-)
Här är ett exempel som inte triggas av någon extra scen och som även räknar ut energiförbrukningen.

Code: Select all

--[[
%% properties
66 power
%% events
%% globals
--]]

fibaro:debug(" SCENE START ")
if fibaro:countScenes() > 1 then
fibaro:debug(" SCENE ABORT - too many instances ")
fibaro:abort()
end

local currentDate = os.date("*t");
local power = fibaro:getValue(66, "power") -- monitored unit 
local washOn = "washOn" -- create a variable WashOn 
local washDone = "washDone" -- create a variable WashDone 
local washMail = "washMail" -- create a variable WashMail 
 
fibaro:debug("Tvättmaskinscriptet har aktiverats: " .. os.date()); 
fibaro:debug("Effektförbrukningen just nu = "..power.." Watt") 

if ( tonumber(fibaro:getValue(66, "power")) > 300 ) then -- 200Watt change to wanted value in watt 
fibaro:setGlobal(washOn, "1") -- sets variable to 1 if machine is running 
fibaro:setGlobal(washDone, "0") -- sets variable WashDone to 0 
fibaro:setGlobal(washMail, "0") -- sets variable WashMail to 0 
fibaro:debug("Tvättmaskinen har startats") -- lite debug text :) 
 
elseif ( tonumber(fibaro:getValue(66, "power")) < 2 ) then 
fibaro:debug("Tvätten är klar.") 
fibaro:setGlobal(washOn, "0") 
fibaro:setGlobal(washDone, "1") -- Tvätten är klar! 
 
end 
if ( tonumber(fibaro:getValue(66, "power")) < 2 ) and fibaro:getGlobalValue(washDone) == "1" and fibaro:getGlobalValue(washMail) == "0" then 
  
   fibaro:sleep(150*1000) -- 120 sec delay
  if ( tonumber(fibaro:getValue(66, "power")) < 2 ) then
 fibaro:setGlobal(washMail, "1")
  fibaro:debug("Skicka E-mail")

energi=tonumber(fibaro:getValue(66, "energy"))
--fibaro:getGlobal("WashEnergy", energistart)
    local energistart = tonumber(fibaro:getGlobalValue("washEnergy", energistart))
local energitot = energi - energistart
local energitot = energitot - energitot % 0.01
--wind = wind - wind % 0.1 ger en decimal, wind = wind - wind % 0.01 ger två decimaler osv.    

    local subject = "Tvätten klar.".." Förbunkade "..energitot.." kW"
local message = "Tvätten blev klar kl." .." ".. string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min).." och energiförbrukningen blev "..energitot.." kW"
--local message = "Tvätten var klar klockan" .." ".. tonumber("%02d", currentDate.hour) .. ":" .. tonumber("%02d", currentDate.min.." och förbrukade "..energi.." kW")
fibaro:setGlobal("washEnergy", energi)

    fibaro:call(69, "sendEmail", subject, message) -- YH
	fibaro:call(70, "sendEmail", subject, message) -- RH
   	fibaro:call(49, "sendPush", subject, message) -- RH Mobil

    fibaro:debug("Mail är skickade till RH och YH")
    
  end 
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
riro
Medlem
Posts: 52
Joined: 27 Mar 2017, 11:02
7
Location: Falun
Contact:

RH_Dreambox wrote:
Kan tillägga att jag har ett schema som triggar scenen en gång var 5'e minut...
Visst är det kul att göra egna scener, men det finns färdiga sådana på forumet också :-)
Här är ett exempel som inte triggas av någon extra scen och som även räknar ut energiförbrukningen.
Intressant ide med energiförbrukningen... den ska jag nog stjäla.

Orsaken till extra scenen är följande scenario (ovetande om det egenligen kan hända):
1. Maskinen tvättar - Hög effekt
2. Maskinen stannar till i programmet - Låg effekt
3. Maskinen tävttar igen - Hög effekt
4. Standby - Låg effekt
5. Standby på samma effekt = ingen trigger

"Jag" behöver en trigger en stund (300 sek) efter den har gått ner på standby för att inte råka trigga en notifiering när 2'an händer.
Går väl säkerligen att komma runt genom att finslipa tröskelvärdena... men jag har en annan ide som jag jobbar på, återkommer eventuellt med en snyggare lösning. :P
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1203
Joined: 03 Jan 2015, 16:49
9
Location: Vegby
Contact:

Bara det fungerar som det är tänkt så är det ju OK.
I mitt fall har jag en fördröjning på 150 sek. Om förbrukningen fortfarande ligger under lägsta värdet (2 watt) efter 150 sek så anses tvätten vara klar. Luckan hinner då öppnas i lagom tid till när man kommer ned till tvättstugan.
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
dadid
Medlem
Posts: 88
Joined: 29 Jan 2013, 16:32
11

Följande scen fungerade bra initialt. Efter en firmwareuppgradering av HC2:an stoppas den pga "to many instances".
Jag är inte bekant med vad det innebär och hur jag bör lösa det. Vore tacksam för guidning:

--[[
%% autostart
%% properties
27 power
%% globals
--]]
local power_socket = 27
local powerlive = tonumber(fibaro:getValue(power_socket, "power")) -- monitored unit
fibaro:debug("Förbrukning = "..powerlive.." Watt")
if (fibaro:countScenes()>1)
then
fibaro:abort();
end
local run = 0
--local power_socket = 27
local currentDate = os.date("*t");
local power = fibaro:getValue(power_socket, "power")
local counter = 0

if ( tonumber(fibaro:getValue(power_socket, "power")) > 60 ) and run == 0 then
local start = (os.time())
fibaro:debug("Tvättmaskin startad")
fibaro:debug("Förbrukning = "..power.." Watt")
run = 1
end


while run == 1 do

if ( tonumber(fibaro:getValue(power_socket, "power")) < 4) then
counter = counter + 1
local power2 = fibaro:getValue(power_socket, "power")
fibaro:debug('counter = ' ..counter.. " : "..power2.."Watt")
end
if ( tonumber(fibaro:getValue(power_socket, "power")) > 4 ) then
counter = 0
end
if ( tonumber(fibaro:getValue(power_socket, "power")) < 4) and counter > 60 then
fibaro:debug("Tvättmaskin klar.")
local power3 = fibaro:getValue(power_socket, "power")
fibaro:debug("Förbrukning 3 = "..power3.." Watt")
fibaro:debug("Skicka meddelande")
fibaro:call(138,"sendPush", " Tvättmaskinen är klar" )
fibaro:call(167,"sendPush", " Tvättmaskinen är klar" )
-- fibaro:call(138, "sendDefinedPushNotification", "9");
run = 0
end

--fibaro:sleep(1000)
end
]
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1203
Joined: 03 Jan 2015, 16:49
9
Location: Vegby
Contact:

Testa med att flytta upp kontrollen av antal instances överst i koden. Då stoppas dubblett-scener innan scen-koden börjar bearbetas.

Code: Select all

--[[
%% autostart
%% properties
27 power
%% globals
--]]

if (fibaro:countScenes() > 1) then
  fibaro:abort();
end
Den här funktionen med kontroll av instances har funnits med ett bra tag nu, så uppdaterade du från en väldigt tidig version eftersom du inte hade problemen tidigare?
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
dadid
Medlem
Posts: 88
Joined: 29 Jan 2013, 16:32
11

Tack. Det löste problemet med to many instances.
Vid körning av scriptet verkar allt nu helt ok.
Dock kommer inget meddelande till våra telefoner. Har nog bytt ut båda telefonerna sedan scriptet ursprungligen lades in. Minns inte hur man väljer id. Tycker mig ha letat, men inte funnit råd.


Skickat från min iPad med Tapatalk
riro
Medlem
Posts: 52
Joined: 27 Mar 2017, 11:02
7
Location: Falun
Contact:

http://ip:80/api/devices är en bra början (eller så går du via http://ip/docs så får du lite mer lättläst)
dadid
Medlem
Posts: 88
Joined: 29 Jan 2013, 16:32
11

Hej. Erkänner mitt tillkortakommande. Jag vet inte vad jag skall göra med ovanstående tips rörande enhetslista.


Skickat från min iPad med Tapatalk
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1203
Joined: 03 Jan 2015, 16:49
9
Location: Vegby
Contact:

Kolla med hjälp av HC2 Toolkit, där hittar du dem lätt.
http://www.zwaveforum.se/viewtopic.php? ... kit#p19227
Attachments
Mobil.PNG
Mobil.PNG (9.82 KiB) Viewed 17175 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
MickeS
Medlem
Posts: 425
Joined: 12 Oct 2016, 07:53
8

Var fylls ID för pluggen i ?










RH_Dreambox wrote: 29 Mar 2017, 12:03
Kan tillägga att jag har ett schema som triggar scenen en gång var 5'e minut...
Visst är det kul att göra egna scener, men det finns färdiga sådana på forumet också :-)
Här är ett exempel som inte triggas av någon extra scen och som även räknar ut energiförbrukningen.

Code: Select all

--[[
%% properties
66 power
%% events
%% globals
--]]

fibaro:debug(" SCENE START ")
if fibaro:countScenes() > 1 then
fibaro:debug(" SCENE ABORT - too many instances ")
fibaro:abort()
end

local currentDate = os.date("*t");
local power = fibaro:getValue(66, "power") -- monitored unit 
local washOn = "washOn" -- create a variable WashOn 
local washDone = "washDone" -- create a variable WashDone 
local washMail = "washMail" -- create a variable WashMail 
 
fibaro:debug("Tvättmaskinscriptet har aktiverats: " .. os.date()); 
fibaro:debug("Effektförbrukningen just nu = "..power.." Watt") 

if ( tonumber(fibaro:getValue(66, "power")) > 300 ) then -- 200Watt change to wanted value in watt 
fibaro:setGlobal(washOn, "1") -- sets variable to 1 if machine is running 
fibaro:setGlobal(washDone, "0") -- sets variable WashDone to 0 
fibaro:setGlobal(washMail, "0") -- sets variable WashMail to 0 
fibaro:debug("Tvättmaskinen har startats") -- lite debug text :) 
 
elseif ( tonumber(fibaro:getValue(66, "power")) < 2 ) then 
fibaro:debug("Tvätten är klar.") 
fibaro:setGlobal(washOn, "0") 
fibaro:setGlobal(washDone, "1") -- Tvätten är klar! 
 
end 
if ( tonumber(fibaro:getValue(66, "power")) < 2 ) and fibaro:getGlobalValue(washDone) == "1" and fibaro:getGlobalValue(washMail) == "0" then 
  
   fibaro:sleep(150*1000) -- 120 sec delay
  if ( tonumber(fibaro:getValue(66, "power")) < 2 ) then
 fibaro:setGlobal(washMail, "1")
  fibaro:debug("Skicka E-mail")

energi=tonumber(fibaro:getValue(66, "energy"))
--fibaro:getGlobal("WashEnergy", energistart)
    local energistart = tonumber(fibaro:getGlobalValue("washEnergy", energistart))
local energitot = energi - energistart
local energitot = energitot - energitot % 0.01
--wind = wind - wind % 0.1 ger en decimal, wind = wind - wind % 0.01 ger två decimaler osv.    

    local subject = "Tvätten klar.".." Förbunkade "..energitot.." kW"
local message = "Tvätten blev klar kl." .." ".. string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min).." och energiförbrukningen blev "..energitot.." kW"
--local message = "Tvätten var klar klockan" .." ".. tonumber("%02d", currentDate.hour) .. ":" .. tonumber("%02d", currentDate.min.." och förbrukade "..energi.." kW")
fibaro:setGlobal("washEnergy", energi)

    fibaro:call(69, "sendEmail", subject, message) -- YH
	fibaro:call(70, "sendEmail", subject, message) -- RH
   	fibaro:call(49, "sendPush", subject, message) -- RH Mobil

    fibaro:debug("Mail är skickade till RH och YH")
    
  end 
end

Homecenter 2

Kameror, värme, larm och belysning från olika leverantörer
MickeS
Medlem
Posts: 425
Joined: 12 Oct 2016, 07:53
8

för detta e väl en ren scen som inte kräver en VD eller liknande ?
Homecenter 2

Kameror, värme, larm och belysning från olika leverantörer
MickeS
Medlem
Posts: 425
Joined: 12 Oct 2016, 07:53
8

har hittat nu :)

det va POWER man ändrade...
men jag vill ju nu ha push till mobilen, var läggs det in ?
Homecenter 2

Kameror, värme, larm och belysning från olika leverantörer
MickeS
Medlem
Posts: 425
Joined: 12 Oct 2016, 07:53
8

"Kör instancer 0" står det med... ska det inte stå 1 där ?
Homecenter 2

Kameror, värme, larm och belysning från olika leverantörer
MickeS
Medlem
Posts: 425
Joined: 12 Oct 2016, 07:53
8

Skärmklipp.PNG
Homecenter 2

Kameror, värme, larm och belysning från olika leverantörer
Post Reply