Asystent AI
switch do counter
 
Powiadomienia
Wyczyść wszystko

Pytanie switch do counter

3 Wpisów
2 Użytkownicy
1 Reactions
1,715 Wyświetleń
Mariusz
(@mariusz-2)
Wpisów: 240
Weteran Donator 2K23
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 
[#2863]

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: 5319
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

@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 zareagował
Mariusz
(@mariusz-2)
Wpisów: 240
Weteran Donator 2K23
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

@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: