Hej! Och tack för jobbet du gör med Nexahome. Har pysslat en del med det nu och gillar skarpt möjligheten att i praktiken köra java mha beanshell!
Jag har ett gäng Nexa magnetsensorer (LMST-606) som jag beroende på mode Hemma/Borta skickar mail+SMS om någon dörr öppnas.
För att slippa få många mail om dörrar öppnas många gånger inom ett kort intervall sparar jag undan tiden för respektive öppning för att kunna kolla diffen.
Timestampen lagras med en vanlig key-value grunka, där jag har valt att ha värdet från getCmdDeviceName() som key.
Det har funkat lite till och från, ibland returnerar nämligen getCmdDeviceName() en tom sträng. Nu är jag inne i en period då det blir tom sträng när det triggas från dörrarna, men fungerar korrekt när jag själv klickar på "lamporna" i nexahome för att få scripten att funka, se output:
a1) 2017-01-07 19:42:07 Script executed (17.bsh), result: [[echo, Door length: 0], [echo, Checking door ], [echo, Ingen trigger... (intervall check)]]
a2) 2017-01-07 19:42:08 Script executed (17.bsh), result: [[echo, Door length: 0], [echo, Checking door ], [echo, Ingen trigger... (intervall check)]]
b1) 2017-01-07 19:42:26 :ON: Turning on device: 17 Dörr Entre (S3) - ok
b2) 2017-01-07 19:42:31 Script executed (17.bsh), result: [[echo, Door length: 15], [echo, Checking door Dörr Entre (S3)], [echo, now: 1483814548 stamp: 1483808850], [echo, mail failed to send, trying SMS instead!]]
b3) 2017-01-07 19:42:33 Script executed (17.bsh), result: [[echo, Door length: 0], [echo, Checking door ], [echo, Ingen trigger... (intervall check)]]
a1 och a2 händer när jag öppnade och stängde dörren.
b1, b2 och b3 händer när jag klickade på lampan i programmet.
Nån bra fundering på varför det blir tom sträng för a1+a2?
Nån bra fundering på varför b3 händer, dvs varför körs scriptet två gånger för en ON-klickning, och varför är det dessutom tom sträng?
Tack på förhand
Bug i getCmdDeviceName() ?
Re: Bug i getCmdDeviceName() ?
Ska tillägga att jag kör version 4.1.8
Re: Bug i getCmdDeviceName() ?
Jag måste ha missat lite dokumentation... det finns vissa metodanrop som enbart går att använda i dom bsh filer som anropas före ett kommando utförs, dvs dom vars filnamn börjar med deviceid plus ett minustecken (<deviceid>-.bsh).larshson wrote: Det har funkat lite till och från, ibland returnerar nämligen getCmdDeviceName() en tom sträng. Nu är jag inne i en period då det blir tom sträng när det triggas från dörrarna, men fungerar korrekt när jag själv klickar på "lamporna" i nexahome för att få scripten att funka, se output:
a1) 2017-01-07 19:42:07 Script executed (17.bsh), result: [[echo, Door length: 0], [echo, Checking door ], [echo, Ingen trigger... (intervall check)]]
a2) 2017-01-07 19:42:08 Script executed (17.bsh), result: [[echo, Door length: 0], [echo, Checking door ], [echo, Ingen trigger... (intervall check)]]
b1) 2017-01-07 19:42:26 :ON: Turning on device: 17 Dörr Entre (S3) - ok
b2) 2017-01-07 19:42:31 Script executed (17.bsh), result: [[echo, Door length: 15], [echo, Checking door Dörr Entre (S3)], [echo, now: 1483814548 stamp: 1483808850], [echo, mail failed to send, trying SMS instead!]]
b3) 2017-01-07 19:42:33 Script executed (17.bsh), result: [[echo, Door length: 0], [echo, Checking door ], [echo, Ingen trigger... (intervall check)]]
a1 och a2 händer när jag öppnade och stängde dörren.
b1, b2 och b3 händer när jag klickade på lampan i programmet.
Nån bra fundering på varför det blir tom sträng för a1+a2?
Nån bra fundering på varför b3 händer, dvs varför körs scriptet två gånger för en ON-klickning, och varför är det dessutom tom sträng?
Exempel: 4-.bsh
De speciella metoderna är.
Om du lägger in följande kodrad i ditt bsh script så får du veta varför bsh filen exekveras.+ "cmdIsOn() {\n"
+ " return \"ON\".equals(getCmd());\n"
+ "}\n"
+ "cmdIsOff() {\n"
+ " return \"OFF\".equals(getCmd());\n"
+ "}\n"
+ "getCmd() {\n"
+ " return getData(\"cmd_\");\n"
+ "}\n"
+ "getCmdLevel() {\n"
+ " return getData(\"level_\");\n"
+ "}\n"
+ "getCmdDeviceId() {\n"
+ " return getData(\"deviceId_\");\n"
+ "}\n"
+ "getCmdDeviceName() {\n"
+ " return getData(\"deviceAlias_\");\n"
+ "}\n"
+ "getCmdRepeat() {\n"
+ " return getData(\"repeat_\");\n"
+ "}\n"
Code: Select all
echo(getExecutedBy());
Henrik | http://easyhomeauto.se
Re: Bug i getCmdDeviceName() ?
Ah tack det förklarar varför det körs två gånger, en pga CMD och en pga Update. Hade inte sett någonstans att det gick att ha <id>-.bsh filer som bara var relevanta för CMD's.
Finns det inget sätt att få reda på vilket namn (eller id för den delen) det gäller när scriptet exekveras av något annat än ett kommando?
Jag vill göra samma sak för alla mina sensorer, det enda som ska skilja är dess id/namn för att spara undan timestamps, så jag har gjort symboliska länkar från en grundfil till alla andra relevanta filer för att slippa behöva ändra på flera ställen varje gång. Det är ju inget problem för mig att fixa om det nu är så det är, men man vill ju vara bekväm om det går
Finns det inget sätt att få reda på vilket namn (eller id för den delen) det gäller när scriptet exekveras av något annat än ett kommando?
Jag vill göra samma sak för alla mina sensorer, det enda som ska skilja är dess id/namn för att spara undan timestamps, så jag har gjort symboliska länkar från en grundfil till alla andra relevanta filer för att slippa behöva ändra på flera ställen varje gång. Det är ju inget problem för mig att fixa om det nu är så det är, men man vill ju vara bekväm om det går
Re: Bug i getCmdDeviceName() ?
Om man exekverar följande rad i ett <id>-.bsh script så kommer inte det schemalagda eventet att utföras.larshson wrote:Ah tack det förklarar varför det körs två gånger, en pga CMD och en pga Update. Hade inte sett någonstans att det gick att ha <id>-.bsh filer som bara var relevanta för CMD's.
Code: Select all
cancelEvent();
Jag har lagt upp en ny version, testa följande.larshson wrote:Finns det inget sätt att få reda på vilket namn (eller id för den delen) det gäller när scriptet exekveras av något annat än ett kommando?
Jag vill göra samma sak för alla mina sensorer, det enda som ska skilja är dess id/namn för att spara undan timestamps, så jag har gjort symboliska länkar från en grundfil till alla andra relevanta filer för att slippa behöva ändra på flera ställen varje gång. Det är ju inget problem för mig att fixa om det nu är så det är, men man vill ju vara bekväm om det går
Code: Select all
echo("'" + getScriptName() + "'");
Henrik | http://easyhomeauto.se
Re: Bug i getCmdDeviceName() ?
Fantastiskt Tack så mycket, funkar prima.hekj wrote: Jag har lagt upp en ny version