plocka in tryckningar på fjärrkontroll i program

Moderator: Telldus

Post Reply
johe71
Posts: 23
Joined: Thu Jan 18, 2018 11:08 am

plocka in tryckningar på fjärrkontroll i program

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

problembeskrivning: jag ska göra ett program som ska tända en device när duon tar emot en signal (från en fjärrkontroll eller en rörelsesensor), och sedan släcka den efter en viss tidsperiod. Jag vill inte att rörelsesensorn ska tända lampan direkt, utan det ska gå via datorn

funktionaliteten jag vill ha ska bero på vad klockan är och vilken signal som duon får in
* Är klockan efter solens nedgång fram till 22:30 så är det sannolikt att det är en människa som triggar rörelsesensorn, och då vill jag tända ytterlampan i tja.. säg 30 minuter (om det tex kommer någon som har ett ärende så får lampan gärna vara tänd när den personen går igen)
* är klockan efter 22:30-midnatt så är det mer osannolikt att det är en besökare, och då vill jag tända lampan i 5 minuter (lagom så man hinner plocka ur bilen och gå in i huset)
* är det efter midnatt så vill jag inte tända lampan alls om det kommer en signal från rörelsesensorn - för då är det sannolikt ett rådjur eller en katt eller något annat djur (givetvis ska man kunna ställa in programmet så att man specar att på lördag kommer vi hem sent, och då ska lampan tändas även efter midnatt)
* kommer det en signal från fjärrkontrollen så vill jag alltid tända ytterlampan, och antagligen ha den tänd olika länge beroende på vad klockan är (man skulle också kunna tänka sig att det funkar som start-knappen på vår mikrovågsugn, varje ytterligare klick på fjärrkontrollen förlänger tiden innan lampan släcks med 30 minuter)

tittar jag i telldus-core.h så finns det 4 events jag kan lyssna på
tdRegisterSensorEvent, som ger data från sensorer (tex temperatur)
tdRegisterDeviceChangeEvent, som verkar ge mig data när en device ändrar sig (om jag tex byter namn på en device i telldus center)
tdRegisterDeviceEvent, som verkar ge mig data när ett program ändrar status på en device (om jag tex i telldus center tänder eller släcker en enhet), men ingen data om jag tänder/släcker enheten med min fjärrkontroll
också tdRegisterRawDeviceEvent som ger mig allt möjligt :)

så jag antar att jag blir tvungen att använda tdRegisterRawDeviceEvent för att mitt program ska kunna göra det jag beskriver ovan?

"problemet" är väl att tdRegisterRawDeviceEvent registrerar så många events när det händer något.... men eftersom det är enda funktionen jag hittar som ger mig data när jag klickar på en fjärrkontroll så antar jag att det är den man blir tvungen att använda och att man helt enkelt får försöka skriva en någotsånär "intelligent" avkodning som ger mig en sak att testa för varje "burst" som jag får in....?

tittar jag på lite data som man får in så inser man att detta kommer att bli spännande :)

en handrörelse framför min rörelsesensor (från nexa) ger följande utskrifter i callback-funktionen

Code: Select all

data: class:command;protocol:arctech;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:waveman;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:arctech;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:waveman;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:arctech;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:waveman;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=0
data: class:command;protocol:arctech;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:waveman;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:arctech;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:waveman;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1

data: class:command;protocol:waveman;model:codeswitch;house:O;unit:1;method:turnoff;, controllerId=-1
data: class:command;protocol:arctech;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:waveman;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:arctech;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:waveman;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:arctech;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:waveman;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:arctech;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:waveman;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=0

data: class:command;protocol:waveman;model:codeswitch;house:A;unit:1;method:turnoff;, controllerId=-1
data: class:command;protocol:arctech;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:waveman;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:arctech;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:waveman;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:arctech;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:waveman;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:arctech;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:waveman;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=0
data: class:command;protocol:waveman;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:arctech;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:waveman;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:arctech;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:waveman;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:arctech;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
data: class:command;protocol:waveman;model:codeswitch;house:E;unit:1;method:turnon;, controllerId=-1
ok, jag kan nog hitta den kodmässigt :) house:E;unit:1 vill verkligen att något ska sättas på.... spännande dock att det kommer två stycken turnoff (för andra house) mitt i alltihop


jaja :) om inte någon har ett bättre sätt att plocka in tryckningar från fjärrkontroller/rörelsesensorer så är det bara att börja försöka filtrera det hela....

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

Re: plocka in tryckningar på fjärrkontroll i program

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

tdRegisterDeviceEvent ska plocka upp även fjärrkontrollssignaler som matchar konfigurerade enheter. Så denna metod är den vi rekommenderar. Då slipper du mycket av filtreringen, och dessutom är det möjligt att raw-dataformatet kommer att ändras i framtiden, om det krävs när vi lägger till stöd för ytterligare enheter.

Raw ska användas för felsökning och när man vill upptäcka nya enheter/sensorer.

Jag undrar bara varför tdRegisterDeviceEvent inte verkar fungera hos dig. Och även när du får igång deviceEvents så kommer även dessa i burstar, vi håller på att fundera över hur vi ska göra här, i vissa fall är man kanske intresserad av att få tillbaka varje mottagen signal, även om man i en majoritet av fallen säkert bara vill räkna det som en enda knapptryckning.

Det låter som ett intressant projekt iaf!
Stefan Persson
Software
Telldus Technologies

johe71
Posts: 23
Joined: Thu Jan 18, 2018 11:08 am

Re: plocka in tryckningar på fjärrkontroll i program

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

stefan.persson wrote:tdRegisterDeviceEvent ska plocka upp även fjärrkontrollssignaler som matchar konfigurerade enheter. Så denna metod är den vi rekommenderar. [...] Och även när du får igång deviceEvents så kommer även dessa i burstar, vi håller på att fundera över hur vi ska göra här,
bra, då ska jag testa lite mer ikväll och se varför jag inte får in något den vägen.... jag har just nu bara en enhet konfigurerad (tror det var en från kjell&co), så jag ska testa och lägga in några till (har fjärrkontroller/enheter från clas ohlson och nexa) och se om jag kan få det att fungera...

att det kommer burstar är egentligen inte något problem om det jag får är data som stämmer, när jag testade lite igår så kommer det en mängd olika protocol och model från ett klick på en fjärrkontroll, så det stora problemet, om man hade varit tvungen att filtrera Raw, hade varit att gissa vad som händer när flera fjärrkontroller/rörelsesensorer sänder något samtidigt...
För jag antar att man får DeviceEvents för rätt device när de är konfigurerade :), och då upplever jag det inte det skulle kunna skapa några problem att det kommer flera... (för man kan ju som sagt kanske vara intresserad av det i något läge)

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

Re: plocka in tryckningar på fjärrkontroll i program

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

Ja, det kommer ju flera protokoll/modeller eftersom samma signal passar in på flera, därför måste alla skickas tillbaka, medan deviceEvents vet vilka enheter du har konfigurerat och är intresserad av.
Stefan Persson
Software
Telldus Technologies

johe71
Posts: 23
Joined: Thu Jan 18, 2018 11:08 am

Re: plocka in tryckningar på fjärrkontroll i program

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

då har jag provat med att lägga till min nexa-fjärrkontroll som en enhet i telldus center och får mycket riktigt svar från tdRegisterDeviceEvent (och enheten ändrar även status i telldus center)

den enheten som jag testade med igår (den enda jag hade upplagd) är en från kjell&co, jag kan tända och släcka den från telldus center, och jag kan tända och släcka den med fjärrkontrollen... men när jag använder fjärren så får jag inga tdRegisterDeviceEvent och statusen uppdaterar sig heller inte i telldus center... så jag måste helt enkelt registrerat den lite fel i telldus center (fast tillräckligt rätt så jag kan tända och släcka den :))

hur som helst, att man får tdRegisterDeviceEvent-svar när man registrerat dem rätt förenklar mitt liv mycket. tack för hjälpen. :clap:

Post Reply