switch do counter
 
Powiadomienia
Wyczyść wszystko

Pytanie switch do counter

3 Wpisów
2 Użytkownicy
1 Likes
945 Wyświetleń
Mariusz
(@mariusz-2)
Wpisów: 228
Weteran Donator 2K23
Autor tematu
 

Witam!

Choć wiele zdążyłem się nauczyć przeglądając forum i implementując u siebie publikowane tutaj rozwiązania, to szukając rozwiązania czy podpowiedzi nie znajduję działającego rozwiązania na obecny "problem". Chciałbym mianowicie wiedzieć ile czasu(minut) utworzony (Dummy switch) "Pompa" był w stanie "On" dzisiaj a ile wczoraj (próbowałem z licznikiem przyrostowym). Niestety poległem i proszę o pomoc jak można to zrealizować.

 
Dodane : 07/04/2022 6:36 pm
isom
 isom
(@isom)
Wpisów: 5084
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@mariusz-2 Jestem więcej niż pewny, że temat był przerabiany na tym forum ale ok , nie wiem na jakim etapie wiedzy jesteś więc zaproponuję prosty skrypt dzVents , oczywiście trzeba sobie dostosować nazwy do swoich urządzeń , albo urządzenia do skryptu :))

W domoticz dodajesz zwykły licznik i edytujesz na surowe dane COUNT ( domyślnie jest energia )

Wchodzisz w zdarzenia , dodaj , dzVents , minimal , kasujesz zawartość przykłądu, wklejasz skrypt i zapisujesz . 

return {

on = { timer = {'every minute'} 
    },
 logging =   
    {
        level = domoticz.LOG_DEBUG, 
        marker = 'Czas pracy ',
    },    
execute = function(dz, _ )
local switch = dz.devices('Switch') -- nazwa przełącznika 
local licznik = dz.devices('Licznik').counter -- nazwa licznika 

if switch.state == "On" then
licznik = licznik + 1
dz.devices('Licznik').updateCounter(licznik)
  end
end 
}
 
Dodane : 07/04/2022 9:35 pm
Mariusz reacted
Mariusz
(@mariusz-2)
Wpisów: 228
Weteran Donator 2K23
Autor tematu
 

@isom Dziękuję za szybką odpowiedź.  Poniżej to co mam.

local frequency = 5
local mySwitch = 'Tasmota241pompacyrkulacji'
local timeKeeper = 'Pompa_cyrkulacji'
local myTimeUnit = 'minute'

 

return
{
on =
{
timer = {'every '.. frequency .. ' minutes'},
devices = { mySwitch },
},

logging =
{
level = domoticz.LOG_ERROR,
marker = "getUptime" },

data =
{
state = { initial = "-" },
secondsOn = { initial = 0 },
base = { initial = 0 },
},

execute = function(dz, item)

local mySwitch = dz.devices(mySwitch)
local timeKeeper = dz.devices(timeKeeper)
local timeUnits = {
minute = 60,
hour = 3600,
second = 1,
}

local function updateCounter()
dz.data.secondsOn = dz.data.secondsOn + ( dz.time.dDate - dz.data.base )
if timeKeeper.count ~= dz.data.secondsOn / timeUnits[myTimeUnit] then
timeKeeper.updateCounter(dz.utils.round(dz.data.secondsOn / timeUnits[myTimeUnit]) )
end
end

if item.isTimer and mySwitch.active and dz.data.base ~= 0 then
updateCounter()
dz.data.base = dz.time.dDate
dz.data.state = mySwitch.state
elseif item.isDevice and mySwitch.active and dz.data.state ~= 'On' then
dz.data.base = dz.time.dDate
dz.data.state = 'On'
elseif item.isDevice and dz.data.state == 'On' then
updateCounter()
dz.data.state = 'Off'
elseif item.isTimer and dz.data.base == 0 then
dz.data.base = dz.time.dDate
dz.data.state = mySwitch.state
end

dz.log("State ==>> " .. mySwitch.state .. "; Date Time ==>> " .. dz.time.rawDate .." " ..
dz.time.rawTime .. "; " .. myTimeUnit .. "s On today ===>> " .. timeKeeper.counterToday ,dz.LOG_DEBUG)

end
}

 

Edit: Spróbowałem obu skryptów, po dobie liczniki się rozjechały (co prawda niewiele, ale ilość załączeń była ograniczona). Któremu wierzyć bardziej ?

IMG 20220408 201002
 
Dodane : 07/04/2022 9:51 pm
Udostępnij: