Jump to content

Welcome to Smart Home Forum by FIBARO

Dear Guest,

 

as you can notice parts of Smart Home Forum by FIBARO is not available for you. You have to register in order to view all content and post in our community. Don't worry! Registration is a simple free process that requires minimal information for you to sign up. Become a part of of Smart Home Forum by FIBARO by creating an account.

 

As a member you can:

  •     Start new topics and reply to others
  •     Follow topics and users to get email updates
  •     Get your own profile page and make new friends
  •     Send personal messages
  •     ... and learn a lot about our system!

 

Regards,

Smart Home Forum by FIBARO Team


Recommended Posts

Posted


I would like to incorporate into a quick application the calculation of the swimming pool filtration running time = shutdown after a defined time. I managed to write the conditions for starting (IF PV production > house consumption and battery charge > 90% ......). I have a problem with the running time - I would like to write the start time into a variable and calculate the running time on a given day. In a normal program, I would write it easily using a global variable in which I would store the startup time when starting (Integer: CasOn = time;) then I would compare in a loop and store the runtime in a second global variable (Integer: DobaBehu = time – CasOn). I would calculate the run time because, depending on the PV production, the filtration can turn on several times (it may not have a continuous run). Subsequently, it would be enough to evaluate whether the running time already corresponds to the defined time and turn off the filtering and wait for the next day (Integer: DobaBehu IF(DobaBehu <= = 14400) then {Filtration = off}; ; //14400 is 4h in sec.
However, I don't know how to write code in a quick application for HC3. Can any of you please advise me?

 

Note – question translated from Czech in google translator.

 

Výpočet doby běhu filtrace bazénu
Rád bych do rychlé aplikace zakomponoval výpočet doby běhu filtrace bazénu = vypnutí po uplynutí definovaného času. Napsání podmínky pro spuštění jsem zvládl (IF vyroba PV > spotřeba domu and nabití baterie > 90% ......). Problém mám s dobou běhu - rád bych zapsal do proměnné čas spuštění a počítal dobu běhu v daném dni. V běžném programu bych to napsal snadno za pomocí globální proměnné do níž bych při spuštění uložil čas spuštění (Integer:  CasOn = time;) následně bych ve smyčce porovnával a ukládal do druhé globální proměnné dobu běhu (Integer: DobaBehu = time – CasOn). Dobu běhu bych vypočítával proto, protože podle výroby PV může filtrace zapnout několikrát (nemusí mít souvislý běh). Následně by stačilo jen vyhodnotit, zda již doba běhu odpovídá definované době a vypnout filtraci a počkat na další den (Integer: DobaBehu  IF(DobaBehu <= = 14400) then  {Filtrace = off}; ;  //14400 jsou 4h v sec. 
S napsáním kódu v rychlé aplikaci pro HC3 si tím však nevím rady. Poradí mi prosím někdo z vás ?

 

Poznámka – dotaz přeložen z češtiny v google translator.

  • Topic Author
  • Posted

    solved today

    Posted

    Hi @Vitek ,

     

    Happy that you solved it. Is there a chance you share the calculation? Thank you!

  • Topic Author
  • Posted

    Jasně, zde je kód jenž mi v HC3 běží

     

    Sure, here is the code that works for me in HC3

     

     

      -- OVLÁDÁNÍ ZÁVISLÉ NA PROVOZU FVE (je-li mimo provoz vše následující ignoruje) ---    
      if(hub.getValue(298, "value") ~= nil) then                        -- FVE je zapnuta (298 = FVE výkon)
        -- načtení hodnot do proměnných
        local FVE_vykon = tonumber(hub.getValue(298, "value"))          -- 298 = FVE_vykon
        local Spotr_domu = tonumber(hub.getValue(301, "value"))         -- 301 = spotřebu domu 
        local Nabiti_bat = tonumber(hub.getValue(305, "value"))         -- 305 = nabití baterie
        local StavRele_FiltrBaz = hub.getValue(288, "value")            -- 288 = filtrace (načíst aktuální stav relé)

        -- OVLÁDÁNÍ FILTRACE BAZEN ---    
        -- zapínání filtrace dle výkonu FVE a stavu nabití baterie
        if((hub.getValue(298, "value") > 4000) and                      -- FVE vyrábí více jak 4000 wath
            (StavRele_FiltrBaz == false) and                            -- je-li relé vypnuto
             (FVE_vykon >= (Spotr_domu+2500)) and                       -- výkon FVE musí být vyšší než spoř.domu + 2500 wath
              (Nabiti_bat > 95) and                                     -- baterie musí být nabita nad 95 procent
               (Time_HH >= 13) and                                      -- je-li více nebo rovno 13 h
                (Time_MM >= 00) and                                     -- je-li více jak 13:00 

                          (11 < 2 == true)) then                         -- jen pro ukončení podmínky
          hub.call(288, "turnOn")                                       -- filtraci zapni
        end


        -- VYPÍNÁNÍ filtrace dle výkonu FVE a stavu nabití baterie
        if((StavRele_FiltrBaz == true) and                              -- filtrace běží (relé je zapnuto)
            ((FVE_vykon <= Spotr_domu+1500) or                          -- výkon FVE je malý
              (FVE_vykon <= 4000) or                                    -- výkon FVE je malý
               (Nabiti_bat < 95))) then                                 -- baterie je nabita na méně jak 95 procent
          hub.call(288, "turnOff")                                      -- filtraci vypni
        end

        -- VYPÍNÁNÍ filtrace dle času
        if((StavRele_FiltrBaz == true) and                              -- filtrace běží (relé je zapnuto)
            (Time_HH >= 21) and                                         -- je-li více nebo rovno 21 h
             (Time_MM >= 00) and                                        -- je-li více jak 21:00 
              (Time_HH <= 23) and                                       -- je méně nebo rovno 23 h
               (Time_MM <= 59)) then                                    -- je-méně jak 23:59 
          hub.call(288, "turnOff")                                      -- filtraci vypni
        end
        
       
        -- SLEDOVÁNÍ DOBY BĚHU FILTRACE 
        local Cas_Aktual = (os.date("%H")*60)+(os.date("%M"))           -- načtu aktuální čas v minutách
        if(varDobaBehuFiltrace == nil) then                             -- pokud je proměnné prázdná - inicializuj
          varDobaBehuFiltrace = tonumber(0) 
        end

        if(varCRC_cas == nil) then                                      -- pokud je proměnné prázdná - inicializuj
          varCRC_cas = tonumber(Cas_Aktual) 
        end

       -- každou minutu testuji a počítám dobu běhu filtrace bazénu    
        if(tonumber(Cas_Aktual-1) >= tonumber(varCRC_cas)) then
          varCRC_cas = tonumber(Cas_Aktual)                             -- uložím aktuální čas v minutách
          
          if((StavRele_FiltrBaz == true) and (varDobaBehuFiltrace < 240)) then  -- filtrace běží méně než 4 hodiny
            varDobaBehuFiltrace = tonumber(varDobaBehuFiltrace+1)       -- zapiš dobu běhu
            print("******** Doba běhu: " .. varDobaBehuFiltrace .. " ********")
          end
          
          if((StavRele_FiltrBaz == true) and (varDobaBehuFiltrace >= 240)) then  -- filtrace běží déle než 4 hodiny
            hub.call(288, "turnOff")                                    -- filtraci vypni
          end
        end

        -- denní reset doby běhu filtrace a varCRC_cas 
        local currentTimeDisplay = os.date("%H:%M:%S")                  -- načtu aktuální čas 
        -- resetovat hodnot o půlnoci
        if((currentTime == "0000" or varCRC_cas == 1439) and            -- v době 23:59 až 00:00
            (self:getVariable("todayReset") == "N")) then               -- a je-li "N" = resetuj proměnné 
          varDobaBehuFiltrace = nil 
          varTestDobaBehuFiltrace = nil 
          varCRC_cas = tonumber(1) 
          self:setVariable("todayReset", "Y")    
          print("--- Proběhl reset doby běhu filtrace v: " .. currentTimeDisplay .. " ---")     
        end    

        if((varCRC_cas == 1439) and                                     -- v době 23:59 až 00:01
            (self:getVariable("todayReset") == "Y")) then               -- a je-li již "Y" = stále resetuj 
          varCRC_cas = tonumber(1) 
        end
        -- minutu po půlnoci se indikátor resetování zobrazí pouze proto, aby se zabránilo vícenásobnému resetování za den
        if(varCRC_cas == 2 and self:getVariable("todayReset") == "Y") then
          self:setVariable("todayReset", "N")
        end    
        -- aktualizace zobrazované doby běhu filtrace v daném dni
        self:updateView("Label_6", "text", "Dnešní doba běhu filtrace: " .. varDobaBehuFiltrace .. " min ")
        
        -- KONEC OVLÁDÁNÍ FILTRACE BAZEN ---    
       -- *********************************************************************************
       -- *********************************************************************************
    end

    • Thanks 1
  • Topic Author
  • Posted

    Ještě doplňující poznámka k programovému kódu - momentálně vše testuji na samostatném relé se stejným programovým kódem, proto je prozatím relé filtrace dočasně v podmínce zablokováno (aby nespínalo). Viz  řádek  pro spuštění  (11 < 2 == true)) then    -- jen pro ukončení podmínky

     

    One additional note about the program code - I am currently testing everything on a separate relay with the same program code, so for now the filtration relay is temporarily blocked in the condition (so that it does not switch). See the line to run (11 < 2 == true)) then -- just to terminate the condition

    Join the conversation

    You can post now and register later. If you have an account, sign in now to post with your account.

    Guest
    Reply to this topic...

    ×   Pasted as rich text.   Paste as plain text instead

      Only 75 emoji are allowed.

    ×   Your link has been automatically embedded.   Display as a link instead

    ×   Your previous content has been restored.   Clear editor

    ×   You cannot paste images directly. Upload or insert images from URL.

    ×
    ×
    • Create New...