Kolejna prośba o ws...
 
Powiadomienia
Wyczyść wszystko

Domoticz Kolejna prośba o wsparcie przy skryptach Blockly i DzVents

25 Wpisów
3 Użytkownicy
0 Reactions
2,923 Wyświetleń
isom
 isom
(@isom)
Wpisów: 5170
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@piotras78 w blockly nie użyjesz wartości Rain- suma opadów , możesz natomiast użyć wartość rate - bieżący opad czyli ta wartość z mm/h . 

Żeby użyć wartości suma opadów trzeba ją najpierw pobrać np co godzinę i dopiero na tej podstawie można aktualizować inny przełącznik w domoticz 

Dodatkowo suma opadów mniejsza niż 1 mm nie zostanie wyświetlona w miejscu, które zaznaczyłeś , dopiero przy wartości 1mm i > będzie widoczna ta wartość.

Nie wiem do czego chcesz używać tego parametru i jak działa twój czujnik opadów więc trudno jest coś doradzić - pomóc 

 
Dodane : 14/06/2021 1:06 pm
(@piotras78)
Wpisów: 50
Kontrybutor
 

Czujnik działa z dokładnością do jednej dziesiątej.

Potrzebuje sumę dobowych opadów do sterowania podlewaniem trawnika.

Zrobiłem sobie z forum prognozę opadów na kolejne dni i zamysł jest taki że jezeli w dniu poprzednim spadnie poniżej 0.8 i prognoza na następny dzień jest tez poniżej 0.8 to ma podlać trawnik a jezeli spadło powyżej to ma nie podlewac.

Wartość rate nie jest mi kompletnie potrzebna bo pokazuje tylko chwilowo przy opadach ile spadło na m2

 
Dodane : 14/06/2021 4:01 pm
(@piotras78)
Wpisów: 50
Kontrybutor
 

@isom Czy możesz mi podpowiedzieć jak napisać taką aktualizację innego czujnika o dane z opadów dobowych.

Próbowałem cos takiego ale nie działa:

return {
on = {
['timer'] = {'every 1 minutes'}
},
logging = { level = domoticz.LOG_ERROR, 
marker = "deszcz..24h" },
execute = function(dz)

local temp = dz.devices('Waldbeck Halley - Rain').rain

dz.devices('xxx').updateRain(temp, dz.temp_NOINFO)

end
}

 
Dodane : 16/06/2021 9:20 pm
isom
 isom
(@isom)
Wpisów: 5170
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@piotras78 dane z czujnika są zapisywane w bazie i można je wyciągnąć za pomocą poleceń json 

/json.htm?type=graph&sensor=rain&idx=IDX&range=day
/json.htm?type=graph&sensor=rain&idx=IDX&range=week
/json.htm?type=graph&sensor=rain&idx=IDX&range=month
/json.htm?type=graph&sensor=rain&idx=IDX&range=year

Odpowiednio dla dnia, tygodnia itd

Nie mam podobnego czujnika ani stacji pogodowej , ale w sieci jest dość prosty skrypt , który pobiera dane z wartości range=month i jeśli ta wartość jest mniejsza od ustawionego progu ( minAmount - w skrypcie ) załącza na godzinę przełącznik (waterPump - w skrypcie ).

Dodatkowo jest parametr daysToEvaluate - ustala z ilu dni mają być pobrane dane do porównania z wartością minAmount .

Myślę że to dobra baza żeby zbudować coś co będzie dla ciebie użyteczne , może po prostu zmienić końcówkę skryptu i ustawić włącz jak mniej a wyłącz jak więcej opadu od ustalonego progu .

Zaznaczam że skrypt nie był testowany w moim środowisku bo nie mam na czym i nie potrzebuję

local scriptVar = 'water the plants'

return
{
    on =
    {
        timer =
        {
            'at 04:00', -- change to the time you want to check the amount of rain in the set number of days
        },

        httpResponses =
        {
           scriptVar,
        },
    },

    logging =
    {
        level = domoticz.LOG_DEBUG, -- change to domoticz.LOG_ERROR when script works as expected
        marker = scriptVar,
    },

    execute = function(dz, item)

        local minAmount = 1 -- in mm rain
        local daysToEvaluate = 3 -- in days

        local rainDevice = dz.devices('myRain') -- name enclosed in quotes or number without quotes
        local waterPump = dz.devices('Beregening')

        if item.isDevice or item.isTimer then
            dz.openURL(
            {
                url = dz.settings['Domoticz url'] .. '/json.htm?type=graph&sensor=rain&idx=' .. rainDevice.idx .. '&range=month',
                callback = scriptVar,
            })
            return
        end

        local function getmm(rt)
            local startDate = (dz.time.addMinutes(-1 * daysToEvaluate * 24 * 60)).rawDate
            local mm = 0
            dz.log('startDate: ' .. startDate, dz.LOG_DEBUG)
            for index, record in ipairs(rt) do
                if record.d > startDate then
                    mm = mm + record.mm
                end
            end
            return mm
        end

        if item.ok and item.isJSON then
            local mmRain = getmm(item.json.result, days )
            if mmRain < minAmount then

                waterPump.cancelQueuedCommands()
                waterPump.switchOn()
                waterPump.switchOff().afterSec(3600)
                dz.log('Not enough rain in the last ' .. daysToEvaluate .. ' days (' .. mmRain .. ' mm). Switching waterpump on for 1 hour', dz.LOG_DEBUG)
            else
                dz.log('Enough rain in the last ' .. daysToEvaluate .. ' days (' .. mmRain .. 'mm). No need to turn on waterpump.', dz.LOG_DEBUG)
            end
        else
            dz.log('No valid response from domoticz ',dz.LOG_ERROR)
            dz.log(item,dz.LOG_ERROR)
        end
    end
}
 
Dodane : 17/06/2021 8:58 am
(@piotras78)
Wpisów: 50
Kontrybutor
 

@isom Ok - dzięki. Potestuje i zobaczę co z tego wyjdzie.

W tej chwili mam już ustawione podlewanie zależne od temperatury, nasłonecznienia, wilgotności i prognozowanych opadów - w chwili obecnej jest w fazie testów ale działa całkiem ok

 
Dodane : 17/06/2021 1:03 pm
Strona 2 / 2
Udostępnij: