NexaHome v3.5.0

Moderators: hekj, Telldus

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

NexaHome v3.5.0

Post by hekj »

Har lagt in stöd för att kunna kontrollera "system output" vid exekvering av kommandofiler.

Om man i ett script använder sig av metoden execFile så kan man i ett annat script ta hand om dess output.

test_ping.bsh

Code: Select all

execFile("test_ping.bat");
//hideOutput();
Dom två inledande "/" tecknen i ovanstående script ska tas bort då man har fått igång allt och inte vill ha onödigt mycket info i Console fönstret.

Följande kommandofil använder jag för att testa om TV:n är på.

test_ping.bat

Code: Select all

ping 192.168.0.218
Scriptet som kontrollerar output ska ha samma filnamn som den exekverade kommandofilen + ".output.bsh"

test_ping.bat.output.bsh

Code: Select all

check_output = "test_ping.bat";
String out = getData(check_output + ".output_");
String err = getData(check_output + ".error_");
if (out != null && out.indexOf("time") != -1) {
  echo("TV is ON");
} else if (err != null && err.length() != 0) {
  echo(err);
} else {
  echo("TV is OFF");
}
alezy
Posts: 1
Joined: Fri Mar 17, 2023 9:45 am

Re: NexaHome v3.5.0

Post by alezy »

Om det inte är för omständigt så skulle jag även vilja ha en brytare som släcker alla rum i hallen.
hekj
Posts: 992
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm
Contact:

Re: NexaHome v3.5.0

Post by hekj »

alezy wrote:Om det inte är för omständigt så skulle jag även vilja ha en brytare som släcker alla rum i hallen.
Skapa en fil med samma id som brytaren i hallen, exempelvis 5.bsh

5.bsh

Code: Select all

device = "5";
if (deviceIsOff(device)) {
  deviceOff("Vardagsrum");
  deviceOff("Kök");
  deviceOff("Sovrum");
}
Leffe
Posts: 96
Joined: Fri Mar 17, 2023 9:45 am

Re: NexaHome v3.5.0

Post by Leffe »

Hej Henrik
Tack för ett fantastiskt program , Trots att jag inte är någon "data knutte" så har jag lyckats få i hop vad jag tycker är bra , lyckats med både bsh och annat .
När jag nu såg ditt "ping test" blev jag jätte glad , jag har lagt ner många timmar på att försöka få detta användbart .

Jag är ute efter funktionen: " belysningen släcks tex kl 23 , men om TV n är på (pinga) så låt belysningen lysa , och denna cykel bör ju upprepas med XX minuters intervall tills tv n stängs av och därefter vänta xx minuter för att sedan släcka.


Hoppas att du eller någon annan här på forumet kan hjälpa mig .

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

Re: NexaHome v3.5.0

Post by hekj »

Leffe wrote:När jag nu såg ditt "ping test" blev jag jätte glad , jag har lagt ner många timmar på att försöka få detta användbart .

Jag är ute efter funktionen: " belysningen släcks tex kl 23 , men om TV n är på (pinga) så låt belysningen lysa , och denna cykel bör ju upprepas med XX minuters intervall tills tv n stängs av och därefter vänta xx minuter för att sedan släcka.
Lägg till en ny device med namnet "TV" i TelldusCenter.

Uppdatera filen test_ping.bat.output.bsh så att device "TV" tänds/släcks, lägg till följande rader.
device_tv = "TV";
deviceOn(device_tv);
deviceOff(device_tv);
test_ping.bat.output.bsh

Code: Select all

check_output = "test_ping.bat";
device_tv = "TV";
String out = getData(check_output + ".output_");
String err = getData(check_output + ".error_");
if (out != null && out.indexOf("time") != -1) {
  echo("TV is ON");
  deviceOn(device_tv);  // update device status
} else if (err != null && err.length() != 0) {
  echo(err);
} else {
  echo("TV is OFF");
  deviceOff(device_tv);  // update device status
}
Kolla vilket id din device som styr belysningen har, skapa en bsh fil som har ett minustecken efter id (filen kommer tack vare minustecknet köras innan eventet utförs).

10-.bsh

Code: Select all

device_tv = "TV";
from = "01:00";  // time greater than or equal
to = "06:00";  // time less than or equal
if (cmdIsOff() && executedByEvent()) {
  if (deviceIsOn(device_tv) && !timeIsBetween(from, to)) {
    cancelEvent();
    echo("Scheduled command for device '" + getCmdDeviceName() + "' is canceled");
  }
}
Lägg till flera events som försöker släcka belysningen, 23:00, 23:30, 00:00, 00:30, 01:00, 01:30, osv. När TVn är avstängd eller om klockan är mycket och du har somnat i soffan så släcks belysningen...
Leffe
Posts: 96
Joined: Fri Mar 17, 2023 9:45 am

Re: NexaHome v3.5.0

Post by Leffe »

Tack för ditt svar Henrik
Men jag får inte till det riktigt

Om jag pingar från root terminalen så får jag ett "normalt svar" om jag kör skriptet "ping test " med samma ip i nexahome så får jag följande svar
2014-01-07 08:59:36 Exec (test_ping.bat)
2014-01-07 08:59:37 Script executed (test_ping.bat.output.bsh), result: [[echo, /tmp/nexahome_cmd_6274057681886856238.sh: 2: /tmp/nexahome_cmd_6274057681886856238.sh: test_ping.bat: not found
]]
Mitt skript 6- ser ut så här :

device_tv = "TV";
from = "00:01"; // time greater than or equal
to = "23:59"; // time less than or equal
if (cmdIsOff() && executedByEvent()) {
if (deviceIsOn(device_tv) && !timeIsBetween(from, to)) {
cancelEvent();
echo("Scheduled command for device '" + getCmdDeviceName() + "' is canceled");
}
}

och ping test så här :
execFile("test_ping.bat");
//hideOutput();

och test_ping.bat.output.bsh så här :

check_output = "test_ping.bat";
device_tv = "TV";
String out = getData(check_output + ".output_");
String err = getData(check_output + ".error_");
if (out != null && out.indexOf("time") != -1) {
echo("TV is ON");
deviceOn(device_tv); // update device status
} else if (err != null && err.length() != 0) {
echo(err);
} else {
echo("TV is OFF");
deviceOff(device_tv); // update device status
}

Vad har jag missat för något ?
Tacsam för all hjälp

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

Re: NexaHome v3.5.0

Post by hekj »

Leffe wrote:Om jag pingar från root terminalen så får jag ett "normalt svar" om jag kör skriptet "ping test " med samma ip i nexahome så får jag följande svar
2014-01-07 08:59:36 Exec (test_ping.bat)
2014-01-07 08:59:37 Script executed (test_ping.bat.output.bsh), result: [[echo, /tmp/nexahome_cmd_6274057681886856238.sh: 2: /tmp/nexahome_cmd_6274057681886856238.sh: test_ping.bat: not found
]]
Det ser ut som att du inte använder windows, ändra ".bat" till ".sh" på alla ställen (både filnamn och i bsh scripts).

Lägg in den fullständiga sökvägen till kommandofilen, exempelvis

Code: Select all

/home/pi/nexahome/test_ping.sh
Ändra även på raderna med klockslag i 6-.bsh filen så att dom ser ut som jag föreslog.

Code: Select all

from = "01:00";  // time greater than or equal
to = "06:00";  // time less than or equal
Eventuellt så måste du också justera koden som kontrollerar pingresultatet (test_ping.sh.output.bsh).

Code: Select all

if (out != null && out.indexOf("time") != -1) {
-->

Code: Select all

if (out != null && (out.indexOf("time=") != -1 || out.indexOf("time<") != -1)) {
När det gäller själva ping kommandot så behöver man i linux kanske lägga på en parameter som talar om hur många ping som ska gå iväg.
ping -c 3 <ipadressen>
Leffe
Posts: 96
Joined: Fri Mar 17, 2023 9:45 am

Re: NexaHome v3.5.0

Post by Leffe »

Hej igen
Ja det var ju lite dumt av mig att inte tala om att jag kör NH på Rpi
Men nu har jag gort de förändringar du föreslog , men nu hänger sig test_ping.sh.output.bsh scriptet

När jag kör det får jag följande err:

2014-01-09 14:44:50 There was an error in evaluating the script (test_ping.sh.output.bsh): Parse error at line 6, column 19. Encountered: ;
2014-01-09 14:44:50 echo("TV is ON");

om jag sätter // på den raden så får jag :
2014-01-09 14:38:31 There was an error in evaluating the script (test_ping.sh.output.bsh): Parse error at line 8, column 3. Encountered: else
2014-01-09 14:38:31 } else if (err != null && err.length() != 0) {

Scriptet ser ut så här :

check_output = "/home/pi/nexahome/test_ping.sh";
device_tv = "TV";
String out = getData(check_output + ".output_");
String err = getData(check_output + ".error_");
if (out != (null && (out.indexOf("time=") != -1 || out.indexOf("time<") !=-1)) {
echo("TV is ON");
deviceOn(device_tv); // update device status
} else if (err != null && err.length() != 0) {
echo(err);
} else {
echo("TV is OFF");
deviceOff(device_tv); // update device status
}

Någon statusförändring på "device TV" sker inte

Har du möjlighet att se vad som är galet tror du ?

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

Re: NexaHome v3.5.0

Post by hekj »

Leffe wrote:2014-01-09 14:44:50 There was an error in evaluating the script (test_ping.sh.output.bsh): Parse error at line 6, column 19. Encountered: ;
2014-01-09 14:44:50 echo("TV is ON");

Scriptet ser ut så här :

Code: Select all

check_output = "/home/pi/nexahome/test_ping.sh";
device_tv = "TV";
String out = getData(check_output + ".output_");
String err = getData(check_output + ".error_");
if (out != (null && (out.indexOf("time=") != -1   || out.indexOf("time<") !=-1)) {
  echo("TV is ON");
  deviceOn(device_tv);  // update device status
} else if (err != null && err.length() != 0) { 
  echo(err);
} else {
  echo("TV is OFF");
  deviceOff(device_tv);  // update device status
}
Det är raden ovanför "echo("TV is ON");" som är felaktig, du har fått in en vänsterparantes framför null.

Code: Select all

if (out != (null && (out.indexOf("time=") != -1 || out.indexOf("time<") !=-1)) {
-->

Code: Select all

if (out != null && (out.indexOf("time=") != -1 || out.indexOf("time<") !=-1)) {
Om du inte redan har flaggat test_ping.sh som exekverbar så kan det vara bra att göra det :-)

Är lite osäker på om du ska ha fullständig sökväg i bsh filen, du kanske bara ska ha det i sh filen (du får testa med och utan).

Code: Select all

check_output = "/home/pi/nexahome/test_ping.sh";

Code: Select all

check_output = "test_ping.sh";
hekj
Posts: 992
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm
Contact:

Re: NexaHome v3.5.0

Post by hekj »

För att få scriptet som kontrollerar om TVn är on/off att köras en gång per minut så ska man.

1) skapa en fil med namnet start.bsh som har följande innehåll:

start.bsh

Code: Select all

startTimer("test_ping", 60);
2) lägga in samma rad i filen test_ping.bsh

test_ping.bsh

Code: Select all

execFile("test_ping.bat");
startTimer("test_ping", 60);
//hideOutput();
urban
Posts: 2
Joined: Fri Mar 17, 2023 9:45 am
Location: Göteborg

Re: NexaHome v3.5.0

Post by urban »

Hej,

Hade samma problem som Leffe men med full sökväg till ping-scriptet med filtyp sh (inte full sökväg i .output.bsh) så funkade det. Behövde inte heller ändra if-satsen.

Suverän funktion (igen) Henrik. Kör nu ett skript (initierat från start.bsh) som kollar om TV:n slås på när det är mörkt ute (styrs av skymningsrelä) och tänder då lite lampor runt TV:n.

Än en gäng - stort tack för ett suveränt program
/urban
Leffe
Posts: 96
Joined: Fri Mar 17, 2023 9:45 am

Re: NexaHome v3.5.0

Post by Leffe »

Japp där satt den !

Nu tror jag att med din stora hjälp Henrik så har jag fått i hop det med TV lösningen , blir generaltest i kväll !

Stort tack så länge.
Leffe :D
Leffe
Posts: 96
Joined: Fri Mar 17, 2023 9:45 am

Re: NexaHome v3.5.0

Post by Leffe »

Hej Igen

Nja jag ropade nog hej lite för tidigt, nu har jag provat lite grand

det fungerar utmärkt med "ping" och device TV följer med tv ns på och av .
men det är nog något med "minus skriptet" som inte fungerar
jag tror att skriptet körs men att det är något if som inte uppfylls riktigt .

( om jag lägger in en extra rad i slutet på skriptet så klagar den på detta i consolen

jag har dubbelkollat mitt skript mot det här ovan (10-)
kan det vara att jag kör Rpi versionen i detta script också

Leffe
Leffe
Posts: 96
Joined: Fri Mar 17, 2023 9:45 am

Re: NexaHome v3.5.0

Post by Leffe »

Igen
Tror att problemet är löst

Reloaded NH 3.5

jag provar lite

Leffe
Leffe
Posts: 96
Joined: Fri Mar 17, 2023 9:45 am

Re: NexaHome v3.5.0

Post by Leffe »

Hej igen

Ja nu har jag problem i gen
Nu funkar det på det viset att ,tv pingas och tänder "TV"(device 5) och lamporna lyser vidare , stängs tv n av så släcks "TV" och lamporna slocknar helt OK
Problemet är att dagen efter när lamporna har ett event att tända så sker inte detta
Tänder jag då manuellt så fungerar det denna kväll men dagen efter "tänder" det inte .

Har du lust och kraft att hjälpa mig med detta är jag mycket tacksam .

Leffe
Post Reply