Bug i getCmdDeviceName() ?

Moderators: hekj, Telldus

Post Reply
larshson
Posts: 4
Joined: Thu Jan 18, 2018 11:08 am

Bug i getCmdDeviceName() ?

Post by larshson » Thu Jan 18, 2018 11:08 am

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 :-)

larshson
Posts: 4
Joined: Thu Jan 18, 2018 11:08 am

Re: Bug i getCmdDeviceName() ?

Post by larshson » Thu Jan 18, 2018 11:08 am

Ska tillägga att jag kör version 4.1.8

hekj
Posts: 988
Joined: Thu Jan 18, 2018 11:08 am
Location: Stockholm
Contact:

Re: Bug i getCmdDeviceName() ?

Post by hekj » Thu Jan 18, 2018 11:08 am

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?
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).

Exempel: 4-.bsh

De speciella metoderna är.
+ "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"
Om du lägger in följande kodrad i ditt bsh script så får du veta varför bsh filen exekveras.

Code: Select all

echo(getExecutedBy());

larshson
Posts: 4
Joined: Thu Jan 18, 2018 11:08 am

Re: Bug i getCmdDeviceName() ?

Post by larshson » Thu Jan 18, 2018 11:08 am

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 :-)

hekj
Posts: 988
Joined: Thu Jan 18, 2018 11:08 am
Location: Stockholm
Contact:

Re: Bug i getCmdDeviceName() ?

Post by hekj » Thu Jan 18, 2018 11:08 am

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.
Om man exekverar följande rad i ett <id>-.bsh script så kommer inte det schemalagda eventet att utföras.

Code: Select all

cancelEvent();
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 :-)
Jag har lagt upp en ny version, testa följande.

Code: Select all

echo("'" + getScriptName() + "'");

larshson
Posts: 4
Joined: Thu Jan 18, 2018 11:08 am

Re: Bug i getCmdDeviceName() ?

Post by larshson » Thu Jan 18, 2018 11:08 am

hekj wrote: Jag har lagt upp en ny version
Fantastiskt :-) Tack så mycket, funkar prima. :clap:

Post Reply