122 780 läst · 939 svar
123k läst
939 svar
Domoticz och Z-Wave
Det gör jag med.PierLar skrev:
Testade blocky när jag började med Domoticz (i maj 2015) men upptäckte att nästlade IF-satser inte fungerade alls. Tack och lov kom dzVents ungefär samtidigt så det fick bli LUA.
Men då hann jag lära mig att det var gott om buggar i Blocky och sedan har jag inte följt utvecklingen.
//Henry
Just i detta fall bör regeln fungera om du byter "or" mellan lördag och söndag till "and". Men det har varit svårt med nästlade IF-satser i Blocky.L lengmo skrev:
Möjligt att Blocky har blivit bättre men jag rekommenderar starkt LUA och dzVents. Har du inte programmerat förr så är det väl värt besväret att lära sig just detta. Gränserna för vad man kan göra vidgas dramatiskt!
//Henry
Hej,
Nu har dzVents funktion för att hämta http information ex. json vill dela med mig av mitt "Dagens info" skript. Ett dzVents skript som hämtar information om dagen. funkar på domoticz v3.8837 eller högre
Nu har dzVents funktion för att hämta http information ex. json vill dela med mig av mitt "Dagens info" skript. Ett dzVents skript som hämtar information om dagen. funkar på domoticz v3.8837 eller högre
Kod:
--[[
dzVents skript som hämtar information om dagen,
Förberedelser:
Skapa en "dummy" text enhet och ange namnet nedan under "-- inställningar --".
Skapa två användarvariablar med typ "sträng" och ange namnen nedan under " -- inställningar --".
Framework: dcVents 2.4.x (Domoticz v3.8837 eller högre)
]]
return {
active = {
true,
},
on = {
timer = {
'at 6:00',
},
httpResponses = {
'helgdagar'
},
},
execute = function(domoticz, item)
-- inställningar --
local textEnhet = 'Din text enhet'
local varFlagga = 'Flaggdag'
local varArbeta = 'Arbetsfri dag'
-- slut inställningar --
----- skript -----
local period = domoticz.time.year..'/'.. domoticz.time.month
local idag = domoticz.time.day
local namnsdag = ''
local helgdag = ''
local arbetsdag = ''
if (item.isTimer) then
domoticz.openURL({
url = 'https://api.dryg.net/dagar/v2.1/'.. period .. '',
method = 'GET',
callback = 'helgdagar',
})
end
if (item.isHTTPResponse) then
if (item.statusCode == 200) then
if (item.isJSON) then
-- hämtar namsdag
if item.json.dagar[idag].namnsdag[1] ~= nil then
namnsdag ='Namnsdag har ' .. item.json.dagar[idag].namnsdag[1]
end
if item.json.dagar[idag].namnsdag[2] ~= nil then
namnsdag = namnsdag .. ' och ' .. item.json.dagar[idag].namnsdag[2]
end
if item.json.dagar[idag].namnsdag[3] ~= nil then
namnsdag='Namnsdag har ' .. item.json.dagar[idag].namnsdag[1] .. ', ' .. item.json.dagar[idag].namnsdag[2] .. ' och ' .. item.json.dagar[idag].namnsdag[3]
end
-- helgdag?
if item.json.dagar[idag].helgdag ~= nil then
helgdag = 'Det är ' .. item.json.dagar[1].helgdag .. '. '
end
if item.json.dagar[idag]["helgdagsafton"] ~= nil then
helgdag = 'Det är ' .. item.json.dagar[1].helgdagsafton .. '. '
end
-- arbetsfri dag?
if item.json.dagar[idag]["arbetsfri dag"] == 'Nej' then
arbetsdag = 'Vanlig arbetsdag. '
if domoticz.variables(varArbeta).value ~= 'Nej' then
domoticz.variables(varArbeta).set('Nej')
end
else
arbetsdag = ' och en arbetsfri dag. '
if domoticz.variables(varArbeta).value ~= 'Ja' then
domoticz.variables(varArbeta).set('Ja')
end
end
-- flaggdag?
if item.json.dagar[idag].flaggdag == '' then
if domoticz.variables(varFlagga).value ~= 'Nej' then
domoticz.variables(varFlagga).set('Nej')
end
else
if domoticz.variables(varFlagga).value ~= 'Ja - '.. item.json.dagar[idag].flaggdag ..'' then
domoticz.variables(varFlagga).set('Ja - '.. item.json.dagar[idag].flaggdag)
end
end
domoticz.devices(textEnhet).updateText('helgdag .. arbetsdag .. namnsdag)
domoticz.log(helgdag .. arbetsdag .. namnsdag, domoticz.LOG_FORCE)
end
else
domoticz.log('<font color="#CC3300">Det är problem att hantera din begäran</font>', domoticz.LOG_ERROR)
end
end
end
}
Hej
Är det någon som har kunskapen att hjälpa mig med en räknare ?
Jag har funderat ett tag men saknar kunskap hur logiken ska byggas samt programmering
Mitt mål är att räkna varje gång jag eldar i vedspisen
Förutsättningen är att jag har en tempgivare vid vedspisen varje gång temperaturen är högre än 28 grader så ska det skapas uppräkning räknesnurran
Går det att använda DZvents ?
om hur går jag tillväga
Ska jag skapa en Dummy och använda tempgivaren som givare om givare är högre än 28 =räkna +1
Är det någon som har kunskapen att hjälpa mig med en räknare ?
Jag har funderat ett tag men saknar kunskap hur logiken ska byggas samt programmering
Mitt mål är att räkna varje gång jag eldar i vedspisen
Förutsättningen är att jag har en tempgivare vid vedspisen varje gång temperaturen är högre än 28 grader så ska det skapas uppräkning räknesnurran
Går det att använda DZvents ?
om hur går jag tillväga
Ska jag skapa en Dummy och använda tempgivaren som givare om givare är högre än 28 =räkna +1
dzVents går det att fixa t.ex:A Affeunbk skrev:Hej
Är det någon som har kunskapen att hjälpa mig med en räknare ?
Jag har funderat ett tag men saknar kunskap hur logiken ska byggas samt programmering
Mitt mål är att räkna varje gång jag eldar i vedspisen
Förutsättningen är att jag har en tempgivare vid vedspisen varje gång temperaturen är högre än 28 grader så ska det skapas uppräkning räknesnurran
Går det att använda DZvents ?
om hur går jag tillväga
Ska jag skapa en Dummy och använda tempgivaren som givare om givare är högre än 28 =räkna +1
[bild]
Kod:
return {
active = {
true,
},
on = {
devices = {
'Temperatur'
}
},
execute = function(domoticz, device)
local fireCounter = domoticz.devices('Räknare')
domoticz.log(device.name .. ' har ändrats. ' .. device.temperature, domoticz.LOG_FORCE)
if (device.temperature >= 28 and device.temperature <=28.5) then
fireCounter.updateCounter(fireCounter.counter + 1)
domoticz.log('Device ' .. device.name .. ' is between 28 and 28.5 degrees', domoticz.LOG_FORCE)
end
end
}
Jag skulle nog lösa problemet såhär:A Affeunbk skrev:Hej
Är det någon som har kunskapen att hjälpa mig med en räknare ?
Jag har funderat ett tag men saknar kunskap hur logiken ska byggas samt programmering
Mitt mål är att räkna varje gång jag eldar i vedspisen
Förutsättningen är att jag har en tempgivare vid vedspisen varje gång temperaturen är högre än 28 grader så ska det skapas uppräkning räknesnurran
Går det att använda DZvents ?
om hur går jag tillväga
Ska jag skapa en Dummy och använda tempgivaren som givare om givare är högre än 28 =räkna +1
[bild]
Först skulle jag skapa den virtuella räknare som du föreslår:
Sedan skulle jag skapa en "Användarvariabel" som jag skulle kalla "Eldar". Det skulle vara en heltalsvariabel som jag skulle växla mellan 0 och 1. (FALSKT/SANT). Den ska slå om till 1 varje gång temperaturen uppnår minst 30 grader och återgå till 0 när temperaturen åter faller under 30 grader.
Sedan skulle jag räkna omslagen till SANT.
Därav skulle jag skriva denna LUA-kod för dzVents, som gör just det.
Inloggade ser högupplösta bilder
Logga in
Skapa konto
Gratis och tar endast 30 sekunder
OBS! Koden är inte testad och jag har aldrig använt virtuella räknare men den borde funka!
//Henry
Fick se ett fel! på rad 16 ska det vara == istället för =!
Redigerat:
Hej
Nu har jag hunnit kommit igång med era förslag,stort tack för engagemanget
@PierLar
@HenFre
PierLar´s förslag räknar antal gånger temp överstiger ett värde(Antaleldningar)
Däremot får jag inte @HenFre förlag att fungera,kanske att jag knackat fel,bifogar koden
https://www.byggahus.se/forum/members/pierlar.167366/
Nu har jag hunnit kommit igång med era förslag,stort tack för engagemanget
@PierLar
@HenFre
PierLar´s förslag räknar antal gånger temp överstiger ett värde(Antaleldningar)
Däremot får jag inte @HenFre förlag att fungera,kanske att jag knackat fel,bifogar koden
https://www.byggahus.se/forum/members/pierlar.167366/
Kod:
---Eldräknare---
--Beräknar antal gånger temp överstiger värde x
return {
active = true,
on = {
device = {
'Koket'
}
},
execute = funktion(domomicz)
if domoticz.device('Koket').temperature >= 23 then
if domomicz.variables('Èldar').value == 0 then
domomicz.variables('Eldar').set (1)
domomicz.device('Koket').updateCounter(domoticz.device(Èldat`).counter + 1)
end
else
if domomicz.variables('Eldar').value > 0 then
domomicz.variables('Eldar').set(0)
end
end
end
}
Inloggade ser högupplösta bilder
Logga in
Skapa konto
Gratis och tar endast 30 sekunder
Du har inte riktigt följt vad jag skrev.A Affeunbk skrev:Hej
Nu har jag hunnit kommit igång med era förslag,stort tack för engagemanget
@PierLar
@HenFre
PierLar´s förslag räknar antal gånger temp överstiger ett värde(Antaleldningar)
Däremot får jag inte @HenFre förlag att fungera,kanske att jag knackat fel,bifogar koden
[bild]
Kod:---Eldräknare---[/URL][/B][/URL][/B][/URL][/B] [B][URL='[länk] antal gånger temp överstiger värde x return { active = true, on = { device = { 'Koket' } }, execute = funktion(domomicz) if domoticz.device('Koket').temperature >= 23 then if domomicz.variables('Èldar').value == 0 then domomicz.variables('Eldar').set (1) domomicz.device('Koket').updateCounter(domoticz.device(Èldat`).counter + 1) end else if domomicz.variables('Eldar').value > 0 then domomicz.variables('Eldar').set(0) end end end }
[bild]
Du måste se skillnaden på "Eldar" som håller reda på om du eldar nu eller inte eldar nu och på "Eldat" som är en virtuell device som ett räkneverk och som håller reda på hur många gånger du har eldat. Du kan givetvis kalla "Eldat" för "Antaleldningar" men jag tycker ändå att du ska sätta upp den med sorten "Gånger".
"Eldar" ska inte vara en virtuell device. Det ska vara en enkel heltalsvariabel i "Inställningar" -> "Fler inställningar" -> "Användarvariabler". Den är 1 när du håller på och eldar och 0 när du inte eldar.
Sedan är din rad 19 helt avvikande från vad jag skrev. Den raden ska ju räkna upp devicen "Eldat" eller om du vill "Antaleldningar".
//Henry
Som HenFre säger ovan så har du missat några saker. Här kommer fler förslag:A Affeunbk skrev:
Med Variablar:
Kod:
-- Eldningsräknare
return {
active = {
true,
},
on = {
devices = {
'Temperatur'
}
},
execute = function(domoticz, device)
local fireCounter = domoticz.devices('Räknare')
local eldar = domoticz.variables('Eldar')
if (device.temperature >= 28 and eldar.value == 0) then
eldar.set(1)
fireCounter.updateCounter(fireCounter.counter + 1)
else
if (device.temperature < 28 and eldar.value == 1) then
eldar.set(0)
end
end
end
}
Eller med en virtuell enhet på/av knapp:
Kod:
-- Eldningsräknare
return {
active = {
true,
},
on = {
devices = {
'Temperatur'
}
},
execute = function(domoticz, device)
local fireCounter = domoticz.devices('Räknare')
local eldar = domoticz.devices('Eldar')
if (device.temperature >= 28 and eldar.state == 'Off') then
eldar.switchOn()
fireCounter.updateCounter(fireCounter.counter + 1)
else
if (device.temperature < 28 and eldar.state == 'On') then
eldar.switchOff()
end
end
end
}
Redigerat:
Hej
Sommaren slog till och tiden har prioriterats till annat
Jag har ikväll testat att skapa
@HenFre
Som jag tolkar svaret är det samma princip med ditt förslag @PierLar
Användarvariabler
Räknare
Är evigt tacksam att ni bidrar med eran kunskap
Sommaren slog till och tiden har prioriterats till annat
Jag har ikväll testat att skapa
@HenFre
men är högst osäker om jag tänker rätt,är det det rätt väg som jag försöker med heltal och ange 1HenFre skrev:
Som jag tolkar svaret är det samma princip med ditt förslag @PierLar
Användarvariabler
Räknare
Inloggade ser högupplösta bilder
Logga in
Skapa konto
Gratis och tar endast 30 sekunder
Är evigt tacksam att ni bidrar med eran kunskap
A Affeunbk skrev:Hej
Sommaren slog till och tiden har prioriterats till annat
Jag har ikväll testat att skapa
@HenFre
men är högst osäker om jag tänker rätt,är det det rätt väg som jag försöker med heltal och ange 1
Som jag tolkar svaret är det samma princip med ditt förslag @PierLar
Ja, det är en sådan variabel du ska skapa. Men du bör väl initialt sätta den till 0 om du inte råkar elda när du kör igång.
//Henry
Användarvariabler
[bild]
Räknare
[bild]
Är evigt tacksam att ni bidrar med eran kunskap
Nu när jag kom till en dator ser jag att jag råkade skriva svaret inne i citatet! Beklagar men det kan bil fel i mobiltelefonen ibland!A Affeunbk skrev:Hej
Sommaren slog till och tiden har prioriterats till annat
Jag har ikväll testat att skapa
@HenFre
men är högst osäker om jag tänker rätt,är det det rätt väg som jag försöker med heltal och ange 1
Som jag tolkar svaret är det samma princip med ditt förslag @PierLar
Användarvariabler
[bild]
Räknare
[bild]
Är evigt tacksam att ni bidrar med eran kunskap
Såhär är svaret om Du inte såg felet:
Ja, det är en sådan variabel du ska skapa. Men du bör väl initialt sätta den till 0 om du inte råkar elda när du kör igång.
//Henry
Tog mig tid igen till att titta på kopplingen mellan Domoticz och Safeland (tidigare TRYGVE). Vet inte om jag hade huvudet under armen förra gången eller om de har utvecklat dokumentationen men nu hoppade det igång.PierLar skrev:Skicka med https funkar med dzVents också du använder "domoticz.openURL(url)" då får du med trafiken i domoticz logg.
för att skicka t.ex sms med clickatell via https/json:
Kod:domoticz.openURL(https://platform.clickatell.com/messages/http/send?apiKey=xxxxxxxxxxxxxxxx==&to=xxxxxxxxxxx&content=Test+message+text)
Nu kommer alla inbrottslarm från Domoticz generera ett säkerhetslarm i mina grupper på Safeland. Eftersom vi har grannsamverkan i vårt bostadsområde så blir det betydligt mycket snabbare än alla vaktbolag.
Såhär enkelt blev det:
-- --------------------
-- Larma på Safeland --
-- --------------------
-- Skickar larm till Safeland.
return {
active = true,
on = {
devices = {
'Larmutlöst Ljud'
}
},
execute = function(domoticz)
if domoticz.devices('Larmutlöst Ljud').state == "On" then
domoticz.openURL({
url = 'https://api.trygve.se/rest/alarm/<Safelands personliga säkerhetsnyckel>',
method = 'POST'
})
end
end
}