This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Resident script pump circulation
#59
(27.10.2018, 14:44)buuuudzik Wrote: Here updated version (there was a lack of "." after tablename):

Code:
------------------------------------------------------ -- DEFINE GLOBAL VARIABLES AND ZONES------------------ ------------------------------------------------------ seasonGA = '2/0/100' logging = true zones = {     {         summer = 'pompa_circolazione_giorno_estate',         winter = 'pompa_circolazione_giorno_inverno',         pump = '2/0/1',         offset = 60,         minimum = 30     } } ------------------------------------------------------ -- DONT CHANGE NOTHING BELOW-------------------------- ------------------------------------------------------ season = grp.getvalue(seasonGA) nextCalculationAfter = 30 -- it will be changed by first zone if logging then logs = {season = season} end -- #TO DELETE function calcOutOfTheSeason(tag)     local opened = false     local firstTimestamp = 0     local valves = grp.tag(tag)          if logging then logs.zones[#logs.zones].valvesInWinter = {} end -- #TO DELETE          for v = 1, #valves, 1 do         local valve = valves[v]                  if valve.value then             opened = true             if firstTimestamp > 0 then                 if firstTimestamp > valve.updatetime then firstTimestamp = valve.updatetime end             else                 firstTimestamp = valve.updatetime             end         end                  if logging then logs.zones[#logs.zones].valvesInWinter[v] = {name = valve.name, value = valve.value, tags = valve.tags, opened = opened, firstTimestamp = firstTimestamp} end -- #TO DELETE     end          return opened, firstTimestamp end function calcDuringTheSeason(tag)     local opened = false     local firstTimestamp = 0     local valves = grp.tag(tag)          if logging then logs.zones[#logs.zones].valvesInSummer = {} end -- #TO DELETE          valves = grp.tag(tag)     for v = 1, #valves, 1 do       valve = valves[v]              if valve.value then         opened = true         if firstTimestamp > 0 then           if firstTimestamp > valve.updatetime then firstTimestamp = valve.updatetime end         else           firstTimestamp = valve.updatetime         end       end              if logging then logs.zones[#logs.zones].valvesInSummer[v] = {name = valve.name, value = valve.value, tags = valve.tags, opened = opened, firstTimestamp = firstTimestamp} end -- #TO DELETE     end          return opened, firstTimestamp end if logging then     logs.season = season     logs.zones = {} end -- #TO DELETE for z, zone in ipairs(zones) do     local summerTag = zone.summer     local winterTag = zone.winter     local pumpGA = zone.pump     local openingValveTime = zone.offset     local minInterval = zone.minimum          if logging then         logs.zones[z] = {             settings = {                 summerTag = summerTag,                 winterTag = winterTag,                 pumpGA = pumpGA,                 pumpBeforeCmd = grp.getvalue(pumpGA),                 openingValveTime = openingValveTime,                 minInterval = minInterval             }         }     end -- #TO DELETE          -- CALCULATE SINGLE          local opened, firstTimestamp = false, 0          -- Calc valve state and firsttimestamp for update     if season then         opened, firstTimestamp = calcDuringTheSeason(winterTag)     else         opened, firstTimestamp = calcOutOfTheSeason(summerTag)     end          if logging then         logs.zones[z].opened = opened         logs.zones[z].firstTimestamp = firstTimestamp     end -- # TO DELETE          -- Find nextZoneCalculationAfter for current zone     local nextZoneCalculationAfter = 0          if logging then         local pump = grp.find(pumpGA)         local pumpState = { name = pump.name, value = pump.value, lastupdate = os.time() - pump.updatetime }         logs.zones[z].pumpState = {before = pumpState}     end          if opened then         local fullyOpened = os.microtime() - firstTimestamp >= openingValveTime                  if fullyOpened then             grp.write(pumpGA, true)             nextZoneCalculationAfter = minInterval             if logging then logs.zones[z].info = 'Turn on pump because valve is fully opened. Next calculation after ' .. nextZoneCalculationAfter .. 's.' end -- # TO DELETE         else             grp.write(pumpGA, false)             nextZoneCalculationAfter = openingValveTime + 1 - (os.microtime() - firstTimestamp) -- run a little after possible change             if logging then logs.zones[z].info = "Turn off pump because valve isn't yet fully opened. Next calculation after " .. nextZoneCalculationAfter .. 's.' end -- # TO DELETE         end     else         grp.write(pumpGA, false)         nextZoneCalculationAfter = openingValveTime + 1         if logging then logs.zones[z].info = 'Turn off pump because valve is closed. Next calculation after ' .. nextZoneCalculationAfter .. 's.' end -- # TO DELETE     end          if logging then         local pump = grp.find(pumpGA)         local pumpState = { name = pump.name, value = pump.value, lastupdate = os.time() - pump.updatetime }         logs.zones[z].pumpState.after = pumpState     end          -- Update nextCalculationAfter (global)     if z == 1 or nextCalculationAfter < nextZoneCalculationAfter then         nextCalculationAfter = nextZoneCalculationAfter         if logging then logs.zones[z].info = logs.zones[z].info .. ' Variable nextCalculationAfter was changed to ' .. nextZoneCalculationAfter .. '.' end -- # TO DELETE     end end -- log('Next calculation after: ' .. nextCalculationAfter .. 's.') if nextCalculationAfter and nextCalculationAfter > 5 then     if logging then         logs.sleepDescription = 'Calculated ' .. nextCalculationAfter .. 's'         log(logs)     end -- # TO DELETE     os.sleep(nextCalculationAfter) else     if logging then         logs.sleepDescription = 'Default ' .. nextCalculationAfter .. 's (calculated value is 0 or other equal to false)'         log(logs)     end -- # TO DELETE     os.sleep(30) end

Unfortunately not working.

Here below log:

Circolazione mansarda 29.10.2018 17:10:50
* table:
[zones]
 * table:
  [1]
   * table:
    [info]
     * string: Turn off pump because valve is closed. Next calculation after 61s. Variable nextCalculationAfter was changed to 61.
    [settings]
     * table:
      [pumpGA]
       * string: 2/0/2
      [summerTag]
       * string: summer_pump
      [pumpBeforeCmd]
       * bool: false
      [winterTag]
       * string: winter_pump
      [minInterval]
       * number: 30
      [openingValveTime]
       * number: 60
    [pumpState]
     * table:
      [after]
       * table:
        [lastupdate]
         * number: 0
        [name]
         * string: Pompa Circolazione Mansarda
        [value]
         * bool: false
      [before]
       * table:
        [lastupdate]
         * number: 60
        [name]
         * string: Pompa Circolazione Mansarda
        [value]
         * bool: false
    [firstTimestamp]
     * number: 0
    [valvesInSummer]
     * table:
      [1]
       * table:
        [value]
         * bool: false
        [firstTimestamp]
         * number: 0
        [name]
         * string: T7 FB Heating floor attic valve
        [opened]
         * bool: false
    [opened]
     * bool: false
[sleepDescription]
 * string: Calculated 61s
[season]
 * bool: true



[size=undefined]
Circolazione mansarda 29.10.2018 17:11:51
* table:
[zones]
 * table:
  [1]
   * table:
    [info]
     * string: Turn off pump because valve isn't yet fully opened. Next calculation after 43s. Variable nextCalculationAfter was changed to 43.
    [settings]
     * table:
      [pumpGA]
       * string: 2/0/2
      [summerTag]
       * string: summer_pump
      [pumpBeforeCmd]
       * bool: false
      [winterTag]
       * string: winter_pump
      [minInterval]
       * number: 30
      [openingValveTime]
       * number: 60
    [pumpState]
     * table:
      [after]
       * table:
        [lastupdate]
         * number: 0
        [name]
         * string: Pompa Circolazione Mansarda
        [value]
         * bool: false
      [before]
       * table:
        [lastupdate]
         * number: 61
        [name]
         * string: Pompa Circolazione Mansarda
        [value]
         * bool: false
    [firstTimestamp]
     * number: 1540829493
    [valvesInSummer]
     * table:
      [1]
       * table:
        [value]
         * bool: true
        [firstTimestamp]
         * number: 1540829493
        [name]
         * string: T7 FB Heating floor attic valve
        [opened]
         * bool: true
    [opened]
     * bool: true
[sleepDescription]
 * string: Calculated 43s
[season]
 * bool: true
[/size]


[size=undefined]
Circolazione mansarda 29.10.2018 17:12:34
* table:
[zones]
 * table:
  [1]
   * table:
    [info]
     * string: Turn off pump because valve isn't yet fully opened. Next calculation after 59s. Variable nextCalculationAfter was changed to 59.
    [settings]
     * table:
      [pumpGA]
       * string: 2/0/2
      [summerTag]
       * string: summer_pump
      [pumpBeforeCmd]
       * bool: false
      [winterTag]
       * string: winter_pump
      [minInterval]
       * number: 30
      [openingValveTime]
       * number: 60
    [pumpState]
     * table:
      [after]
       * table:
        [lastupdate]
         * number: 0
        [name]
         * string: Pompa Circolazione Mansarda
        [value]
         * bool: false
      [before]
       * table:
        [lastupdate]
         * number: 43
        [name]
         * string: Pompa Circolazione Mansarda
        [value]
         * bool: false
    [firstTimestamp]
     * number: 1540829552
    [valvesInSummer]
     * table:
      [1]
       * table:
        [value]
         * bool: true
        [firstTimestamp]
         * number: 1540829552
        [name]
         * string: T7 FB Heating floor attic valve
        [opened]
         * bool: true
    [opened]
     * bool: true
[sleepDescription]
 * string: Calculated 59s
[season]
 * bool: true
[/size]


[size=undefined]
Circolazione mansarda 29.10.2018 17:13:33
* table:
[zones]
 * table:
  [1]
   * table:
    [info]
     * string: Turn off pump because valve isn't yet fully opened. Next calculation after 60s. Variable nextCalculationAfter was changed to 60.
    [settings]
     * table:
      [pumpGA]
       * string: 2/0/2
      [summerTag]
       * string: summer_pump
      [pumpBeforeCmd]
       * bool: false
      [winterTag]
       * string: winter_pump
      [minInterval]
       * number: 30
      [openingValveTime]
       * number: 60
    [pumpState]
     * table:
      [after]
       * table:
        [lastupdate]
         * number: 0
        [name]
         * string: Pompa Circolazione Mansarda
        [value]
         * bool: false
      [before]
       * table:
        [lastupdate]
         * number: 59
        [name]
         * string: Pompa Circolazione Mansarda
        [value]
         * bool: false
    [firstTimestamp]
     * number: 1540829612
    [valvesInSummer]
     * table:
      [1]
       * table:
        [value]
         * bool: true
        [firstTimestamp]
         * number: 1540829612
        [name]
         * string: T7 FB Heating floor attic valve
        [opened]
         * bool: true
    [opened]
     * bool: true
[sleepDescription]
 * string: Calculated 60s
[season]
 * bool: true
[/size]


[size=undefined]
Circolazione mansarda 29.10.2018 17:14:33
* table:
[zones]
 * table:
  [1]
   * table:
    [info]
     * string: Turn off pump because valve isn't yet fully opened. Next calculation after 60s. Variable nextCalculationAfter was changed to 60.
    [settings]
     * table:
      [pumpGA]
       * string: 2/0/2
      [summerTag]
       * string: summer_pump
      [pumpBeforeCmd]
       * bool: false
      [winterTag]
       * string: winter_pump
      [minInterval]
       * number: 30
      [openingValveTime]
       * number: 60
    [pumpState]
     * table:
      [after]
       * table:
        [lastupdate]
         * number: 0
        [name]
         * string: Pompa Circolazione Mansarda
        [value]
         * bool: false
      [before]
       * table:
        [lastupdate]
         * number: 60
        [name]
         * string: Pompa Circolazione Mansarda
        [value]
         * bool: false
    [firstTimestamp]
     * number: 1540829672
    [valvesInSummer]
     * table:
      [1]
       * table:
        [value]
         * bool: true
        [firstTimestamp]
         * number: 1540829672
        [name]
         * string: T7 FB Heating floor attic valve
        [opened]
         * bool: true
    [opened]
     * bool: true
[sleepDescription]
 * string: Calculated 60s
[season]
 * bool: true[/size]
Reply


Messages In This Thread
RE: Resident script pump circulation - by Domoticatorino - 29.10.2018, 16:37

Forum Jump: