Tips: Sekvensstyrning

Moderators: hekj, Telldus

Post Reply
hekj
Posts: 992
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm
Contact:

Tips: Sekvensstyrning

Post 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);
Snoopy
Posts: 253
Joined: Fri Mar 17, 2023 9:45 am
Location: Kalmar
Contact:

Re: Tips: Sekvensstyrning

Post 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.
... världen är full av tappade sugar, några är mina....
HA 3.1.1 i en Raspberry Pi 2 + Tellstick Duo
owfs i annan Raspberry B+ + Tellstick och en Tellstick Net som backup
hekj
Posts: 992
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm
Contact:

Re: Tips: Sekvensstyrning

Post 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?
Snoopy
Posts: 253
Joined: Fri Mar 17, 2023 9:45 am
Location: Kalmar
Contact:

Re: Tips: Sekvensstyrning

Post 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?
... världen är full av tappade sugar, några är mina....
HA 3.1.1 i en Raspberry Pi 2 + Tellstick Duo
owfs i annan Raspberry B+ + Tellstick och en Tellstick Net som backup
hekj
Posts: 992
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm
Contact:

Re: Tips: Sekvensstyrning

Post 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.
Post Reply