Page 1 of 1

Tips: Sekvensstyrning

Posted: Fri Mar 17, 2023 9:45 am
by hekj
Valmor wrote:Jag undrar om det redan finns möjlighet att på något sätt sekvens-styra flera händelser efter varandra. Går det? Jag har sett att man kan lägga till lite för att en släck-händelse inte ska inträffa innan tändhändelsen med "Cmd Group", men det är inte så jag menar.
Jag tänker mig att ett normalt förlopp är att man släcker de lampor man passerar när man går och lägger sig. Jag skulle vilja kunna emulera det på ett trovärdigt sätt. Eftersom man inte går och lägger sig på precis samma tid så krävs en viss slumpning av tid, men då slumpas alla tider på de olika lamporna varpå vissa lyser långt efter att de andra slocknat. Jag skulle vilja ha en funktion där man kan välja i vilken ordning lampor ska släckas och ställa in en viss slumpad tid innan nästa släcks, och att man kan ange vilka som ev kan byta plats i sekvensen.
T.ex. Device 1 = A, Device 2 = B, Device 3 = B, Device 4 = C där då Device 2 och 3 får slumpen avgöra vilken som släck först, men båda slocknar innan Device 4 släcks.
Denna funktionen skulle sedan kunna slumpas ut olika starttider på olika kvällar.

Om denna funktionen redan finns, hur gör man?
Lägg in följande i bsh filen för den device du vill ska trigga igång sekvensen,
exempelvis 31.bsh

Code: Select all

device = "31";
if (deviceIsOn(device)) {
   sequence = "go_to_sleep_1";
   if (!timerIsRunning(sequence)) {
      startTimer(sequence, 0);  // no delay
   }
   deviceOff(device);
}
Samt skapa filerna som ska styra sekvensen (ändra "Device 1", "Device 2" osv till dina egna device namn).

go_to_sleep_1.bsh

Code: Select all

sequence_without_number = "go_to_sleep_";
sequence = sequence_without_number + "1";
int step = 1;
previous_step = getData(sequence + ":step");
if (previous_step != null) {
   step += Integer.parseInt(previous_step);
}
echo("step:" + step);
switch(step) {
case 1:
   deviceOff("Device 1");  // use device Name or Id here
   startTimer(sequence, randomValue(15, 20));  // min/max seconds delay before next step in sequence
   break;
case 2:
   startTimer(sequence_without_number + randomValue(2, 3), 0);  // execute "sequence_2" or "sequence_3" with no delay
default:
   step = 0;
}
setData(sequence + ":step", step);
go_to_sleep_2.bsh

Code: Select all

sequence = "go_to_sleep_2";
int step = 1;
previous_step = getData(sequence + ":step");
if (previous_step != null) {
   step += Integer.parseInt(previous_step);
}
echo("step:" + step);
switch(step) {
case 1:
   deviceOff("Device 2");  // use device Name or Id here
   startTimer(sequence, randomValue(2, 4));  // min/max seconds delay before next step in sequence
   break;
case 2:
   deviceOff("Device 3");
   startTimer(sequence, randomValue(5, 10));
   break;
case 3:
   startTimer("sequence_4", 0);  // no delay
default:
   step = 0;
}
setData(sequence + ":step", step);
go_to_sleep_3.bsh

Code: Select all

sequence = "go_to_sleep_3";
int step = 1;
previous_step = getData(sequence + ":step");
if (previous_step != null) {
   step += Integer.parseInt(previous_step);
}
echo("step:" + step);
switch(step) {
case 1:
   deviceOff("Device 3");  // use device Name or Id here
   startTimer(sequence, randomValue(2, 4));  // min/max seconds delay before next step in sequence
   break;
case 2:
   deviceOff("Device 2");
   startTimer(sequence, randomValue(5, 10));
   break;
case 3:
   startTimer("sequence_4", 0);  // no delay
default:
   step = 0;
}
setData(sequence + ":step", step);
go_to_sleep_4.bsh

Code: Select all

sequence = "go_to_sleep_4";
int step = 1;
previous_step = getData(sequence + ":step");
if (previous_step != null) {
   step += Integer.parseInt(previous_step);
}
echo("step:" + step);
switch(step) {
case 1:
   deviceOff("Device 4");  // use device Name or Id here
default:
   step = 0;
}
setData(sequence + ":step", step);

Re: Tips: Sekvensstyrning

Posted: Fri Mar 17, 2023 9:45 am
by Snoopy
Jag testade dessa script och fick felmeddelandet:
012-03-10 18:13:08 There was an error in evaluating the script - Sourced file: go_to_sleep_1.bsh : Command not found: getData( java.lang.String ) : at Line: 4 : in file: go_to_sleep_1.bsh : getData ( sequence + ":step" )
Jag är ingen större demon på script så jag hoppas på en ledtråd här.

Re: Tips: Sekvensstyrning

Posted: Fri Mar 17, 2023 9:45 am
by hekj
Snoopy wrote:Jag testade dessa script och fick felmeddelandet:
012-03-10 18:13:08 There was an error in evaluating the script - Sourced file: go_to_sleep_1.bsh : Command not found: getData( java.lang.String ) : at Line: 4 : in file: go_to_sleep_1.bsh : getData ( sequence + ":step" )
Jag är ingen större demon på script så jag hoppas på en ledtråd här.
Det är mycket möjligt att man måste använda förhandsutgåvan av NexaHome (2.5.4), vilken version kör du?

Re: Tips: Sekvensstyrning

Posted: Fri Mar 17, 2023 9:45 am
by Snoopy
Jag använder 2.3.0 i linux, men som jag skrev på annan plats så fungerar inte 2.5.4
när jag testade. JNA not activated fick jag som svar. Har nog missat något där.
Jag har installerat libjna-java i debian. vad mer behövs?

Re: Tips: Sekvensstyrning

Posted: Fri Mar 17, 2023 9:45 am
by hekj
Snoopy wrote:Jag använder 2.3.0 i linux, men som jag skrev på annan plats så fungerar inte 2.5.4
när jag testade. JNA not activated fick jag som svar. Har nog missat något där.
Jag har installerat libjna-java i debian. vad mer behövs?
NexaHome nyttjar inte något externt jna-bibliotek, allt som behövs ska finnas med i jar-filen, jag testade 2.5.6 med Ubuntu 11.04 utan att få några felmeddelanden.