Minne och återställning

Moderators: hekj, Telldus

Post Reply
maf
Posts: 25
Joined: Fri Mar 17, 2023 9:45 am

Minne och återställning

Post by maf »

Hej

Jag hanterar alla lampor i mitt kök med hjälp av knappar och scheman i NexaHome. De lampor som styrs är t.ex. bänkbelysning, takbelysning, köksbord, fönsterlampor m.m.
Nu har jag införskaffat en IR-detektor som känner av när någon rör sig i köket. Den skickar tänd-signal direkt och släck-signal 10 minuter efter att rörelse slutat. Denna har jag programmerat in som en egen device i NexaHome.

Nu vill jag kunna styra kökslamporna så att de släcks när alla lämnat rummet och tänds igen till föregående inställt värde när någon kommer in i köket igen. När IR indikerar Off skulle jag alltså behöva spara undan alla lampors status, t.ex. bänkbelysning på, takbelysning av, köksbord 40% innan jag skickar släck-kommandon för dem. Sedan när IR indikerar On igen så ska dessa värden läsas tillbaka och respektive On och Level-kommando ska skickas för att återställa allt till som det var innan.

Finns det någon bra lösning på detta?
hekj
Posts: 992
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm
Contact:

Re: Minne och återställning

Post by hekj »

Skapa två bsh filer, den andra filen ska ha samma namn som din IR-detektors device id.

level_cmd.bsh

Code: Select all

bsh_file = "level_cmd";
params = getData(bsh_file + ".params_");
if (params != null) {
   var len = Integer.parseInt(params);
   if (len >= 2) {
      String cmd = getData(bsh_file + ".param1_");
      String device = getData(bsh_file + ".param2_");
      if (cmd.equals("set") && len >= 3) {
         levelNew = getData(bsh_file + ".param3_").toLowerCase();
         percent = levelNew.endsWith("%");
         levelCurrent = getDeviceLevel(device);
         if (percent) {
            levelCurrent = levelCurrent + "%";
         } else {
            if (levelCurrent.equals("100")) {
               levelCurrent = "on";
            } else {
               levelCurrent = "off";
            }
         }
         setData(level_cmd + "." + device + ".level", levelCurrent);
         if (percent) {
            deviceLevel(device, levelNew);
         } else if (levelNew.equals("on")) {
            deviceOn(device);
         } else {
            deviceOff(device);
         }
      } else if (cmd.equals("restore")) {
         levelPrevious = getData(level_cmd + "." + device + ".level");
         if (levelPrevious != null) {
            percent = levelPrevious.endsWith("%");
            if (percent) {
               deviceLevel(device, levelPrevious);
            } else if (levelPrevious.equals("on")) {
               deviceOn(device);
            } else {
               deviceOff(device);
            }
         }
      }
   }
}
8.bsh

Code: Select all

device = "8";
if (deviceIsOn(device)) {

   execFile("level_cmd.bsh");
   execParam("restore");
   execParam("15");  // device id

   execFile("level_cmd.bsh");
   execParam("restore");
   execParam("5");

} else {

   execFile("level_cmd.bsh");
   execParam("set");
   execParam("15");  // device id
   execParam("0%");  // level

   execFile("level_cmd.bsh");
   execParam("set");
   execParam("5");
   execParam("off");

}
Testa om ovanstående funkar.
maf
Posts: 25
Joined: Fri Mar 17, 2023 9:45 am

Re: Minne och återställning

Post by maf »

Jisses! Det fungerar alldeles utmärkt. Tack så hemskt mycket, det där hade jag aldrig fixat själv.
Det blev även en liten donation.
hekj
Posts: 992
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm
Contact:

Re: Minne och återställning

Post by hekj »

Tack, kul att det funkar!
Post Reply