Page 1 of 2
NexaHome v3.5.0
Posted: Fri Mar 17, 2023 9:45 am
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
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");
}
Re: NexaHome v3.5.0
Posted: Fri Mar 17, 2023 9:45 am
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.
Re: NexaHome v3.5.0
Posted: Fri Mar 17, 2023 9:45 am
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");
}
Re: NexaHome v3.5.0
Posted: Fri Mar 17, 2023 9:45 am
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
Re: NexaHome v3.5.0
Posted: Fri Mar 17, 2023 9:45 am
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...
Re: NexaHome v3.5.0
Posted: Fri Mar 17, 2023 9:45 am
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
Re: NexaHome v3.5.0
Posted: Fri Mar 17, 2023 9:45 am
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
Ä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>
Re: NexaHome v3.5.0
Posted: Fri Mar 17, 2023 9:45 am
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
Re: NexaHome v3.5.0
Posted: Fri Mar 17, 2023 9:45 am
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";
Re: NexaHome v3.5.0
Posted: Fri Mar 17, 2023 9:45 am
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
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();
Re: NexaHome v3.5.0
Posted: Fri Mar 17, 2023 9:45 am
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
Re: NexaHome v3.5.0
Posted: Fri Mar 17, 2023 9:45 am
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

Re: NexaHome v3.5.0
Posted: Fri Mar 17, 2023 9:45 am
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
Re: NexaHome v3.5.0
Posted: Fri Mar 17, 2023 9:45 am
by Leffe
Igen
Tror att problemet är löst
Reloaded NH 3.5
jag provar lite
Leffe
Re: NexaHome v3.5.0
Posted: Fri Mar 17, 2023 9:45 am
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