Pisanie skryptów w ...
 
Powiadomienia
Wyczyść wszystko

UWAGAStrona 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

Kontakt

Domoticz Pisanie skryptów w DzVents

36 Wpisów
2 Użytkownicy
1 Reactions
3,948 Wyświetleń
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

Sorry -wrzuciłem za dużo...

Długo nie odświeża się-jakby był czasowy pomiar

 
Dodane : 29/01/2022 9:32 pm
isom
 isom
(@isom)
Wpisów: 5190
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

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 

 
Dodane : 29/01/2022 9:33 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

Już wiem-ustawiłem odczyt ciepłomierza co 28 min w crontabie

 
Dodane : 29/01/2022 9:34 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

A o co chodzi z tym

dz.log('cop pompy' .. cop.. 'COP ' , dz.LOG_INFO)

 
Dodane : 29/01/2022 9:35 pm
isom
 isom
(@isom)
Wpisów: 5190
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

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)
 
Dodane : 29/01/2022 9:38 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

Dziękuję za pomoc.

PS

Posprzątałem...

 
Dodane : 29/01/2022 10:33 pm
isom reacted
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

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 

 
Dodane : 30/01/2022 11:29 am
isom
 isom
(@isom)
Wpisów: 5190
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

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. 

 

 
Dodane : 30/01/2022 12:16 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

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. 

 
Dodane : 30/01/2022 12:29 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

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 ?

 
Dodane : 30/01/2022 12:32 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

Dodam jeszcze tylko ,że poprzednio zamotały mnie nazwy local...

 
Dodane : 30/01/2022 12:34 pm
isom
 isom
(@isom)
Wpisów: 5190
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

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

 
Dodane : 30/01/2022 12:36 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

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 😉).    

 
Dodane : 30/01/2022 12:57 pm
isom
 isom
(@isom)
Wpisów: 5190
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

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.

 
Dodane : 30/01/2022 2:05 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

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 ?

 
Dodane : 30/01/2022 2:40 pm
(@bobrow)
Wpisów: 387
Weteran
Autor tematu
 

Taki zapis pomógł-z przerwami

local scop = dz.utils.round( (k - 29838) / (p - 28) ,2)

 
Dodane : 30/01/2022 3:01 pm
Strona 2 / 2
Udostępnij: