Öka/minska dimmernivå med extra fjärrkontroll

Moderators: hekj, Telldus

Post Reply
orjan
Posts: 7
Joined: Fri Mar 17, 2023 9:45 am

Öka/minska dimmernivå med extra fjärrkontroll

Post by orjan »

Började med att koppla in en Nexa dimmermottagare WMR-252 bakom strömbrytare för att kunna tända/släcka via NexaHome. Med denna koppling så vet man inte om lampan redan är tänd med strömbrytare. Valde att ersätta Eljo brytare med en Nexa väggsändare WT-1 (Eljo variant) för att få en bättre funktion.

Jag var inte nöjd med att få senast använda ljusstyrka då lampan tändes med väggsändare samt sättet att förändra dimmernivå.

Ville ha en funktion som såg till att ljusstyrkan var fördefinierad då man tänder med väggsändare. Dimring skulle ske mellan fasta lägen. Men, inte vara beroende av att NexaHome är i drift för att kunna tända/släcka belysning.

Funktion med nedanstående bsh filer
- Väggsändare tänder med fördefinierad nivå (kan inte förändra nivå, "on" återställer nivå).
- Dimring (max, grund och min) med hjälp av extra fjärrkontroll.
- Extra fjärrkontroll kan nyttjas för att tända (med fördefinierad nivå)/släcka.
- NexaHome kan tända med valfri nivå.

Har valt att sätta dimmermottagarens "Repeat" till noll för att få en bättre response då man ökar eller minskar dimmernivå med extra fjärrkontroll. Kan nu ha värde noll pga en bättre antenn (GP433).

Edit: 2014-12-31 Funktion direkt efter uppstart av NexaHome var inte optimal. Ny version av 23.bsh!

11.bsh

Code: Select all

device_1 = "11"; //dimmermottagare som styrs direkt av väggsändare
device_2 = "23"; //extra fjärrkontroll
level = getDeviceLevel(device_1);
setData("device_level_" + device_1, level + "%");
level_grund ="60%"; //grundnivå
//echo("11 - " + getExecutedBy() + " level = " + level);
if (executedByUpdate()) {
   flag = getData("flag_" + device_1);
   if (flag == null || flag.length() == 0) { //väggsändare!
      if (deviceIsOn(device_1)) {
         setData("device_level_" + device_1, level_grund);
         deviceLevel(device_1, level_grund);
      } else {
         setData("device_level_" + device_1, "0%");
      }
   } else {
      setData("flag_" + device_1,  "");
   }
} else if (executedByCmd()){
   setData("flag_" + device_1,  level);
}
23.bsh (revision 2)

Code: Select all

if (executedByUpdate()) {
   //echo(getExecutedBy());
   device_1 = "11"; //dimmermottagare som styrs direkt av väggsändare
   device_2 = "23"; //extra fjärrkontroll
   level_max = 70; //max
   level_grund = 60; //grundnivå
   level_min = 50; //min
   level = getData("device_level_" + device_1);
   if (level != null) {
      level_value = Float.parseFloat(level.substring(0, level.length() - 1));
      String new_level = null;
      if (deviceIsOn(device_2)) {
         //öka
         if (level_value == 0) {new_level = level_grund + "%";} //tänd
         else if (level_value >= level_grund) {new_level = level_max + "%";}
         else if (level_value >= level_min) {new_level = level_grund + "%";}
         else if (level_value < level_min) {new_level = level_min + "%";}
      } else {
         //minska
         if (level_value > level_max) {new_level = level_max + "%";}
         else if (level_value > level_grund) {new_level = level_grund + "%";}
         else if (level_value > level_min ) {new_level = level_min + "%";}
         else if (level_value <= level_min) {new_level="0%";} //släck!
      }
      if (new_level != null) {
         setData("flag_" + device_1,  new_level); 
         setData("device_level_" + device_1,  new_level);
         if (new_level.equals("0%")) {deviceOff(device_1);}
         else {
            deviceLevel(device_1,  new_level);
         }
      }
   } else {
      new_level = level_grund + "%"; //tänd
      setData("flag_" + device_1,  new_level); 
      setData("device_level_" + device_1,  new_level);
      deviceLevel(device_1,  new_level);
   }
}
Post Reply