Bygga egen sändare till Nexa trådlös dimmer
- jadler
- EF Sponsor
- Inlägg: 407
- Blev medlem: 28 maj 2009, 12:03:43
- Ort: Vidja, Huddinge, Stockholm
- Kontakt:
Re: Bygga egen sändare till Nexa trådlös dimmer
Händer det något mer med detta projekt? Själv är jag mest intresserad av att kunna koppla en sändare till en AVR/Arduino eller direkt till en XBee-modul. Jag har drygt 40 meter till garaget och vill vara säker på att jag når fram till enheter där och i bilen (motorvärmare, kupévärmare, halogenflodlampor ute), ocj jag vet att XBee-länken räcker dit, och skulle det behövas har jag dragit massor av extra signalkabel dit också. Generellt är jag mycket mer intresserad av att styra trådlösa strömbrytare genom AVR än direkt från datorn.
Jag vet att jag skulle kunna bygga någon liten krets med relä eller triac som gör jobbet, men de färdiga mottagarmodulerna verkar smidiga och i längden sannolikt billigare/enklare än hembyggen.
Jag vet att jag skulle kunna bygga någon liten krets med relä eller triac som gör jobbet, men de färdiga mottagarmodulerna verkar smidiga och i längden sannolikt billigare/enklare än hembyggen.
Re: Bygga egen sändare till Nexa trådlös dimmer
Här är två funktioner jag skrev för att kunna styra NEXA och Sartano-sändare:
och ett försök till förklaring:
Kod: Markera allt
void sendstringrf(char *str)
{
char i, j;
for(i = 0; i < 4; i++)
{
j = 0;
while (*(str+j) != '\0')
{
sendrf(*(str+j));
j++;
}
}
}
void sendrf(char v)
{
switch (v)
{
case '0':
PORTD |= _BV(RFD);
_delay_us(350);
PORTD &= ~_BV(RFD);
_delay_us(1100);
PORTD |= _BV(RFD);
_delay_us(1100);
PORTD &= ~_BV(RFD);
_delay_us(350);
break;
case 'X':
PORTD |= _BV(RFD);
_delay_us(350);
PORTD &= ~_BV(RFD);
_delay_us(1100);
PORTD |= _BV(RFD);
_delay_us(350);
PORTD &= ~_BV(RFD);
_delay_us(1100);
break;
case 'o':
PORTD |= _BV(RFD);
_delay_us(320);
PORTD &= ~_BV(RFD);
_delay_us(960);
PORTD |= _BV(RFD);
_delay_us(320);
PORTD &= ~_BV(RFD);
_delay_us(960);
break;
case 'x':
PORTD |= _BV(RFD);
_delay_us(320);
PORTD &= ~_BV(RFD);
_delay_us(960);
PORTD |= _BV(RFD);
_delay_us(960);
PORTD &= ~_BV(RFD);
_delay_us(320);
break;
case '+':
PORTD |= _BV(RFD);
_delay_us(360);
PORTD &= ~_BV(RFD);
_delay_ms(8);
break;
}
}
Kod: Markera allt
NEXA string examples
-----------------------
o = 320µs high, 960µs low, 320µs high, 960µs low
x = 320µs high, 960µs low, 960µs high, 320µs low
turn OFF house A, unit 2: "ooooxooooxxo+"
house id unit unknown activation stop bit
oooo xooo oxx o +
turn ON house C, unit 8: "oxooxxxooxxx+"
house id unit unknown activation stop bit
oxoo xxxo oxx x +
SARTANO string examples
--------------------------
0 = 360µs high, 1100µs low, 1100µs high, 360µs low
X = 360µs high, 1100µs low, 360µs high, 1100µs low
turn OFF house id 35, channel 2: "00X0X0X0000X+"
house id channel activation stop bit
00X0X 0X000 0X +
turn ON house id 124, channel 1: "XX0X0X0000X0+"
house id channel activation stop bit
XX0X0 X0000 X0 +
ex.
sendstringrf("oxooxxxooxxx+"); //NEXA
sendstringrf("XX0X0X0000X0+"); //Sartano
-
- Inlägg: 8092
- Blev medlem: 18 januari 2009, 00:48:24
- Ort: Alvesta, Småland
Re: Bygga egen sändare till Nexa trådlös dimmer
Intressant projekt som ska läsas igenom vid tillfälle.
- jadler
- EF Sponsor
- Inlägg: 407
- Blev medlem: 28 maj 2009, 12:03:43
- Ort: Vidja, Huddinge, Stockholm
- Kontakt:
Re: Bygga egen sändare till Nexa trådlös dimmer
Väldigt många av de aktiva skribenternas länkar i tidigare inlägg är döda, bland annat http://www.mellander.org/per/projects/?project=nexa som refereras till vid flera tillfällen. Givetvis kan man hitta åtminstone själva webbsidorna genom archive.org t.ex. på http://web.archive.org/web/*/http://www ... oject=nexa men det verkar även som att många bilder är bortrensade.
Det framgår inte helt klart, men jag tolkar det som att en eller flera av de skribenter som tidigare var aktiva i tråden nu marknadsför resultatet av projektet under namnet Tellstick. Kanske man har försökt rensa bort användbar information för att göra det svårare för eventuella konkurrenter. På sätt och vis har jag full förståelse för det, i synnerhet under tidsperioden från att man beslutade sig för att göra projektet kommersiellt till att man har etablerat sig på marknaden. Å andra sidan är min personliga uppfattning att Telldus med sin Tellstick nu är väl etablerade på marknaden, och denna censur gör det onödigt svårt för mig att utveckla en helt annan produkt för personligt bruk.
Visserligen tycker jag nog att Tellstick i butik kostar lite väl mycket, 700 kr på Kjell & Co, men skulle jag vilja styra denna typ av uttag från en PC så skulle jag nog välja att investera i en sådan trots priset. Nu är mitt behov ett helt annat eftersom jag vill kunna styra denna typ av uttag från en MCU, och gärna även ta emot information t.ex. från de temperatursändare för utomhusbruk som jag redan har.
Jag vill på inget sätt kritisera personerna bakom Telldus, jag respekterar beslut i samband med introduktion på marknaden, men samtidigt känns det ganska dumt att behöva göra om mycket arbete från grunden. (Å andra sidan arbetar Telldus bara med öppen källkod, så kanske man kan ta del av det som behövs ändå.)
Själv köpte jag mina första radiostyrda uttag tidigare idag, ett trepack för 149:- på Kjell & Co som visade sig vara "Rising Sun" RSL366T (sändare) och RSL366R (mottagare med relä). Butiken i Farsta, närmast för mig, hade också den lilla sändarmodulen 88901 hemma, men tyvärr ingen mottagarmodul 88900 (99 kr per styck). Jag har öppnat både sändare och mottagare, den förra verkar innehålla samma ND R433.92 som den lilla sändarmodulen.
Min tanke är väl att använda en mottagarmodul och försöka se vad som händer på det frekvensbandet, mitt enkla oscilloskop har inte anlänt från HK än. Det blir lite jobb med att räkna ut hur sändare av olika fabrikat arbetar, men det borde väl gå även denna gång.
Det framgår inte helt klart, men jag tolkar det som att en eller flera av de skribenter som tidigare var aktiva i tråden nu marknadsför resultatet av projektet under namnet Tellstick. Kanske man har försökt rensa bort användbar information för att göra det svårare för eventuella konkurrenter. På sätt och vis har jag full förståelse för det, i synnerhet under tidsperioden från att man beslutade sig för att göra projektet kommersiellt till att man har etablerat sig på marknaden. Å andra sidan är min personliga uppfattning att Telldus med sin Tellstick nu är väl etablerade på marknaden, och denna censur gör det onödigt svårt för mig att utveckla en helt annan produkt för personligt bruk.
Visserligen tycker jag nog att Tellstick i butik kostar lite väl mycket, 700 kr på Kjell & Co, men skulle jag vilja styra denna typ av uttag från en PC så skulle jag nog välja att investera i en sådan trots priset. Nu är mitt behov ett helt annat eftersom jag vill kunna styra denna typ av uttag från en MCU, och gärna även ta emot information t.ex. från de temperatursändare för utomhusbruk som jag redan har.
Jag vill på inget sätt kritisera personerna bakom Telldus, jag respekterar beslut i samband med introduktion på marknaden, men samtidigt känns det ganska dumt att behöva göra om mycket arbete från grunden. (Å andra sidan arbetar Telldus bara med öppen källkod, så kanske man kan ta del av det som behövs ändå.)
Själv köpte jag mina första radiostyrda uttag tidigare idag, ett trepack för 149:- på Kjell & Co som visade sig vara "Rising Sun" RSL366T (sändare) och RSL366R (mottagare med relä). Butiken i Farsta, närmast för mig, hade också den lilla sändarmodulen 88901 hemma, men tyvärr ingen mottagarmodul 88900 (99 kr per styck). Jag har öppnat både sändare och mottagare, den förra verkar innehålla samma ND R433.92 som den lilla sändarmodulen.
Min tanke är väl att använda en mottagarmodul och försöka se vad som händer på det frekvensbandet, mitt enkla oscilloskop har inte anlänt från HK än. Det blir lite jobb med att räkna ut hur sändare av olika fabrikat arbetar, men det borde väl gå även denna gång.
-
- Inlägg: 79
- Blev medlem: 22 juni 2006, 16:11:17
- Ort: Lund
- Kontakt:
Re: Bygga egen sändare till Nexa trådlös dimmer
Anledningen till att Per Mellanders sida är nere vet jag inte, jag tvivlar dock på att det har att göra med TellStick.
Nu har vi stöd för både Nexa och Rising Sun i vårt bibliotek och eftersom det är opensource finns där säkert lite du kan ha nytta av.
Kolla gärna koden här:
http://developer.telldus.se/browser/tru ... lldus-core
Nu har vi stöd för både Nexa och Rising Sun i vårt bibliotek och eftersom det är opensource finns där säkert lite du kan ha nytta av.
Kolla gärna koden här:
http://developer.telldus.se/browser/tru ... lldus-core
Re: Bygga egen sändare till Nexa trådlös dimmer
Nej, det har inget med Telldus att göra. Det är frågan om ett diskras. Däremot var han osäker på om han skulle lägga jobb på att få upp det igen.
Det var jag och Mellander som gjorde mycket av grundjobbet på Nexa tillsammans. Jag gjorde reverse engineering och Mellander dokumenterade resultatet.
Det var jag och Mellander som gjorde mycket av grundjobbet på Nexa tillsammans. Jag gjorde reverse engineering och Mellander dokumenterade resultatet.
- PHermansson
- EF Sponsor
- Inlägg: 4340
- Blev medlem: 22 december 2004, 00:46:38
- Ort: Särestad Grästorp
- Kontakt:
Re: Bygga egen sändare till Nexa trådlös dimmer
Man får ju bara applådera beslutet att använda öppen källkod. Öppen hårdvara hade ju inte vart fel heller, men eg finns ju allt man behöver veta på SVN-servern. Bara att analysera koden och porta, och sedan skicka upp till servern (för det är GPL?)
- jadler
- EF Sponsor
- Inlägg: 407
- Blev medlem: 28 maj 2009, 12:03:43
- Ort: Vidja, Huddinge, Stockholm
- Kontakt:
Re: Bygga egen sändare till Nexa trådlös dimmer
Micke, "vlf" och Per, stort tack för ert arbete! Jag hoppas att ingen tog illa upp för min förra text. Tråkigt att höra om diskkrashen!
Jag visste inte om Telldus av idag fortfarande körde med öppen kod, det var lite roligt när jag hittade en tidig version av sidan på internetarkivets tidsmaskin där det står att all mukvara har öppen källkod. Skulle den texten inte finnas idag skulle nog ingen kunna ställa några krav på att få se någon källkod.
Jag har googlat och surfat en del och bland annat hittat följande mer eller mindre användbara länkar:
HomeEasy verkar vara en europeisk motsvarighet till svenska Nexa. Vissa av länkarna har information om mer än bara just detta fabrikat, som tydligen även förekommer under andra namn (Bye Bye Standby ?)
http://homeeasyhacking.wikia.com/wiki/H ... cking_Wiki
http://www.arduino.cc/playground/Code/HomeEasy
http://jtlog.wordpress.com/tag/home-easy+arduino/
http://www.thegiblins.com/projects/home_automation.html
Här finns en pdf med vad som för mig ser ut som en vettig förklaring av ett protokoll som man kallar "Domia Lite". Flera andra sidor referrerar till denna sida, det fungerar tydligen med andra varumärken också. Innehåller bl.a. förklaring av 25-bitars-protokollet för att överföra 12 informationsbärande databitar.
http://www.byebyestandby.com/forum/view ... aeafc6c663
Ett mycket ambitiöst projekt som även har som mål att hämta data från trådlösa väderstationer (arbetar nu med LaCrosse)
http://code.google.com/p/arduinoha/
En möjlig TellStick-konkurrent, som dock har dyrare hårdvara och sluten källkod, men som har stöd för att ta emot information från väderstationer också.
http://www.rfxcom.com/index.htm
Jag vet inte om TellStick innehåller både sändare och mottagare, gör den det vore det ju inte helt okul att kunna ta emot signaler från trådlösa väderstationer eller termometrar (som mina TFA 30-3019 från Kjell & Co). (Men skall TellStick fungera med självlärande system antar jag att den innehåller mottagare också. Det borde ju också göra det lättare att implementera nya protokoll när man enkelt kan be en kund som har relevant hårdvara att spela in en viss sändning som sparas som en fil som man sedan kan analysera i lugn och ro.)
Även om jag får min light-version att fungera känns det ganska sannolikt att även jag gynnar Telldus ganska snart genom att köpa en TellStick.
Jag visste inte om Telldus av idag fortfarande körde med öppen kod, det var lite roligt när jag hittade en tidig version av sidan på internetarkivets tidsmaskin där det står att all mukvara har öppen källkod. Skulle den texten inte finnas idag skulle nog ingen kunna ställa några krav på att få se någon källkod.
Jag har googlat och surfat en del och bland annat hittat följande mer eller mindre användbara länkar:
HomeEasy verkar vara en europeisk motsvarighet till svenska Nexa. Vissa av länkarna har information om mer än bara just detta fabrikat, som tydligen även förekommer under andra namn (Bye Bye Standby ?)
http://homeeasyhacking.wikia.com/wiki/H ... cking_Wiki
http://www.arduino.cc/playground/Code/HomeEasy
http://jtlog.wordpress.com/tag/home-easy+arduino/
http://www.thegiblins.com/projects/home_automation.html
Här finns en pdf med vad som för mig ser ut som en vettig förklaring av ett protokoll som man kallar "Domia Lite". Flera andra sidor referrerar till denna sida, det fungerar tydligen med andra varumärken också. Innehåller bl.a. förklaring av 25-bitars-protokollet för att överföra 12 informationsbärande databitar.
http://www.byebyestandby.com/forum/view ... aeafc6c663
Ett mycket ambitiöst projekt som även har som mål att hämta data från trådlösa väderstationer (arbetar nu med LaCrosse)
http://code.google.com/p/arduinoha/
En möjlig TellStick-konkurrent, som dock har dyrare hårdvara och sluten källkod, men som har stöd för att ta emot information från väderstationer också.
http://www.rfxcom.com/index.htm
Jag vet inte om TellStick innehåller både sändare och mottagare, gör den det vore det ju inte helt okul att kunna ta emot signaler från trådlösa väderstationer eller termometrar (som mina TFA 30-3019 från Kjell & Co). (Men skall TellStick fungera med självlärande system antar jag att den innehåller mottagare också. Det borde ju också göra det lättare att implementera nya protokoll när man enkelt kan be en kund som har relevant hårdvara att spela in en viss sändning som sparas som en fil som man sedan kan analysera i lugn och ro.)
Även om jag får min light-version att fungera känns det ganska sannolikt att även jag gynnar Telldus ganska snart genom att köpa en TellStick.

- jadler
- EF Sponsor
- Inlägg: 407
- Blev medlem: 28 maj 2009, 12:03:43
- Ort: Vidja, Huddinge, Stockholm
- Kontakt:
Re: Bygga egen sändare till Nexa trådlös dimmer
Kan jag göra en CheckOut av hela biblioteket? Det vore bekvämare för mig att läsa filerna hemma.micke.prag skrev:Kolla gärna koden här:
http://developer.telldus.se/browser/tru ... lldus-core
-
- Inlägg: 79
- Blev medlem: 22 juni 2006, 16:11:17
- Ort: Lund
- Kontakt:
Re: Bygga egen sändare till Nexa trådlös dimmer
Kod: Markera allt
svn co http://svn.telldus.se/telldus/trunk/telldus-core
- jadler
- EF Sponsor
- Inlägg: 407
- Blev medlem: 28 maj 2009, 12:03:43
- Ort: Vidja, Huddinge, Stockholm
- Kontakt:
Re: Bygga egen sändare till Nexa trådlös dimmer
Tack Micke! Jag fick inte till rätt URL själv, med din URL gick det bra.
Utan att ha läst hela koden hade jag svårt att tolka bara "Rising Sun"-delen av ert program, och det var inte så svårt att koppla min Saleae Logic logikanalysator till en mottagarmodul från K&Co och ta reda på vad som sändes för de olika tillstånden. Tillsammans med specifikationen på Domia Lite-protokollet var det inte svårt att skriva ett enkelt program som styr just dessa budget-strömbrytare från K&Co. (Arduino-kod längre ned i texten.)
Modulerna jag använder är antagligen från Welleman, och mottagarmodulen verkar ha "AGC", "automatic gain control", så när den inte får någon tydlig signal ökar den känsligheten och börjar ta emot allmänt brus istället, vilket gjorde det svårt att säkert se vad som var den signal jag letade efter och vad som var brus. Jag slängde snabbt ihop ett Arduino-program som sände logisk etta (alltså aktiv signal) i 25 ms och logisk nolla (ingen sändning(?)) i 110 ms. Denna signal dränkte signalen från fjärrkontrollen (och temperatur-sensorn) när den sände logisk etta, men det gav mig en uppfattning om vad jag skulle leta efter i bruset, hur långa de olika delsignalerna skulle vara etc. Just med strömbrytarnas fjärrkontroll gick det också bra att hålla ned en knapp under hela registreringen för att bara få med detta, men det var värre när jag skulle försöka ta emot temperatur-sensorerna till den trådlösa utomhustermometern eftersom den bara sänder en gång per minut.
Förutom att jag nu kan styra Rising Sun-brytarna så har jag ett par exempel (23,9 och 24,0 grader, en av tre möjliga sensorer aktiv) på sändning från en temperatur-sensor, men jag har inte försökt analysera det protokollet ännu.
Rising Sun använder en enklare variant av Domia Lite-protokollet, kanske liknande äldre Nexa-enheter. Mitt kodexempel använder de faktiska tider som fjärrkontrollen använder, istället för de tider som Domia-specen anger (jag använder 1700 ms per bit istf 1500 ms). Protokollet använder fyra bitar per adress, två adressgrupper (hus/grupp och individ/enhet), men har bara stöd för fyra faktiska adresser per adressenhet. Adressen är alltså 1-4, och den bit som (från vänster) motsvarar adressen är en logisk nolla, rester är logisk etta. Adress två sänds alltså som 0100. Tredje fyrabitarsgruppen styr av/på, och där är det sista biten som avgör, på är 1111, av är 1110.
En 0-bit består av hög signal 1/4 av bit-tiden (här 425 µs), låg signal 3/4 av bit-tiden (här 1275 µs). En 1-bit består av hög signal 3/4 av tiden, låg signal 1/4 av tiden. Varje överföring av en faktisk bit består av en 0- eller 1-bit följt av en 0-bit, så de tolv logiska bitarna kommer att bli 24 fysiska bitar, och hela meddelandet inleds med en fysisk 0-bit. Detta 25-bitars meddelande upprepas med (i mitt fall) 13 ms mellanrum. Någon preamble för att väcka och synka mottagaren förekommer inte, istället upprepas meddelandet flera gånger (fem gånger har fungerat bra för mig).
Vill jag t ex slå på enhet två i grupp fyra (som i mitt programexempel) vill jag överföra de logiska bitarna 1110 1011 1111, och för att slå av samma enhet 1110 1011 1110. Tillsammans med de 0-bitar som används blir hela meddelandet som skickas till sändaren 0 10101000 10001010 10101010 respektive 0 10101000 10001010 10101000.
Den som inte använder Arduino kan se följande kod som pseudo-kod, jag tror att det skall vara ganska enkelt att förstå och anpassa till fristående AVR, PIC eller vad som helst. (I/O-pinne 13 är kopplad till en LED på Arduino-kortet som här kommer att lysa när strömbrytaren skall vara på.)
Programmet är skrivet för att testa att konceptet fungerar, så inga funktioner kollar efter felaktiga parametrar.
Jag kan förresten nämna att ungefär när jag började labba med detta fick jag grejerna jag beställt från Seeedstudio, och när jag kollade lite mer på deras sidor hittade jag likvärdiga sändar-/mottagarmoduler för $4.31 per kit med en sändare och en mottagare, och de har också ett kit som uppges klara upp till 2 km räckvidd.
Själv är jag nyfiken på att testa med bättre antenner, kanske en enkel dipol utformad efter faktisk våglängd och med korrekt jordplan, kanske en enkel yagi-udo eller annan riktantenn, men jag vet inte om den lilla sändarmodulen (som jag då lär mata med max rekommenderade 12V) blir för varm då. Blir den det får jag väl försöka kyla den på något vettigt sätt, eller försöka designa en själv som klarar högre uteffekt.
Utan att ha läst hela koden hade jag svårt att tolka bara "Rising Sun"-delen av ert program, och det var inte så svårt att koppla min Saleae Logic logikanalysator till en mottagarmodul från K&Co och ta reda på vad som sändes för de olika tillstånden. Tillsammans med specifikationen på Domia Lite-protokollet var det inte svårt att skriva ett enkelt program som styr just dessa budget-strömbrytare från K&Co. (Arduino-kod längre ned i texten.)
Modulerna jag använder är antagligen från Welleman, och mottagarmodulen verkar ha "AGC", "automatic gain control", så när den inte får någon tydlig signal ökar den känsligheten och börjar ta emot allmänt brus istället, vilket gjorde det svårt att säkert se vad som var den signal jag letade efter och vad som var brus. Jag slängde snabbt ihop ett Arduino-program som sände logisk etta (alltså aktiv signal) i 25 ms och logisk nolla (ingen sändning(?)) i 110 ms. Denna signal dränkte signalen från fjärrkontrollen (och temperatur-sensorn) när den sände logisk etta, men det gav mig en uppfattning om vad jag skulle leta efter i bruset, hur långa de olika delsignalerna skulle vara etc. Just med strömbrytarnas fjärrkontroll gick det också bra att hålla ned en knapp under hela registreringen för att bara få med detta, men det var värre när jag skulle försöka ta emot temperatur-sensorerna till den trådlösa utomhustermometern eftersom den bara sänder en gång per minut.
Förutom att jag nu kan styra Rising Sun-brytarna så har jag ett par exempel (23,9 och 24,0 grader, en av tre möjliga sensorer aktiv) på sändning från en temperatur-sensor, men jag har inte försökt analysera det protokollet ännu.
Rising Sun använder en enklare variant av Domia Lite-protokollet, kanske liknande äldre Nexa-enheter. Mitt kodexempel använder de faktiska tider som fjärrkontrollen använder, istället för de tider som Domia-specen anger (jag använder 1700 ms per bit istf 1500 ms). Protokollet använder fyra bitar per adress, två adressgrupper (hus/grupp och individ/enhet), men har bara stöd för fyra faktiska adresser per adressenhet. Adressen är alltså 1-4, och den bit som (från vänster) motsvarar adressen är en logisk nolla, rester är logisk etta. Adress två sänds alltså som 0100. Tredje fyrabitarsgruppen styr av/på, och där är det sista biten som avgör, på är 1111, av är 1110.
En 0-bit består av hög signal 1/4 av bit-tiden (här 425 µs), låg signal 3/4 av bit-tiden (här 1275 µs). En 1-bit består av hög signal 3/4 av tiden, låg signal 1/4 av tiden. Varje överföring av en faktisk bit består av en 0- eller 1-bit följt av en 0-bit, så de tolv logiska bitarna kommer att bli 24 fysiska bitar, och hela meddelandet inleds med en fysisk 0-bit. Detta 25-bitars meddelande upprepas med (i mitt fall) 13 ms mellanrum. Någon preamble för att väcka och synka mottagaren förekommer inte, istället upprepas meddelandet flera gånger (fem gånger har fungerat bra för mig).
Vill jag t ex slå på enhet två i grupp fyra (som i mitt programexempel) vill jag överföra de logiska bitarna 1110 1011 1111, och för att slå av samma enhet 1110 1011 1110. Tillsammans med de 0-bitar som används blir hela meddelandet som skickas till sändaren 0 10101000 10001010 10101010 respektive 0 10101000 10001010 10101000.
Den som inte använder Arduino kan se följande kod som pseudo-kod, jag tror att det skall vara ganska enkelt att förstå och anpassa till fristående AVR, PIC eller vad som helst. (I/O-pinne 13 är kopplad till en LED på Arduino-kortet som här kommer att lysa när strömbrytaren skall vara på.)
Kod: Markera allt
#define txPin 7
#define period 1700
#define delayShort (period / 4)
#define delayLong ((period * 3) / 4)
unsigned int rfDelay[2][2] = { {delayShort, delayLong}, {delayLong, delayShort} };
void txBitRaw(byte rfBit) {
digitalWrite(txPin, HIGH);
delayMicroseconds(rfDelay[rfBit][0]);
digitalWrite(txPin, LOW);
delayMicroseconds(rfDelay[rfBit][1]);
}
void txBit(byte rfBit) { // rfBit = {0, 1}
txBitRaw(rfBit);
txBitRaw(0);
}
void txAddr(byte rfAddr) { // rfAddr = {1-4}
for(int i=1; i<=4; i++) {
if(i == rfAddr) {
txBit(0);
} else {
txBit(1);
}
}
}
void txState(byte rfState) { // rfState = {0, 1}
for(int i=0; i<3; i++) {
txBit(1);
}
txBit(rfState);
}
void txSwitch(byte rfAddr1, byte rfAddr2, byte rfState) {
for(int i=0; i<5; i++) {
delay(13); // milliseconds
txBitRaw(0);
txAddr(rfAddr1); // major address
txAddr(rfAddr2); // minor address
txState(rfState); // on/off
}
}
void setup() {
pinMode(txPin, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
for(;;) {
digitalWrite(13,HIGH);
txSwitch(4,2,1);
delay(5000);
digitalWrite(13,LOW);
txSwitch(4,2,0);
delay(5000);
}
}
Jag kan förresten nämna att ungefär när jag började labba med detta fick jag grejerna jag beställt från Seeedstudio, och när jag kollade lite mer på deras sidor hittade jag likvärdiga sändar-/mottagarmoduler för $4.31 per kit med en sändare och en mottagare, och de har också ett kit som uppges klara upp till 2 km räckvidd.
Själv är jag nyfiken på att testa med bättre antenner, kanske en enkel dipol utformad efter faktisk våglängd och med korrekt jordplan, kanske en enkel yagi-udo eller annan riktantenn, men jag vet inte om den lilla sändarmodulen (som jag då lär mata med max rekommenderade 12V) blir för varm då. Blir den det får jag väl försöka kyla den på något vettigt sätt, eller försöka designa en själv som klarar högre uteffekt.
-
- Inlägg: 79
- Blev medlem: 22 juni 2006, 16:11:17
- Ort: Lund
- Kontakt:
Re: Bygga egen sändare till Nexa trådlös dimmer
När vi har skrivit kod för att ta emot signaler och ska filtrera ut bruset har vi lyssnat efter två likadana paket efter varandra. Detta har ganska effektivt filtrerat bort allt brus och släppt genom alla fjärrkontroller som är testade hittills.
En annan intressant sak är att det är samma protokoll som används till http://www.clasohlson.se/Product/Produc ... =143438236 som till Rising Sun.
En annan intressant sak är att det är samma protokoll som används till http://www.clasohlson.se/Product/Produc ... =143438236 som till Rising Sun.
- jadler
- EF Sponsor
- Inlägg: 407
- Blev medlem: 28 maj 2009, 12:03:43
- Ort: Vidja, Huddinge, Stockholm
- Kontakt:
Re: Bygga egen sändare till Nexa trådlös dimmer
Jag har inte skrivit någon kod för att analysera signaler än, bara kollat vad logikanalysatorn visar och försökt räkna ut med eget huvud vad det kan betyda. Er metod verkar vettig, helt klart. Jag är kanske mer lat. 
Tack för tipset om CO, där kan man spara en slant (99:- per trepack istf 149:-)! På sikt tror jag att jag kan få in mitt strömbrytarprojekt i en låda motsv CO/K&Co-brytarna, och jag har inte hittat någon som säljer en sådan låda än, jordad stickpropp och jordat uttag med plats för lite egna kretsar. 33 kr per låda och lite kretsar att använda till annat känns om ett helt OK pris för mig.

Tack för tipset om CO, där kan man spara en slant (99:- per trepack istf 149:-)! På sikt tror jag att jag kan få in mitt strömbrytarprojekt i en låda motsv CO/K&Co-brytarna, och jag har inte hittat någon som säljer en sådan låda än, jordad stickpropp och jordat uttag med plats för lite egna kretsar. 33 kr per låda och lite kretsar att använda till annat känns om ett helt OK pris för mig.
Re: Bygga egen sändare till Nexa trådlös dimmer
Hej!
Vet inte om detta kan vara till hjälp, men här kommer det gamla NEXA/PROOVE-protokollet (ej självlärande).
Några anmärkningar;
- Exempeltiderna behöver förmodligen justeras.
- Nyare sändare ser ut att ha ett lite annorlunda tidsförhållande än T/3T.
- Mellanders länk fungerar inte längre.
Vet inte om detta kan vara till hjälp, men här kommer det gamla NEXA/PROOVE-protokollet (ej självlärande).
Några anmärkningar;
- Exempeltiderna behöver förmodligen justeras.
- Nyare sändare ser ut att ha ett lite annorlunda tidsförhållande än T/3T.
- Mellanders länk fungerar inte längre.
Kod: Markera allt
The NEXA/PROOVE Remote Protocol
===============================
The RF remote control transmitters/receivers from NEXA and PROOVE seems
to originate from ARC Technology Co Ltd, Taiwan. There are several versions
of these products but they seem to share the same protocol.
Bit representation
------------------
The bit coding used by the encoder chips, for example M3E. from
MOSDESIGN SEMICONDUCTOR, allows
for trinary codes, ie '0','1' and 'X' (OPEN/FLOATING).
However, it seems that only '0' and 'X' is currently used in the
NEXA/PROOVE remotes.
The high level in the ASCII-graphs below denotes the transmission
of the 433 MHz carrier. The low level means no carrier.
'0' bit:
____ ____
| | | |
| | | |
| |____________| |____________
|<-->|<---------->|<-->|<---------->|
T 3T T 3T
'1' bit:
____________ ____________
| | | |
| | | |
| |____| |____
|<---------->|<-->|<---------->|<-->|
3T T 3T T
'X' (OPEN) bit:
____ ____________
| | | |
| | | |
| |____________| |____
|<-->|<---------->|<---------->|<-->|
T 3T 3T T
'STOP/SYNC' bit (Note! Longer than the data bit):
____
| |
| |
| |__________________________...____
|<-->|--------------------------...--->|
T 32T
If the time T is 350us, one data bit time is 8 T; 2.8ms.
Packet format
-------------
Each packet is made up of 12 trinary bits followed by a stop/sync bit.
Packets are sent n*4 times or more.
If we call the 12 data bits b0..b11 where b0 is sent first, they will have the
following meaning:
b0..b3 (4 bits) - House (address)
0000 - A
X000 - B
0X00 - C
XX00 - D
00X0 - E
X0X0 - F
0XX0 - G
XXX0 - H
000X - I
X00X - J
0X0X - K
XX0X - L
00XX - M
X0XX - N
0XXX - O
XXXX - P
b4..b7 - Unit
0000 - 1
X000 - 2
0X00 - 3
XX00 - 4
00X0 - 5
X0X0 - 6
0XX0 - 7
XXX0 - 8
000X - 9
X00X - 10
0X0X - 11
XX0X - 12
00XX - 13
X0XX - 14
0XXX - 15
XXXX - 16
b8..b10 - Unknown
0XX
b11 - Activation
0 - OFF
X - ON
Note! This work is partially inspired by the previous work
done by Per Mellander.
http://www.mellander.org/per/projects/?project=nexa
Revision History
----------------
2006-10-05 Tord Andersson Created
2006-10-13 Tord Andersson Added chip manufacturer (MOSDESIGN)
Re: Bygga egen sändare till Nexa trådlös dimmer
Hej är de någon som vet hur dom självlärande sändare och motagarna fungerar?
BPT-707 fjärrkontroll
PBR-2300 Motagare / strömbrytare
BPT-707 fjärrkontroll
PBR-2300 Motagare / strömbrytare