Bug i getCmdDeviceName() ?

Moderators: hekj, Telldus

Bug i getCmdDeviceName() ?

Postby larshson » Sat Jan 07, 2017 6:56 pm

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: Sat Jan 07, 2017 6:45 pm

Re: Bug i getCmdDeviceName() ?

Postby larshson » Sat Jan 07, 2017 7:26 pm

Ska tillägga att jag kör version 4.1.8
larshson
 
Posts: 4
Joined: Sat Jan 07, 2017 6:45 pm

Re: Bug i getCmdDeviceName() ?

Postby hekj » Mon Jan 09, 2017 9:01 pm

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());
hekj
 
Posts: 978
Joined: Mon Jan 05, 2009 10:34 am
Location: Stockholm

Re: Bug i getCmdDeviceName() ?

Postby larshson » Fri Jan 13, 2017 9:22 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 :-)
larshson
 
Posts: 4
Joined: Sat Jan 07, 2017 6:45 pm

Re: Bug i getCmdDeviceName() ?

Postby hekj » Fri Jan 13, 2017 5:37 pm

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() + "'");
hekj
 
Posts: 978
Joined: Mon Jan 05, 2009 10:34 am
Location: Stockholm

Re: Bug i getCmdDeviceName() ?

Postby larshson » Mon Jan 16, 2017 12:13 pm

hekj wrote:Jag har lagt upp en ny version

Fantastiskt :-) Tack så mycket, funkar prima. :clap:
larshson
 
Posts: 4
Joined: Sat Jan 07, 2017 6:45 pm


Return to NexaHome

Who is online

Users browsing this forum: Yahoo [Bot] and 2 guests