Repeat och extender påverkar även bsh-script

Moderators: hekj, Telldus

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

Repeat och extender påverkar även bsh-script

Post by maf »

Hej

Kör NexaHome_RPi_3.8.2 och försöker använda mig av det här med bsh-script. Mitt problem är att scripten exekveras flera gånger på raken.
Det verkar ha att göra med hur man ställt in "repeat" och "extender". Har jag repeat 1 så kommer släck-kommando skickas två gånger och bsh-scriptet körs också två gånger. Har jag dessutom extender ikryssad kommer bsh-scriptet köras 3 gånger.

Exempel på min balkonglampa som har id 10.
Har skapat 10.bsh som ser ut så här:

Code: Select all

if(deviceIsOn("Balkongen")) {
  echo("BALKONGEN DEBUG ON");
} else {
  echo("BALKONGEN DEBUG OFF");
}
repeat=1
extender=ikryssad

När jag tänder på balkongen genom att klicka på lampan i NexaHome-gränssnittet får jag följande i konsolen:

Code: Select all

2014-09-08 21:16:28 Script executed (10.bsh), result: [[echo, BALKONGEN DEBUG ON]]
2014-09-08 21:16:29 :ON 1(2): Turning on device: 10 Balkongen - ok
2014-09-08 21:16:30 Script executed (10.bsh), result: [[echo, BALKONGEN DEBUG ON]]
2014-09-08 21:16:31 Script executed (10.bsh), result: [[echo, BALKONGEN DEBUG ON]]
2014-09-08 21:16:33 :ON 2(2): Turning on device: 10 Balkongen - ok
Ovan syns att echo-kommandot körts 3 gånger.

Är det något fel som är trasigt? :|

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

Re: Repeat och extender påverkar även bsh-script

Post by hekj »

maf wrote:Kör NexaHome_RPi_3.8.2 och försöker använda mig av det här med bsh-script. Mitt problem är att scripten exekveras flera gånger på raken.
Det verkar ha att göra med hur man ställt in "repeat" och "extender". Har jag repeat 1 så kommer släck-kommando skickas två gånger och bsh-scriptet körs också två gånger. Har jag dessutom extender ikryssad kommer bsh-scriptet köras 3 gånger.
Jag funderar på om det har något med innehållet i Executable fältet (config-fliken), är det min image du använder?
maf
Posts: 25
Joined: Fri Mar 17, 2023 9:45 am

Re: Repeat och extender påverkar även bsh-script

Post by maf »

hekj wrote: Jag funderar på om det har något med innehållet i Executable fältet (config-fliken), är det min image du använder?
Ja, jag laddade ned din image och installerade: 2014-01-07-wheezy-raspbian-tellduscenter211-razberry-nexahome376-swe-v1.7z

Har därefter bootat upp, lagt till Telldus repository och sen kört apt-get update, upgrade m.fl. Laddat ned NexaHome_RPi_3.8.2.jar och uppdaterat start-scriptet så jag borde ligga på absolut senaste versionerna av allt (och det kanske är det som ställer till det?)

NexaHome 3.8.2
TelldusCenter 2.1.2
Vet inte vad mer som kan vara av intresse?

I executable-fältet har jag inte ändrat något (förstår inte vad den innebär). Där står det:
/usr/lib/libtelldus-core.so.2

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

Re: Repeat och extender påverkar även bsh-script

Post by hekj »

maf wrote:Jag laddade ned din image och installerade: 2014-01-07-wheezy-raspbian-tellduscenter211-razberry-nexahome376-swe-v1.7z

Har därefter bootat upp, lagt till Telldus repository och sen kört apt-get update, upgrade m.fl. Laddat ned NexaHome_RPi_3.8.2.jar och uppdaterat start-scriptet så jag borde ligga på absolut senaste versionerna av allt (och det kanske är det som ställer till det?)
Glömde bort att jag har ändrat lite i programkoden när det gäller exekvering av bsh script, är inte helt hundra på att allt fungerar men tanken är i alla fall att man ska kunna ta reda på varför scriptet körs och utföra olika saker.

Lägg in följande i ditt bsh script, scrolla ner för att se hela koden...

Code: Select all

if (executedByCmd()) {
   echo("Executed By Cmd");
} else if (executedByEvent()) {
   echo("Executed By Event");
} else if (executedByTimer()) {
   echo("Executed By Timer");
} else if (executedByUpdate()) {
   echo("Executed By Update");
} else if (executedByBsh()) {
   echo("Executed By Bsh");
} else if (executedByWeb()) {
   echo("Executed By Web");
}
echo(getExecutedBy());
maf
Posts: 25
Joined: Fri Mar 17, 2023 9:45 am

Re: Repeat och extender påverkar även bsh-script

Post by maf »

Ok. Det verkar som att när jag klickar på en knapp i NexaHome-guit så exekveras scriptet först med executedByCmd och därefter executedByUpdate. Trycker jag på en fjärrkontroll exekveras bara executedByUpdate.

Det innebär att jag kan inte har någon möjlighet att skriva kod som bara exekveras om fjärrkontroll används. Använder jag !executedByCmd så kommer min kod ändå köras när updaten kommer.

Vill jag köra koden bara en gång måste jag kolla executedByUpdate, men då kommer min kod inte köras om jag inte har repeat aktiv. Dessutom blir min kod försenad några sekunder.

Vad som skulle behövas är en executedByExternal, som bara exekveras när en extern givare, så som en fjärrkontroll eller IR-sändare, används för ett on eller off-kommando. Då skulle jag kunna välja både om scriptet ska köras 1) via cmd, 2) via fjärr/IR, 3) närsomhelst, men inte vid uppdatering 4) bara vid uppdatering.

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

Re: Repeat och extender påverkar även bsh-script

Post by hekj »

maf wrote:Det innebär att jag kan inte har någon möjlighet att skriva kod som bara exekveras om fjärrkontroll används. Använder jag !executedByCmd så kommer min kod ändå köras när updaten kommer.

Vill jag köra koden bara en gång måste jag kolla executedByUpdate, men då kommer min kod inte köras om jag inte har repeat aktiv. Dessutom blir min kod försenad några sekunder.

Vad som skulle behövas är en executedByExternal, som bara exekveras när en extern givare, så som en fjärrkontroll eller IR-sändare, används för ett on eller off-kommando. Då skulle jag kunna välja både om scriptet ska köras 1) via cmd, 2) via fjärr/IR, 3) närsomhelst, men inte vid uppdatering 4) bara vid uppdatering.
Testa denna kod...

Code: Select all

device = "47";
deltaLimitMillis = 2000;
executedByExternal = false;
if (executedByCmd()) {
   echo("Executed By Cmd");
   setData(device + "_Executed_By_Cmd", "" + System.currentTimeMillis());
} else if (executedByEvent()) {
   echo("Executed By Event");
} else if (executedByTimer()) {
   echo("Executed By Timer");
} else if (executedByUpdate()) {
   echo("Executed By Update");
   millis = getData(device + "_Executed_By_Cmd");
   try {
      delta = System.currentTimeMillis() - Long.parseLong(millis);
      echo("delta = " + delta + " ms");
      if (delta > deltaLimitMillis) {
         executedByExternal = true;
         echo("executedByExternal, delta greater than " + deltaLimitMillis + " ms");
      } else {
         echo("executedByNexaHome, delta less than " + deltaLimitMillis + " ms");
      }
   } catch(NumberFormatException nfe) {
      // error...         
   }
} else if (executedByBsh()) {
   echo("Executed By Bsh");
} else if (executedByWeb()) {
   echo("Executed By Web");
}
echo(getExecutedBy());
Får du inte executedByUpdate då du har Repeat = 0 ?
maf
Posts: 25
Joined: Fri Mar 17, 2023 9:45 am

Re: Repeat och extender påverkar även bsh-script

Post by maf »

Hej

Tack för koden. Tog lite tid att få till ett test men med det fungerar utmärkt, förutom när Extender är ikryssad.
Men det gör inte så mycket. Jag behöver egentligen inte använda extendern för dessa lampor.

För din info blir detta resultatet när Extender är ikryssad och tänder en lampa från GUI:t:

Code: Select all

2014-09-14 21:47:32 Script executed (10.bsh), result: [[echo, Executed By Update], [echo, delta = 204252 ms], [echo, executedByExternal, delta greater than 2000 ms], [echo, U]]
2014-09-14 21:47:33 :ON 1(2): Turning on device: 10 Balkongen - ok
2014-09-14 21:47:33 Script executed (10.bsh), result: [[echo, Executed By Cmd], [echo, C]]
2014-09-14 21:47:35 Script executed (10.bsh), result: [[echo, Executed By Update], [echo, delta = 1572 ms], [echo, executedByNexaHome, delta less than 2000 ms], [echo, U]]
2014-09-14 21:47:36 :ON 2(2): Turning on device: 10 Balkongen - ok
Verkar vara något timer-fel eller att en gammal variabel återanvänds vilket gör att den rapporterar händelsen både som executedByExternal och executedByNexaHome.

Tack så mycket för hjälpen!
//Magnus
Post Reply