nodo-domotica.nl

Draadloze temperatuur zender

Hier alles over de hardware kant van de Nodo

Draadloze temperatuur zender

Berichtdoor Bessie » 21 jul 2012, 13:46

Ik ben nu al een tijdje bezig om een temperatuur sensor goed werkend te krijgen op mijn Nodo. Ik heb verschillende sensoren gebruikt (LM35, LM335 ect.) maar alle krijg ik eigenlijk niet of slecht werkend. Ik zat op internet een beetje te zoeken en zag dat je voor niet teveel geld (10-20 euro) al een draadloze temperatuur zender (433 mhz) kan kopen. Zou het niet handig zijn om de nodo geschikt te maken voor een of meerdere draadloze temperatuur zenders. Dan kan je ook heel eenvoudig de temperatuur meten in verschillende kamers in mijn huis.
Bessie
 
Berichten: 36
Geregistreerd: 15 okt 2011, 12:09

Re: Draadloze temperatuur zender

Berichtdoor manjh » 21 jul 2012, 14:23

Klopt, dat zou mooi zijn. Er zijn alleen wat bezwaren....
Ten eerste zijn er vele merken te koop, en ze gebruiken verschillende protocollen. Een nachtmerrie om alles te supporten.
Ten tweede zijn die protocollen niet allemaal "open". Zo heb ik zelf een Oregon Scientific sensor buiten hangen. De bijbehorende ontvanger snapt hem prima, maar ik kan geen chocola maken van de hex codes die binnenkomen. Ik heb het een poosje bijgehouden: de hex code opgeslagen samen met de gemeten temperatuur. Kon er geen lijn in ontdekken.
Maar wanhoop niet: we zijn aan het kijken of een klein printje met temperatuur en lichtmeting haalbaar is. Technisch is dat prima mogelijk natuurlijk, maar ook verder.
Hans
manjh
 
Berichten: 1172
Geregistreerd: 29 aug 2011, 14:39

Re: Draadloze temperatuur zender

Berichtdoor Bessie » 21 jul 2012, 20:29

Dat zou ook een mooie oplossing zijn, Ik ben benieuwd. Alle oplossingen zijn welkom

Het is natuurlijk altijd handig om bestaande aparattuur te gebruiken, maar dan moet het inderdaad wel bruikbaar zijn. Ook al zou de nodo maar een merk\type ondersteunen, dan weet je welke je moet aanschaffen. mij maakt het merk ook niet zoveel uit, als die maar ondersteunt wordt. Ik heb op internet al zitten rond zoeken naar vergelijkbare arduino functies. Ik heb al twee handleidingen gevonden welke het protocol hebben 'gekraakt' en werkbaar hebben gekregen op een arduino. voor de merken 'La Crosse' & 'FUNK'. wellicht dat ik in mijn vakantie een poging ga wagen om het via deze handleiding werkend te krijgen op een arduino.
Bessie
 
Berichten: 36
Geregistreerd: 15 okt 2011, 12:09

Re: Draadloze temperatuur zender

Berichtdoor Bessie » 21 jul 2012, 21:23

Zou dit bruikbare code kunnen zijn?

http://www.f6fbb.org/domo/sensors/tx3_th.php
Bessie
 
Berichten: 36
Geregistreerd: 15 okt 2011, 12:09

Re: Draadloze temperatuur zender

Berichtdoor proza » 21 jul 2012, 22:35

Dat is een begin, uitwerken die handel.
Mijn Nodo's - Jura Impressa F50 and a Starbucks MUG makes my day complete
Gebruikers-avatar
proza
 
Berichten: 420
Geregistreerd: 03 nov 2011, 22:44

Re: Draadloze temperatuur zender

Berichtdoor mvdbro » 22 jul 2012, 10:31

Ik werk al enkele maanden zonder problemen met remote Oregon Scientific sensoren (1 binnen en 1 buiten) van het tyoe THN132N. Het protocol is heel goed beschreven op internet. Temperaturen staan bij mij nu ook in de Nodo webapp. Code voor de Nodo r386:

unsigned long Oregon_Decode(void)
{
int y = 1;
int c = 1;
int startpulses = 0;
unsigned long rfbit = 1;
unsigned long id = 0;
unsigned long channel = 0;
unsigned long rc = 0;
unsigned long flags = 0;
unsigned long data = 0;
unsigned long sign = 0;
unsigned long checksum = 0;
byte checksumcalc = 0;
byte digit1, digit2, digit3;
byte var;
int datavalue = 0;

// valid messages are between 196-206 pulses
if ((RawSignal.Number < 196) | (RawSignal.Number > 206)) return 0L;

// should start with minimum of 30 long pulses
for(byte x=1;x<=32;x++) if(RawSignal.Pulses[x] > 500) startpulses++;
if (startpulses < 30) return 0L;

for(byte x=1;x<=RawSignal.Number;x++)
{
if(RawSignal.Pulses[x] < 500)
{
rfbit = rfbit ^ 1;
x++;
}
if (y%2 == 1)
{
if ((c>=21) && (c<=36)) id = (id >> 1) | (rfbit << 15);
if ((c>=37) && (c<=40)) channel = (channel >> 1) | (rfbit << 3);
if ((c>=41) && (c<=48)) rc = (rc >> 1) | (rfbit << 7);
if ((c>=49) && (c<=52)) flags = (flags >> 1) | (rfbit << 3);
if ((c>=53) && (c<=64)) data = (data >> 1) | (rfbit << 11);
if ((c>=65) && (c<=68)) sign = (sign >> 1) | (rfbit << 3);
if ((c>=69) && (c<=76)) checksum = (checksum >> 1) | (rfbit << 7);
c++;
}
y++;
}

digit3 = data & 0xf;
digit2 = (data >> 4) & 0xf;
digit1 = (data >> 8) & 0xf;
checksumcalc = ((id & 0xf000) >> 12) + ((id & 0x0f00) >> 8) + ((id & 0x00f0) >> 4) + (id & 0x000f) + ((rc & 0xf0) >> 4) + (rc & 0x0f) + channel + flags + digit1 + digit2 + digit3 + sign;

if (checksum != checksumcalc)
{
return 0L;
}

// if valid type (1230), update user variable and process event
if (id == 1230)
{
var = 10 + channel;
if (var == 14) var = 13;
if ((var >= 11) & (var <= 13))
{
datavalue = ((1000 * digit1) + (100 * digit2) + (10 * digit3));
if ((sign & 0x8) == 8) datavalue = -1 * datavalue;
UserVar[var-1] = datavalue;
ProcessEvent(AnalogInt2event(UserVar[var-1], var, CMD_VARIABLE_EVENT), VALUE_DIRECTION_INTERNAL, VALUE_SOURCE_VARIABLE, 0, 0);
}
}

// send result to terminal as a string 'RawSignal=<id>,<channel>,<value>
sprintf(TempString,"%s","RawSignal=");
strcat(TempString,int2str(id));
strcat(TempString,",");
strcat(TempString,int2str(channel));
strcat(TempString,",");
if ((sign & 0x8) == 8) strcat(TempString,"-");
strcat(TempString,int2str(digit1));
strcat(TempString,int2str(digit2));
strcat(TempString,".");
strcat(TempString,int2str(digit3));
PrintTerminal(TempString);

lcdprint(TempString);

return 1L;

}


Sensoren van Alecto, Hama, Auriol, Ventus (gebruiken waarschijnlijk allemaal hetzelfde protocol) zijn ook goed gedocumenteerd, echter heb ik die niet, dus kan ook niet testen. Ik heb wel al eens een stukje code gemaakt om de signalen te herkennen. (74 pulsen, 36 bits). Hieruit komt dan een 32 bit code waaruit we alleen nog maar de temperatuur en humidity uit hoeven te halen. De weerstations zijn volgens mij ook relatief eenvoudig uit te lezen, maar die heb ik ook niet...

Waarom ik hiervoor kies en niet een dedicated nodoslave oid:

1) Werkt maandenlang op batterij, de Nodo is daar standaard niet voor geschikt, vereist 'low power mode en wake interrupts e.d.)

2) Goedkoop, 19,95 alles compleet. (je krijgt er zelfs een ontvanger bij, maar die gebruik ik niet)

3) Voorzien van net kastje, geschikt om buiten te monteren, spatwaterdicht

4) Geen gaten in je kozijn boren voor een losse buitensensor, de gehele unit hangt buiten

5) Geen calibratie nodig van de sensor.

Er is ook wel een nadeel, ze zenden ong elke 35 seconden. Ik vindt dat nogal overdreven, maar dat is dus niet aan te passen.

gr
Martinus
mvdbro
 
Berichten: 1092
Geregistreerd: 21 okt 2011, 12:06

Re: Draadloze temperatuur zender

Berichtdoor proza » 22 jul 2012, 11:00

Gaaf. Misschien het overwegen waard zoiets aan te kopen, alhoewel ik een compleet weerstation van Alecto heb staan, de ws3500. Daar zou ik het mee willen doen. Alleen kan ik zelf niet programmeren :cry:

Maar dit heb ik al wel gevonden, het geheel beschreven op de volgende PDF
Mijn Nodo's - Jura Impressa F50 and a Starbucks MUG makes my day complete
Gebruikers-avatar
proza
 
Berichten: 420
Geregistreerd: 03 nov 2011, 22:44

Re: Draadloze temperatuur zender

Berichtdoor mvdbro » 22 jul 2012, 21:05

proza:

Misschien zou je deze code eens kunnen testen. In het tabblad UserPlugin vervang je de functie UserPlugin_Receive door onderstaande code:

// begin Nodo Plugin
boolean UserPlugin_Receive(unsigned long Event)
{

unsigned long bitstream=0;
byte nibble1=0;
byte nibble2=0;
byte nibble3=0;
byte nibble4=0;
byte nibble5=0;
byte nibble6=0;
byte nibble7=0;
byte nibble8=0;
byte checksum=0;
long temperature;

if (RawSignal.Number != 74) return 0L;

for(byte x=2; x<=64; x=x+2)
{
if(RawSignal.Pulses[x] > 0xA00) bitstream = ((bitstream >> 1) |(0x1L << 31)); else bitstream = (bitstream >> 1);
}

for(byte x=66; x<=72; x=x+2)
{
if(RawSignal.Pulses[x] > 0xA00) checksum = ((checksum >> 1) |(0x1L << 3)); else checksum = (checksum >> 1);
}

nibble1 = (bitstream >> 28) & 0xf;
nibble2 = (bitstream >> 24) & 0xf;
nibble3 = (bitstream >> 20) & 0xf;
nibble4 = (bitstream >> 16) & 0xf;
nibble5 = (bitstream >> 12) & 0xf;
nibble6 = (bitstream >> 8) & 0xf;
nibble7 = (bitstream >> 4) & 0xf;
nibble8 = bitstream & 0xf;
temperature = (bitstream >> 8) & 0xf;

Serial.print("Alecto Raw data:");
Serial.println(bitstream);
Serial.print("Alecto Checksum:");
Serial.println(checksum);
Serial.print("Alecto Temperature:");
Serial.println(temperature);

// funktie kan op twee manieren worden verlaten:
// true = Nodo gaat verder met verwerking van het event
// false = Event wordt niet verder behandeld.
return true;
}
// einde plugin


Ik kan dit zelf niet testen, ik kan alleen checken dat de code foutloos door de compiler komt. Wie weet komt er iets bruikbaars uit.

gr
Martinus
mvdbro
 
Berichten: 1092
Geregistreerd: 21 okt 2011, 12:06

Re: Draadloze temperatuur zender

Berichtdoor proza » 23 jul 2012, 07:46

mvdbro schreef:proza:

Misschien zou je deze code eens kunnen testen. In het tabblad UserPlugin vervang je de functie UserPlugin_Receive door onderstaande code:

Ik kan dit zelf niet testen, ik kan alleen checken dat de code foutloos door de compiler komt. Wie weet komt er iets bruikbaars uit.

gr
Martinus


Zelf geschreven? Top ik zal vanavond eens kijken, ik hou je op de hoogte.
Mijn Nodo's - Jura Impressa F50 and a Starbucks MUG makes my day complete
Gebruikers-avatar
proza
 
Berichten: 420
Geregistreerd: 03 nov 2011, 22:44

Re: Draadloze temperatuur zender

Berichtdoor mvdbro » 23 jul 2012, 17:39

Update:

De code was oorspronkelijk op een andere plaats gebruikt, daarom moet een regel worden aangepast:

Zoek in de code naar de regel:

if (RawSignal.Number != 74) return 0L;

en vervang deze door:

if (RawSignal.Number != 74) return true;

anders worden andere events niet meer afgehandeld.
mvdbro
 
Berichten: 1092
Geregistreerd: 21 okt 2011, 12:06

Volgende

Keer terug naar Nodo Hardware

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers. en 1 gast