Få till block scen (ej Lua...)

Post Reply
hedkar
Ny medlem
Posts: 1
Joined: 06 Feb 2016, 23:13
8

Hej försöker få till en notis när diskmaskin via wall plug är klar samt via fgs 213 när tvättmaskinen är klar.

Inte helt novis, dock har jag inte gett mig in på Lua.

Tacksam för tips.
alexndr
Medlem
Posts: 420
Joined: 14 Jul 2016, 14:38
7

Det där tror jag blir väldigt pilligt att lösa med en block- scene.
I mitt fall dyker t.ex. effektförburkningen under tvättprogrammet och det krävs en timer för att inte falsklarma att körningen är klar.
Har du en HC2a får du nog dyka ner i Lua trots allt. Finns färdiga exempel att utgå ifrån på forumet.
Fredrik85
Medlem
Posts: 67
Joined: 24 Jan 2016, 17:05
8

Jag har koden som Clabbe delade med sig av i nedanstående tråd, har den på diskmaskin, tvättmaskin och torktumlare med wall plug, funkar klockrent :)

viewtopic.php?f=21&t=4165&start=20
/Mvh Fredrik

Fibaro HC2.
Mest saker från Fibaro, sen lite blandat av diverse märken.
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1192
Joined: 03 Jan 2015, 16:49
9
Location: Vegby
Contact:

Här är en annan variant som använder TTS för att läsa upp då maskinen är klar.
Den talar också om hur mycket energi som tvätten förbrukade.
Det är Sankotronic på Fibaros forum som har gjort grundskriptet, och jag har kompletterat med energiförbrukning och TTS.

Code: Select all

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

--[[
-- Jag har modifierat Sankotronics utmärkta Appliance Monitoring Scene
-- och lagt till energiförbrukning samt TTS-funktion
-- Gör så här, skapa tre variabler
-- "energiTvattmaskin" (Sparar föregående energiförbrukning)
-- "TTS" (Variabel för din TTS-lösning. All text som hamnar här läses upp i högtalaren)
-- "TvattMaskin" med värdena "Off" och "On" (Håller koll på tvättmaskinens status)

-- I mitt fall säger den "Viktigt meddelande. Tvättmaskinen är klar. Den förbrukade, " ..energitot.. ", kilowatt&vol=10"
-- "&vol=10" utesluts beroende på din TTS-lösning

-- Ändra 66 till din pluggs ID
-- Lägg till ID om du vill ha push-meddelanden
-----------------------------------------------------------------------------
-- APPLIANCE MONITORING SCENE -- HERE PUT NAME OF APPLIANCE
-----------------------------------------------------------------------------
Copyright © 2016 Zoran Sankovic - Sankotronic. All Rights Reserved.
Version 1.0

-- VERSION HISTORY ----------------------------------------------------------
1.0 - Completely rewritten scene so can be used to monitor any appliance in
      the home or workplace. 

-- COPYRIGHT NOTICE ---------------------------------------------------------
Redistribution and use of this source code, with or without modification, 
is permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice,
   this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

3. The name of the author may not be used to endorse or promote products 
   derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY  COPYRIGHT OWNER  "AS IS"  AND ANY  EXPRESS  OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
MERCHANTABILITY  AND FITNESS FOR A  PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
EVENT  SHALL THE AUTHOR  BE  LIABLE  FOR ANY  DIRECT,  INDIRECT, INCIDENTAL, 
SPECIAL,  EXEMPLARY,  OR CONSEQUENTIAL  DAMAGES  (INCLUDING, BUT NOT LIMITED 
TO, PROCUREMENT  OF SUBSTITUTE  GOODS OR  SERVICES;  LOSS OF USE,  DATA,  OR 
PROFITS;  OR BUSINESS INTERRUPTION)  HOWEVER  CAUSED  AND  ON  ANY THEORY OF 
LIABILITY,  WHETHER  IN  CONTRACT,  STRICT  LIABILITY,  OR  TORT  (INCLUDING 
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-- SCENE DESCRIPTION --------------------------------------------------------
This scene can monitor any appliance for power consumption and send push
and/or popup notification when appliance start working and/or when it is
finished. You can also select to switch it off when is done or leave it
under power. Bellow you will find part of code for you to setup for
particular appliance and behavior of this scene.

-- LIST OF GLOBAL VARIABLES NEEDED ------------------------------------------

"applianceStatus" - Skapa en fördefinerad global variabel för den enhet
					som skall övervakas, tex. "TvattMaskin".
					Ge variabeln värdena "On" och "Off".
--]]

if (fibaro:countScenes() > 1) then
  fibaro:abort();
end

-- local energitot = 0

-- PART OF CODE FOR USERS TO EDIT AND SETUP ---------------------------------

-- GLOBALA VARIABLER ---------------------------------------------------------
-- Skriv här namnet på den globala variabel du skapade tex. "TvattMaskin"
-- Värdena för variabeln skall vara "On" and "Off"
local applianceStatus        = "TvattMaskin";
local applianceStatusMapping = {On="On", Off="Off"};

-- EXTRA GLOBALA VARIABLER ---------------------------------------------------
-- Här kan du lägga till egna extra variabler om du utökar denna scen med egen kod

-- APPLIANCE CONTROL DEVICE SETUP -------------------------------------------
-- Lägg in ID för den enhet som skall kontrolleras.
-- Skriv samma ID under properties ovan tex. 66 power
local deviceID           = 66;
-- Lägg in ett effektvärde som som är något högre än maskinens standby-värde
local deviceMinPower     = 2.5;
-- Lägg in antal minuter från standby tills ett meddelande skall skickas
local deviceStopDuration = 3;
-- Skriv "Yes" om enheten skall stängas av efter avslutat arbete
-- Skriv "No" om enheten skall lämnas påslagen
local deviceTurnOff      = "Yes";

-- USERS, PUSH AND POPUP NOTIFICATION SETUP ---------------------------------
-- Ange den eller de användare som push-meddelanden skall skickas till
local userID   = {49}; -- flera användare {49, 56, 78};
-- Flagga för varje användare om push-meddelande skall skickas
-- send notifications. You can add code in function extraUserCodeFirst()
local userFlag = {1}; -- flera användare tex. userFlag = {1, 1, 0};
-- PUSH MESSAGES SETUP ------------------------------------------------------
-- Ange push-meddelanden för start respektive stopp
local pushMessage = {start = "Tvättmaskinen har startats",
                     stop  = "Tvättmaskinen är klar "};
-- Skriv "Yes" för att få meddelande vid programstart, annars anger du "No"
local pushStart = "No";
-- Skriv "Yes" för att få meddelande då maskinen är klar, annars anger du "No"
local pushStop  = "No";

-- POPUP MESSAGES SETUP -----------------------------------------------------
-- enter popup message text and button caption for the appliance start and 
-- stop
local popupMainTitle         = "TVÄTTMASKIN";
local popupTimeFormat        = "%H:%M:%S | %d.%m.%Y.";
local popupContentTitleStart = "Tvättmaskinen startas";
local popupContentTitleStop  = "Tvättmaskinen är klar";
local popupContentBodyStart  = "Tvättmaskinen arbetar";
local popupContentBodyOn     = "Tvättmaskinen är inte avstängd";
local popupContentBodyOff    = "Tvättmaskinen har stängts av";
local popupImgUrl            = "";
local popupButtonCaption     = "OK";
-- enter "Yes" if you want to receive popup notification that appliance
-- started working else put "No"
local popupStart = "No";
-- enter "Yes" if you want to receive popup notification that appliance
-- finished working else put "No"
local popupStop  = "No";

-- DEBUGGING VARIABLES -----------------------------------------------------
-- setup debugging, true is turned on, false turned off.
local deBug        = true;  -- for showing events as they happen
local exDebug      = true; -- for checking loop counter

-- EXTRA FUNCTION WHERE YOU CAN ADD YOUR CODE ----------------------------
-- use this function to add code that will be executed before loop is
-- started and push adn popup notifications are sent
function extraUserCodeFirst()
  -- your code goes here

--  local pushMessage = {start = "Tvättmaskinen har startats",
--                     stop  = "Tvättmaskinen är klar "..energitot.." kW"};
  
  if deBug then logbug("yellow", "User extra code before loop executed") end;
end

-- use this function to add code that will be executed after loop is
-- finished and before sending push and popup notifications
function extraUserCodeLast()
  -- your code goes here
  
  
local energistart = tonumber(fibaro:getGlobalValue("energiTvattmaskin", energistopp))
local energistopp = tonumber(fibaro:getValue(deviceID, "energy"))
local energitot = energistopp - energistart
local energitot = energitot - energitot % 0.01

fibaro:setGlobal("energiTvattmaskin", energistopp)
  
  energitot = string.gsub(energitot,"%.",",")
  
---fibaro:setGlobal("Telegram", "Tvättmaskinen är klar. Den förbrukade " ..energitot.. " kWh")
fibaro:setGlobal("TTS", "Viktigt meddelande. Tvättmaskinen är klar. Den förbrukade, " ..energitot.. ", kilowatt&vol=10")

  if deBug then logbug("yellow", "User extra code after loop executed") end;
end
-- END OF CODE PART FOR USERS TO EDIT AND SETUP -----------------------------

-- BELLOW CODE NO NEED TO MODIFY BY USER ------------------------------------
-- except if you know what you're doin' :-P

local StartSource = fibaro:getSourceTrigger()
local countdown   = 0;
local version     = "1.0";

function logbug(color, message)
  fibaro:debug(string.format('<%s style="color:%s;">%s</%s>', "span", color, message, "span")); 
end

-- send push notification
function sendPush(message)
  if (#userID == #userFlag) then
    if #userID > 0 then
      for i = 1, #userID do
        if userFlag[i] == 1 then
          fibaro:call(userID[i], "sendPush", message); -- Send message to flagged users
          if deBug then logbug("orange", "Push notification sänd till användaren "..fibaro:getName(userID[i])) end;
        end
      end
    end
  else
    if deBug then logbug("red", "User and flag count is different, not setup correctly. Please check") end;
  end
end

-- send popup notification
function sendPopup(i)
  if i == 1 then
    popupContentTitle = popupContentTitleStart;
    popupContentBody  = popupContentBodyStart;
    popupTypeInfo     = "Info";
    if deBug then logbug("orange", "Popup notification sänd: övervakaren har startats") end;
  else
    popupContentTitle = popupContentTitleStop;
    if deviceTurnOff == "Yes" then
      popupContentBody = popupContentBodyOff
      if deBug then logbug("Yellow", "Övervakaren är nedstängd") end;
    else
      popupContentBody = popupContentBodyOn
    end
    popupTypeInfo     = "Success";
    if deBug then logbug("orange", "Popup notification sänd: övervakaren är avslutad") end;
  end
  -------------------------------------------
  HomeCenter.PopupService.publish({
      -- title (required)
      title = popupMainTitle,
      -- subtitle(optional), e.g. time and date of the pop-up call
      subtitle = os.date(popupTimeFormat),
      -- content header (optional)
      contentTitle = popupContentTitle,
      -- content (required)
      contentBody = popupContentBody,
      -- notification image (assigned from the variable)
      img = popupImgUrl,
      -- type of the pop-up
      type = popupTypeInfo,
      -- buttons definition
      buttons = { { caption = popupButtonCaption, sceneId = 0 } }
    })
  ---------------------------------------------
end

if ((tonumber(fibaro:getValue(deviceID, 'power')) > deviceMinPower) and (StartSource['type'] == "property")) then    
  logbug ("green", "Appliance monitoring scene started version "..version.." - © 2016 Sankotronic");
  fibaro:setGlobal(applianceStatus, applianceStatusMapping.On);
  extraUserCodeFirst();
  if pushStart  == "Yes" then sendPush(pushMessage.start) end;
  if popupStart == "Yes" then sendPopup (1) end;
  while true do
    local power = tonumber(fibaro:getValue(deviceID, 'power'));
    -- if power is greater than minimum then reset countdown
    if (power > deviceMinPower) then
      countdown = deviceStopDuration;
    else
      if (countdown > 0) then countdown = countdown - 1 end;
    end
    -- if countdown is ended then send notification and turn off
    if (countdown == 0) then
      if fibaro:getGlobalValue(applianceStatus) == applianceStatusMapping.On then
        fibaro:setGlobal(applianceStatus, applianceStatusMapping.Off);
        extraUserCodeLast();
        if pushStop      == "Yes" then sendPush(pushMessage.stop) end;
        if popupStop     == "Yes" then sendPopup (2) end;
        if deviceTurnOff == "Yes" then fibaro:call(deviceID, "turnOff") end;
      end
      logbug ("green", "Övervakningsscenen avslutades");
      -- Kill running scene cause it is done with appliance
      fibaro:abort();
    end
    if deBug then logbug("lightgreen", "Effekt: " .. power .. " W - nedräkning: " .. countdown .. " Min.") end;
    fibaro:sleep(60000);
  end
else
  logbug ("lightgreen", "Övervakningsscenen startades manuellt och kommer därför att avslutas.");
  -- Kill running scene cause it is done with appliance
  fibaro:abort();
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
Post Reply