Flera callbacks för en enskild sändning

Moderator: Telldus

Post Reply
MartinV
Posts: 277
Joined: Thu Jan 18, 2018 11:08 am
Contact:

Flera callbacks för en enskild sändning

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

Använder Nexas rörelsedetektor för att laborera lite med Duo och lyssnar på callback events...

När detektorn känner av en händelse fullkomligt flödas rymden av signaler... En enda rörelse genererar 33 callbacks. Detektorn skickar ut signaler på 3 olika protokoll med 11 sändningar på varje protokoll.
Lägger jag till detektorn som en enhet i Telldus Center så får jag ytterligare 11 callbacks = totalt 44 callbacks.

Jag har lagt märke till att (iaf vissa) fjärrkontroller fungerar på samma sätt - att de skickar signalen fler än en gång per knapptryck och alltså generera multipla callbacks.

Det känns till att börja med jobbigt att detektorn flödar nätet, men det leder också till att det blir jobbigt att i klientprogramvara helt enkelt bara fånga upp den första händelsen och därefter kasta de 32 kommande callbacks som förväntas komma.

Kommer Duo att även framöver mata ut samtliga callbacks eller kommer det finnas en funktion som skalar bort de extra signalerna?
Är så klart ute efter att sondera terrängen när det gäller hur mycket logik jag måste bygga in i Switch King...
Kan nämnas att jag inte vet vilken firmware jag har, men att jag _tror_ att den är uppgraderad i mars i år.
Martin | http://www.switchking.se
Testa Switch King Pro i din Android/iPhone/iPod: http://www.switchking.se/sv/demo

stefan.persson
Posts: 353
Joined: Thu Jan 18, 2018 11:08 am

Re: Flera callbacks för en enskild sändning

Post by stefan.persson » Thu Jan 18, 2018 11:08 am

Vi har också märkt att detta inte är särskilt bra, och kommer att åtgärda det. Har lagt upp en ticket nu, http://developer.telldus.se/ticket/84

Vi ska se till så att identiska mottagna signaler som kommer under en kort tidsperiod bara kommer att generera en enda callback. Detta kommer dock enbart att göras för konfigurerade enheter, alltså i device event callbacks. Raw callbacks kommer INTE att få denna funktion, eftersom de är just "raw" och bara vidarebefodrar allt som mottages. Kom också ihåg att innehållet i raw callbacks för övrigt dessutom kan komma att ändras i framtiden, och därför inte är rekommenderat att använda annat än i felsökningssyfte.
Stefan Persson
Software
Telldus Technologies

MartinV
Posts: 277
Joined: Thu Jan 18, 2018 11:08 am
Contact:

Re: Flera callbacks för en enskild sändning

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

Låter kanon!

Antar att i det specifika fallet med just Nexas detektor så är målet då att det kommer att bli totalt 34 events - 33 Raw Events och 1 Device Event (baserat på vilken enhetstyp man registrerat detektorn till i Telldus Center).
Eller kommer manisf skala bort samtliga Raw Events där det är möjligt att så att säga få Device Events istället (vilket i det här fallet hade lett till 22 Raw Events och 1 Device Event)?

När jag läser Ticketen så tolkar jag att det är det sistnämnda som gäller, men en bekräftelse vore trevligt. :)
Martin | http://www.switchking.se
Testa Switch King Pro i din Android/iPhone/iPod: http://www.switchking.se/sv/demo

stefan.persson
Posts: 353
Joined: Thu Jan 18, 2018 11:08 am

Re: Flera callbacks för en enskild sändning

Post by stefan.persson » Thu Jan 18, 2018 11:08 am

Nej, tanken är att raw-events kommer att skickas ut precis som tidigare, oavsett om man har någon konfigurerad device som stämmer in på signalen eller inte. Raw är raw, och allt mottaget skickas vidare där.

Alltså, nu: 33 raw callbacks och 11 device callbacks om man har en konfigurerad enhet
Sedan: 33 raw callbacks och 1 device callback för den konfigurerade enheten
Stefan Persson
Software
Telldus Technologies

ducken
Posts: 14
Joined: Thu Jan 18, 2018 11:08 am

Re: Flera callbacks för en enskild sändning

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

Ett ytterligare problem som jag upptäckt är att så länge DUOn tar emot signaler så kan det vara problem med att skicka signaler.
Om jag i den delegerade mottagningsfunktionen direkt gör en sänd, så går den inte alltid fram, p.g.a. att den verkar krocka med inkommande signal. I sådana fall måste ju mjukvaran vänta tills sändaren skickat färdigt alla signaler, vilket kan ta upp emot tre sekunder för t.ex. Nexas rörelsesensor.

Är det bara jag som upplever det?
Hur ser det ut hårdvarumässigt, köas signalerna upp på något vis för att undvika att sånt ska kunna hända?

Om det är så att det kan bli krock kommer det ju inte hjälpa att device callbacken minskar, man måste ju ändå vänta tills alla raw callbacks har skickats färdigt, och det finns det ju givetvis olika lösningar för.

MartinV
Posts: 277
Joined: Thu Jan 18, 2018 11:08 am
Contact:

Re: Flera callbacks för en enskild sändning

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

ducken wrote:Är det bara jag som upplever det?
Nej... Switch King-användare som har kört betaversionerna av Switch King i kombination med Duo har rapporterat detta också. Är man för snabb med att skicka ut en signal så når den aldrig fram, troligtvis pga störningar.

I Switch King är detta löst på två sätt. Fördröjning av behandling av inkommande signal samt repetition av utgående signaler.

Däremot har jag upplevt att det inte tar så lång tid som tre sekunder att få alla signaler från Nexas rörelsedetektorer. Min erfarenhet är att signalerna landar (iaf för mina två mottagare) inom samma sekund. Det finns ju dock olika firmware i Nexas detektorer (olika firmware inom samma modell) så beteendet kan vara olika beroende på när detektorn är införskaffad.
Martin | http://www.switchking.se
Testa Switch King Pro i din Android/iPhone/iPod: http://www.switchking.se/sv/demo

micke.prag
Site Admin
Posts: 2242
Joined: Thu Jan 18, 2018 11:08 am
Location: Lund
Contact:

Re: Flera callbacks för en enskild sändning

Post by micke.prag » Thu Jan 18, 2018 11:08 am

Du måste själv vänta på "tystnad" innan du sänder. Saxat från http://developer.telldus.com/doxygen/:
Many devices (for example motion detectors) resends their messages many times to ensure that they are received correctly. If a deviceeventcallback or rawdeviceeventcallback in turn is calling a controlling function, for example tdTurnOn, it may be neccessary to implement some solution to wait for the device to finish its resending, before executing the controlling function. See how this can be done in the python example.
Micke Prag
Software
Telldus Technologies

Post Reply