Vai al contenuto
News Ticker
  • Zwave-Community.it diventa DOMOTICA Easy!!
  • Il portale dedicato alla DOMOTICA WIRELESS
  • Forum - Guide - Recensioni

REGISTRATI PER VISUALIZZARE TUTTI I CONTENUTI DEL NOSTRO PORTALE!

ATTENZIONE: Alcuni contenuti del sito sono visualizzabili sono dagli utenti registrati. 

REGISTRATI ADESSO alla nostra comunità e dai anche il tuo supporto per ottenere di più!

Roberto

Scena per accensione e spegnimento programmati in LUA

Recommended Posts

Ciao,

Avrei bisogno di una scena cche a un orario fisso tutti i giorni mi accenda un dispositivo è tutti i giorni a un altro orario me lo spenga, co i blocchi devo creare due scene, e se lè trasformò in lua e prova ad unirle non mi funzionano, qualcuno mi può  aiutare ? Grazie

Share this post


Link to post
Share on other sites

beh visto che è proprio un automatismo secco potresti farlo con un Virtual Device.

Se mi dai un minuto ti posto due righe di codice...


Crea un VD.

 

nel main loop in basso ci scrivi questo codice (che viene eseguito ogni secondo)

 

local currentTime = os.date("%H:%M");

 

if currentTime == "orario di start" then

 

Accendi quello che ti pare

 

end

if currentTime == "orario di stop" then

 

Spegni quello che ti pare

 

end

 

 

Gli orari li metti secondo il formato HH:MM (07:45) tanto per intenderci.

 

Nel caso in cui volessi necessariamente delle scene per avere la possibilità di eseguirle o stopparle manualmente, al posto di accendere o spegnere quello che ti pare, ci scrivi

 

fibaro:startScene(IDScena) [Per farla partire]

oppure

fibaro:killScenes(IDScena) [Per fermarla]

 

 

Se c'è qualcosa di poco chiaro (sono una pippa a spiegarmi a volte) chiedi pure!

Share this post


Link to post
Share on other sites

La scena sottostante fa partire una scena solo alle 06.45:

 

 

Please login or register to see this code.

 

@"darpet" quando inserisci codici c'è l'opzione nell'editor di testo del forum (l'icona con <>) 

Please login or register to see this image.

/emoticons/wink.png" alt=";)" data-emoticon="" srcset="http://www.zwave-community.it/uploads/emoticons/wink@2x.png 2x" width="20" height="20" />

Share this post


Link to post
Share on other sites

Grazie ad entrambi per le risposte, stasera proverò, mi rimane però il dubbio su come funziona la funzione trigger  e come dovrei modificare

le scene create dalla macchina per unirle , mi spiego meglio con l'esempio sotto:

 

--[[

%% autostart

%% properties

%% events

%% globals

--]]

 

local sourceTrigger = fibaro:getSourceTrigger();

function tempFunc()

local currentDate = os.date("*t");

local startSource = fibaro:getSourceTrigger();

if (

 ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "08:10") )

)

then

fibaro:call(51, "turnOn");

end

 

setTimeout(tempFunc, 60*1000)

end

if (sourceTrigger["type"] == "autostart") then

tempFunc()

else

 

local currentDate = os.date("*t");

local startSource = fibaro:getSourceTrigger();

if (

startSource["type"] == "other"

)

then

fibaro:call(51, "turnOn");

end

 

end

 

 

local sourceTrigger = fibaro:getSourceTrigger();

function tempFunc()

local currentDate = os.date("*t");

local startSource = fibaro:getSourceTrigger();

if (

 ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "20:00") )

)

then

fibaro:call(51, "turnOff");

end

 

setTimeout(tempFunc, 60*1000)

end

if (sourceTrigger["type"] == "autostart") then

tempFunc()

else

 

local currentDate = os.date("*t");

local startSource = fibaro:getSourceTrigger();

if (

startSource["type"] == "other"

)

then

fibaro:call(51, "turnOff");

end

 

end

 

cosi non funziona, come dovrei modificarla per farla funzionare ?

Grazie in anticipo

Share this post


Link to post
Share on other sites

Ma questo codice ti salta fuori quando trasformi le scene da blocchi a Lua??

Non sono un super esperto ma non tornato parecchie cose...

Tanto per cominciare vengono create piu variabile con lo stesso valore della sorgente del trigger.

Segui quanto scritto da @"darpet" e semplifica il tutto.

La cosa migliore sarebbe usare GEA...

Share this post


Link to post
Share on other sites

Ciao Roberto,

 

oltre a quello scritto da Kead, non vedo nel tuo codice (nelle prime righe in alto, quelle che cominciano per %%) nessuna variabile o nessun dispositivo che dovrebbe triggare la scena...

in questo modo con il codice che hai scritto, la tua scena verrà triggata e quindi eseguita solo se "qualcos'altro" nel sistema imposta la variabile sourceTrigger["type"] a other oppure ad autostart.

 

Prova a seguire il mio consiglio precedente e crea un VD con il codice che ti ho suggerito, guardane il funzionamento. Se ti soddisfa OK, altrimenti parliamone e aggiustiamo il tiro.

Please login or register to see this image.

/emoticons/smile.png" alt=":)" data-emoticon="" srcset="http://www.zwave-community.it/uploads/emoticons/smile@2x.png 2x" width="20" height="20" />

 

Good Luck.

D.

Share this post


Link to post
Share on other sites

Ciao Roberto,

 

oltre a quello scritto da Kead, non vedo nel tuo codice (nelle prime righe in alto, quelle che cominciano per %%) nessuna variabile o nessun dispositivo che dovrebbe triggare la scena...

in questo modo con il codice che hai scritto, la tua scena verrà triggata e quindi eseguita solo se "qualcos'altro" nel sistema imposta la variabile sourceTrigger["type"] a other oppure ad autostart.

 

Prova a seguire il mio consiglio precedente e crea un VD con il codice che ti ho suggerito, guardane il funzionamento. Se ti soddisfa OK, altrimenti parliamone e aggiustiamo il tiro.

Please login or register to see this image.

/emoticons/smile.png" alt=":)" data-emoticon="" srcset="http://www.zwave-community.it/uploads/emoticons/smile@2x.png 2x" width="20" height="20" />

 

Good Luck.

D.

 

Grazie 

 proverò come consigliato , oltre che per creare una unica scena per gestire lo spegnimento e accensione di un'acquario era anche un esercizio per capire qualcosa di più su LUA , e avevo per questo creato prima le scene a blocchi e poi convertite in lua e unite in una unica scena ma cosi non funziona e mi domandavo perchè


Ma questo codice ti salta fuori quando trasformi le scene da blocchi a Lua??

Non sono un super esperto ma non tornato parecchie cose...

Tanto per cominciare vengono create piu variabile con lo stesso valore della sorgente del trigger.

Segui quanto scritto da @"darpet" e semplifica il tutto.

La cosa migliore sarebbe usare GEA...

 

grazie mille per l'aiuto,

 come scritto più sotto a "darpet" le scene la avevo create in blocchi e convertita in LUA  e unite in una unica scena , non solo per l'uso che mi serviva ma anche per comprendere qualcosa in più di LUA

Share this post


Link to post
Share on other sites

Quello che hai fatto è il modo ottimale per capire la logica del linguaggio Lua (te lo dice uno che un anno fa non sapeva nulla in merito.. e non ho mai fatto programmazione).

Quindi ti assicuro che basta un po di curiosità e voglia di capire per arrivare ai risultati.

Ti consiglio ancora una volta di guardare a GEA (ho aperto un apposito Tread a riguardo e presto metterò delle guide in Italiano). Con Gea risolvi la gran parte delle tue esigenze di programmazione in modo semplicissimo...

Share this post


Link to post
Share on other sites

Ho finalmente trovato la soluzione, stanco di dover impostare più scene a blocchi  una per accendere e una per spegnere,

ora posso accendere e spegnere a orari diversi con una unica scena vari dispositivi o inviare comandi a determinati orari,

ecco il codice:

 

--[[

%% autostart

%% properties

%% globals

--]]

 

-- check script instance count in memory

if (fibaro:countScenes() > 1) then

fibaro:debug("Script already running.");

fibaro:abort();

end

 

fibaro:debug(os.date() .. " - Script start");

 

function tempFunc()

 

local currentDate = os.date("*t");

 

if ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and (string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "09:30") )then

 

fibaro:call(201, "turnOn");

fibaro:debug("ON");

 

-- qui posso inserire altre if con tempi diversi e dispositivi diversi....

 

end

if ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and (string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "21:30") )then

 

fibaro:call(201, "turnOff");

fibaro:debug("OFF");

 

-- qui posso inserire altre if con tempi diversi e dispositivi diversi....

 

end

setTimeout(tempFunc, 60*1000);

 

end

 

se l'ora e il giorno della settimana sono quelli indicati nei cicli IF mi esegue l'azione in questo accende alle 9.30 (prima if) o spegne alle 21,30 (seconda if) tutti i giorni il dispositivo con ID 201

da qui si può partire per tantissimi altri usi.

sperando possa essere utile vi saluto

Share this post


Link to post
Share on other sites

Ciao a tutti ,

ho creato una scena con i blocchi (semplicissima) ma non funziona e cosi' l'ho convertita in LUA ma per me diventa illeggibile cosi' mi sono rifatto ai vostri consigli e ho creato un VD e fatto un piccolo programma .. spero funzioni .

Ma che differenza c'e' tra creare un VD e fare una scena in LUA ?

 

Grazie.

Please login or register to see this code.

 

Share this post


Link to post
Share on other sites

La differenza principale tra scena e vd è il linguaggio che viene usato, in uno devi usare dei comandi che nell'altro non funzionano.
Lo hai provato quello che hai fatto? Funziona?

Inviato dal mio Nexus 6P utilizzando Tapatalk

Share this post


Link to post
Share on other sites
8 ore fa, Nexus_77 ha scritto:

La differenza principale tra scena e vd è il linguaggio che viene usato, in uno devi usare dei comandi che nell'altro non funzionano.
Lo hai provato quello che hai fatto? Funziona?

Inviato dal mio Nexus 6P utilizzando Tapatalk
 

 

Ciao .. si provato e sembra funzionare , mi e' arrivata notifica solo che me ne sono arrivate un po' di notifiche , perche' il programma viene ripetuto un po' di volte .

Dovrei o mettere una variabile che viene impostata a 1 dopo il primo ciclo o dovrei mettere una pausa di 1 min .

cosa mi consigliate e come faccio a fare una pausa ?

Share this post


Link to post
Share on other sites

Nelle scene, piuttosto che la pausa (fibaro:sleep(1000) equivale ad una pausa di un secondo) ti consiglio di usare una variabile io ho provato a mettere degli sleep ma l'esecuzione della scena continua oppure se la scena è già in esecuzione ed è sullo sleep e viene triggata nuovamente ecco che ricomincia e ricevi comunque un'altra notifica.

Share this post


Link to post
Share on other sites

Crea un account o accedi per lasciare un commento

Devi essere un utente registrato per poter lasciare un commento

Crea un account

Iscriviti per un nuovo account nella nostra comunità. È facile!

Registra un nuovo account

Accedi Subito

Sei già registrato? Accedi da qui.

Accedi Adesso

×