Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Eksempler på hendelser: LUA


Evelen

Anbefalte innlegg

Tenker lage en samletråd hvor man kan poste nyttige hendelser som man kan se for seg at andre også kan ha brukt for.

 

Regler jeg ønsker skal følges:

- En hendelse per post, med mindre flere hendelser henger sammen på en logisk måte.

- Dokumenter hendelsen skikkelig slik at folk skjønner hva den gjør og hvordan.
 

Det finnes en tilsvarende tråd for blockly her: http://www.hjemmeautomasjon.no/forums/topic/485-eksempler-p%C3%A5-hendelser-blockly/

  • Like 2
Lenke til kommentar
Del på andre sider

Loggføre effekt hvor gang en effektmåler endrer status

I og med at den normale loggførignsoppløsningen er på 5 minutter er den ikke veldig egnet til å lage logger som kan brukes til å kartlegge hvordan f.eks vaskemaskinen eller andre enheter med ganske variabel effekt oppfører seg, har derfor utformet dette scriptet som skriver wattforbruk hver gang wattforbruket endrer seg:

 

Dette settes opp som LUA/All

local wattmeter = 'Navn på enhet som viser effekt' --Enhet som måler effekt (Watt)

-- forbruk = tonumber(sWatt)
forbruk = tonumber(otherdevices_svalues[wattmeter])

commandArray = {}
if (devicechanged[wattmeter]) then
    print('Enheten "' ..wattmeter.. '" forbruker ' ..forbruk.. 'W for øyeblikket')
end
return commandArray

Loggeksempel:

2016-11-12 00:42:12.151 LUA: Enheten "28 - Vaskemaskin" forbruker 43.9W for øyeblikket
2016-11-12 00:42:15.150 LUA: Enheten "28 - Vaskemaskin" forbruker 38.4W for øyeblikket
2016-11-12 00:42:19.150 LUA: Enheten "28 - Vaskemaskin" forbruker 34W for øyeblikket
2016-11-12 00:42:25.152 LUA: Enheten "28 - Vaskemaskin" forbruker 29.4W for øyeblikket
2016-11-12 00:42:28.150 LUA: Enheten "28 - Vaskemaskin" forbruker 1628.1W for øyeblikket
2016-11-12 00:43:23.149 LUA: Enheten "28 - Vaskemaskin" forbruker 23.4W for øyeblikket

 

  • Like 1
Lenke til kommentar
Del på andre sider

  • 1 år senere...
function timedifference(s)
   year = string.sub(s, 1, 4)
   month = string.sub(s, 6, 7)
   day = string.sub(s, 9, 10)
   hour = string.sub(s, 12, 13)
   minutes = string.sub(s, 15, 16)
   seconds = string.sub(s, 18, 19)
   t1 = os.time()
   t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
   difference = os.difftime (t1, t2)
   return difference
end

function trim1(s)
  return (s:gsub("^%s*(.-)%s*$", "%1"))
end


commandArray = {}
debuglevel = 0
 

local function update(idx, value1, value2)
    local cmd = idx.."|"..value1.."|"..value2
    --local cmd = string.format("%d|0|%f;%f", idx, value1, value2)
    table.insert (commandArray, { ['UpdateDevice'] = cmd } )
end



for i, v in pairs(otherdevices) do
   timeon = 240
   tc = tostring(i)
   --v = i:sub(1,4)
   v = string.sub(i, -5)

   if (v == '(VOS)') then
     if (debuglevel > 0) then print("Timer Device Detected:".. i) end
     tc2 = string.len(i)
     --print("Len:".. tc2)
     vname = trim1(tostring(string.sub(i,1,tc2-5)))
     if (otherdevices[vname] == 'On') then
        if (debuglevel > 0) then print("Timed Device:".. vname) end
        print("Timed Device Detected ON:" ..vname)
        if (debuglevel > 0) then print("Timer Dev Idx:".. otherdevices_idx[i]) end
        if (debuglevel > 0) then print("Timed Dev Idx:".. otherdevices_idx[vname]) end
        if (debuglevel > 0) then print("Current Value:".. otherdevices[i]) end
        newvalue = otherdevices[i] +25
        --newvalue = 1
        if (debuglevel > 0) then print("New Value:".. newvalue) end
        --commandArray['UpdateDevice'] = otherdevices_idx[i]..'|1|'..newvalue
        update (otherdevices_idx[i], 1, newvalue)
     end
   end

   if (v == 'PIR----') then
      difference = timedifference(otherdevices_lastupdate[tc])
      if (difference > timeon and difference < (timeon + 60)) then
         tempdiff = tostring(difference)
         c = i:sub(4)
         tempmessage = c.." Light Off - after at least " .. (timeon+1) .. "secs up - actually - " .. tempdiff .. "seconds"
         print(tempmessage)
         commandArray[c] = 'Off'
      end
   end
end
 
return commandArray

Skulle finne et script som beregnet effekt ved å ta tiden på hvor lenge en bryter var inne med fast ohms last. Som varmtvannstank, varmekabler, varmovner, etc.. Fant da skriptet over. Dette fungerer ved at en lager en dummy kWh teller. Telleren må hete nøyaktig det samme som den bryteren en skal måle. Bare med 3 blokkbokstaver i parentes. Den kan endres her

if (v == '(VOS)') then

Scriptet må settes som Time. Da kjøres det en gang i minuttet. Dummy kWh teller legger til en kWh verdi hvert minutt så lenge bryter en måler ligger inne.

 

For å endre den effekten en legger til dummy devicen. Må en endre på

 newvalue = otherdevices[i] +25

Her måler jeg en varmeovn på 1500W. Verdien 25 finner jeg da på følgende måte:  1500W / 60 = 25

 

 

brikke2.jpg.5d13a1e2dca2a1966db23cbda0f6b3be.jpgbrikke1.jpg.e58d451504723a990bb36e91b36350c5.jpg

Lenke til kommentar
Del på andre sider

  • 1 år senere...

Virtuell termostat.

Måtte lage en script for det da jeg ikke kunne finne noe steder annet en "Smart Virtual Thermostat" som ikke passet for meg.

Setpoint = 'WC 1etg' -- Dummy Setpoint device
Temp = 'WC 1.etg' -- Temperature sensor
Switch = 'Varmeovn WC 1etg' -- Navnet på brytermodul for varmeovnen (ikke bruk symboler som . , - etc og bruk stor forbokstav for hvert ord som 'Varme Stue')
Hysteresis = 0.5 -- Stop / start punktet for setpoint

commandArray = {}
if tonumber(otherdevices_svalues[Temp]) - Hysteresis >= tonumber(otherdevices_svalues[Setpoint]) and otherdevices[Switch] == 'On' then
    commandArray[Switch] = 'Off'
elseif tonumber(otherdevices_svalues[Temp]) + Hysteresis <= tonumber(otherdevices_svalues[Setpoint]) and otherdevices[Switch] == 'Off' then
    commandArray[Switch] = 'On'
end
return commandArray

 

Endret av deve87
  • Like 1
Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.