UWAGA: Strona oraz Forum Smart'ny Dom nie będzie dostępne 23 Grudnia 2024 ze względu na przenoszenie serwisu na mocniejszą maszynę.
W tym czasie polecam poświęcenie swojego czasu na pomoc partnerowi w przygotowaniu udanych Świąt 😉
Za niedogodności z góry przepraszam, admin
Sorry -wrzuciłem za dużo...
Długo nie odświeża się-jakby był czasowy pomiar
Chodzi o to że trzeba czytać ze zrozumieniem . Napisałem co jest wyzwalaczem tego skryptu . Aktualizacja następuje po odczycie z ciepłomierza i aktualizacji jego wskazań
Wyczyść proszę ten swój wpis z podwójnymi logami , a na przyszłość filtruj takie logi , masz na górze po prawej stronie okno , wystarczy wpisać tam nazwę skryptu
Już wiem-ustawiłem odczyt ciepłomierza co 28 min w crontabie
A o co chodzi z tym
dz.log('cop pompy' .. cop.. 'COP ' , dz.LOG_INFO)
To jest info w logach z wartością jaka wyszła z matematyki (cop) a reszta to moja fantazja albo widzimisię .
Równie dobrze możne być
dz.log('Pompa ma sprawnośc' .. cop.. 'Taką ' , dz.LOG_INFO)
Witam,
na bazie podanego skryptu udało mi się (w końcu) zrobić kilka kombinacji (działania matematyczne)-będzie to wzorzec.
Isom-a czy mógłbyś jeszcze na bazie podanego skryptu (tj cop) wrzucić skrypt na timerze (to jest do SCOP miesięczny i roczny) ?
To byłby taki podstawowy komplet do obsługi opomiarowania pompy ciepła-jak byś wrzucił te przykłady na wiki , to nie jednemu by się przydało...
Pzdr
Skrypty , które mogą się przydać większej ilości użytkowników wrzucam bez takich zachęt jak powyżej , skrypty takie jak opomiarowanie jakiegoś urządzenia są specyficzne i wymagają wiedzy o typach i podtypach użytych czujników , skąd mam wiedzieć jakich czujników używają wszyscy użytkownicy pomp ciepła ? Pisać żeby potem każdemu indywidualnie przerabiać pod jego potrzeby to nie moja bajka i zaśmiecanie forum.
Chodzi o customsensors-działań na tym typie za dużo nie ma w sieci.W mojej malinie dane z RTU i ciepłomierza są custom-przyjąłem ,że może być więcej urządzeń tego typu.
Zrobiłem jeszcze proste działanie na obliczenie delty-jak wszystko jest tego samego typu , to bez problemu wychodzi.
Skrypt device (działający)
scop roczny
return {
on = {
devices = {'Energia PC kWh'}
},
logging = {
level = domoticz.LOG_DEBUG, -- zmien na domoticz.LOG_ERROR, gdy skrypt bedzie Ok
marker = "licznik SCOPr"
},
execute = function(dz, device)
local p = tonumber(dz.devices('PC zużycie kWh').state)
local k = tonumber(dz.devices('Energia PC kWh').state)
local w = dz.devices('SCOP roczny')
-- Obliczenia
local scop = dz.utils.round( k / p ,2)
dz.log('scop rok' .. scop.. 'SCOPr ' , dz.LOG_INFO)
w.updateCustomSensor(scop)
end
}
return
{
Przykładowy timer
return
{
on =
{
timer = { 'every minute'}
},
data = {
dane =
{
initial = {},
},
},
logging = {
level = domoticz.LOG_DEBUG, -- zmien na domoticz.LOG_DEBUG, gdy skrypt bedzie Ok
marker = "Licznik wody"
},
execute = function(dz, item)
local factor = 1 -- ustaw wartosc zgodna z twoim licznikiem wartosc 1 to 1 do 1
local przeplyw = dz.devices('Przepływ woda') -- nazwa wirtualnego licznika litry / min
local licznik = dz.devices('Licznik wody') -- obecny licznik w m3
local daneTotal = licznik.counterToday * factor -- aktualizacja "data" z danych dziennych licznika * przelicznik w tym wypadku 1 do 1
if dz.data.dane.total ~= nil then -- pierwszy odczyt nie aktualizuje przepływomierza
przeplyw.cancelQueuedCommands()
local historia = dz.data.dane.lastTime - dz.time.dDate
local aktualprzeplyw = ( daneTotal - dz.data.dane.total ) * 60 / math.max(historia,60) -- litry / min
przeplyw.updateWaterflow(aktualprzeplyw)
przeplyw.updateWaterflow(0).afterMin(10) -- brak nowych danych resetuje licznik po czasie afterMin
end
dz.data.dane.total = daneTotal
dz.data.dane.lastTime = dz.time.dDate
end
}
Próbowałem różnych kombinacji-lepiej tego nie pokazywać. Czy możesz pokazać jak powinien wyglądać odpowiednik pierwszego skryptu na timerze ?
Dodam jeszcze tylko ,że poprzednio zamotały mnie nazwy local...
Jak wychodzi bez problemu to po co ja mam pisać ? Zrozum ty używasz czujników custom , ktoś inny ma typowy czujnik poboru mocy i już ten skrypt nie będzie działał. Ty potem nie pomożesz takiemu koledze w adaptacji , bo nawet nie chcesz zacząć się uczyć, napisałem ten cop w nadziei że zobaczysz jakie to proste i się weźmiesz za naukę , ale widzę że dalej łatwizna.pl
Mogę pomóc dzieląc się swoimi doświadczeniami-raczej nie zostanę Guru Domoticza.
Jestem zwykłym użytkownikiem (lub poniżej pewnej średniej) tego systemu. Zresztą chyba cały sens stworzenia domoticza był taki , aby pół amatorzy mogli sobie z tym poradzić.
To prawda-znacznie łatwiej jest mi układać jakieś sekwencje wg sprawdzonych wzorców. Niestety przy rozkminianiu podstaw "trochę" się rozsypuję...taki mój wątpliwy urok (ale na szczęście mam kilka zalet 😉).
Tak domoticz jest otwartym projektem i każdy może z niego korzystać , jednak nie usprawiedliwia to drogi na skróty. Wszyscy, którzy chcą zrobić coś więcej niż podstawowe możliwości serwera muszą się uczyć , ja też . Dzielę się tym co mi się udało opanować bo taki jest sens bycia na forum , ale nie widzę sensu pisania komuś skryptów na życzenie. Te które wrzucam są na tyle uniwersalne że każdy może z nich skorzystać i wtedy ma to sens.
To trudno-będę pytał o szczegóły (chyba ,że to też jest zabronione ?)...
Chciałem przerobić skrypt SCOPu , aby odjąć wartości od liczników -a następnie to podzielić.
Próbowałem dwa sposoby-bez rezultatu
1.
local scop = dz.utils.round((k-29838) / (p-28) ,2))
2.
local scop = dz.utils.round(k-29838 / p-28 ,2)
W czym jest błąd ?
Taki zapis pomógł-z przerwami
local scop = dz.utils.round( (k - 29838) / (p - 28) ,2)