Magnetkontakt i Homeseer via Arduino.

Besvar
Morten H. Nielsen
Indlæg: 6507
Tilmeldt: 20 mar 2008, 23:02
Geografisk sted: Danmark

Magnetkontakt i Homeseer via Arduino.

Indlæg af Morten H. Nielsen »

Hej.

Jeg har monteret et par magnetkontakter på nogle vinduer. Deres tilstand skal jeg have i Homeseer. Det ser ud til at være ret ligetil. Så her er min version 0.0000001, som virker fint. :-)

Arduino code:

Kode: Vælg alt


const int buttonPin2 = 2;     

int buttonState2 = 0;        

void setup() {
  Serial.begin(9600);
  pinMode(buttonPin2, INPUT);     
}

void loop(){
 
  buttonState2 = digitalRead(buttonPin2);

  if (buttonState2 == HIGH) {     
    
     Serial.println( "<02on>");
  } 
  else {   
   
    Serial.println( "<02of>");
  }
  
    delay(1000);
}



Homeseer åbn COM 12 script, snuppet direkte fra et glemt sted på Homeseer forum:

Kode: Vælg alt


' com port script to send data to a COM port
' this script registers a callback script named com_event.txt
' when data is received on the COM port the com_event.txt script is called and the
' data can be processed there
' this script only needs to be called once as the com port will stay open
sub main()
	dim e

	e=hs.OpenComPort(12,"9600,n,8,1",1,"com_event.txt","main",">")
	hs.writelog "COM SCRIPT","COM open"
	if e <> "" then
		hs.writelog "Error opening com port",e
	end if
	
	' if you need to send data to the com port when the port is open, it can be done here
	hs.SendToComPort 12,"at"+vbcrlf
		
        hs.writelog "COM SCRIPT","Script Complete"
end sub


Homeseer data håndterings script com_event.txt:

Kode: Vælg alt

' when mode is a 1, data is complete string
sub main(data)

	' process the com port data here

	hs.writelog "COM DATA 12",data
		
	if instr(1,data,"<02on") then
		hs.ExecX10 "V10","ON"
	elseif instr(1,data,"<02of") then
		hs.ExecX10 "V10","OFF"

	end if	
		
end sub
Homeseer luk COM 12 script:

Kode: Vælg alt


sub main()
	dim e
	e=hs.CloseComPort(12)	
        hs.writelog "COM12 Close SCRIPT","Script Complete"
end sub

Så følger virtuelt device V10 i Homeseer den fysiske magnets on/off. :-)

Nu skal jeg så til at hitte ud af at sende oplysninger for mange magneter på en smart måde. Jeg regner med tilstanden på alle Arduino pins skal sendes i en lang streng, og den så skal skilles ad i Homeseer. Og jeg skal have besluttet, hvor tit det skal opdatere. Hvert sekund er ret tit, men hvor langt kan der være imellem uden det går ud over funktionaliteten?

Det bliver lidt spændende, hvor mange fejl jeg får ind via kablerne. :-|

Det går kuk i det, hvis man ikke har helt styr på at åbne og lukke COM porten. Så er man nød til at disable/enable den i device manageren.
Mvh
Morten
jenshøj
Indlæg: 107
Tilmeldt: 31 jan 2011, 22:10

Re: Magnetkontakt i Homeseer via Arduino.

Indlæg af jenshøj »

Du kan vel nøjes med at sende status for en afbryder, når den ændrer sig?

Eller laver HS timeout på den serielle forbindelse, hvis den ikke modtager noget i et stykke tid.
Morten H. Nielsen
Indlæg: 6507
Tilmeldt: 20 mar 2008, 23:02
Geografisk sted: Danmark

Re: Magnetkontakt i Homeseer via Arduino.

Indlæg af Morten H. Nielsen »

Det ved jeg faktisk ikke. Det må prøves. :-)

(Tak for du lige drejede mit hovede væk fra det forkeret spor. :-) )
Mvh
Morten
Morten H. Nielsen
Indlæg: 6507
Tilmeldt: 20 mar 2008, 23:02
Geografisk sted: Danmark

Re: Magnetkontakt i Homeseer via Arduino.

Indlæg af Morten H. Nielsen »

I får lige version 0.0000002. :-)

Nu sendes der kun ved ændringer. Homeseer klarer 1½ times stilstand. Længere har jeg ikke nået at teste det endnu.

Jeg har fjernet det første <. Det hørte til en anden tankegang, så hvis det skal bruges med overstående scripts, skal < lige fjernes fra modtage scriptet.

Kode: Vælg alt

  
/* 
MHN 5/10 2012

Opbygning af en node til at modtage magnet kontakter og sende dem til en COM port, hvor Homeseer modtager dem.

*/

const int buttonPin2 = 2;     

int buttonState2 = 0;  

int tilstand2 = 0;

void setup() {
  Serial.begin(9600);
  pinMode(buttonPin2, INPUT);     
}

void loop(){
 
  buttonState2 = digitalRead(buttonPin2);

  if (buttonState2 == HIGH) {     
    if (tilstand2 == 0) {
     Serial.println( "02on>");
     tilstand2 = 1;
    }
  } 
  
   if (buttonState2 == LOW) {     
    if (tilstand2 == 1) {
     Serial.println( "02of>");
     tilstand2 = 0;
    }
  } 
  
 
    delay(1000);
}
Mvh
Morten
Morten H. Nielsen
Indlæg: 6507
Tilmeldt: 20 mar 2008, 23:02
Geografisk sted: Danmark

Re: Magnetkontakt i Homeseer via Arduino.

Indlæg af Morten H. Nielsen »

Følgende Values-status/ Graphic Pairs opsætning i Homeseer giver et mere brugbart Virtuelt device:
device values-status_lille.jpg
device values-status_lille.jpg (62.95 KiB) Vist 10942 gange
Mvh
Morten
Morten H. Nielsen
Indlæg: 6507
Tilmeldt: 20 mar 2008, 23:02
Geografisk sted: Danmark

Re: Magnetkontakt i Homeseer via Arduino.

Indlæg af Morten H. Nielsen »

Jeg er forresten i gang med at beta teste Greigs (enigmatheatre) Arduino script. http://board.homeseer.com/showthread.php?t=145502

Det ser rigtig godt ud.
Klippebord-3.png
Klippebord-3.png (100.6 KiB) Vist 10825 gange
Så jeg har droppet tanken om selv at fumle noget sammen. :-)
Mvh
Morten
Brugeravatar
Bri_Jac
Indlæg: 1116
Tilmeldt: 05 nov 2008, 21:48
Geografisk sted: Bunkeflostrand

Re: Magnetkontakt i Homeseer via Arduino.

Indlæg af Bri_Jac »

Off-topic
Kiggede på linket i denne tråd og MHN er det dig Morten?
Kan så lige kommentere at DS18B20 og DHT22 IKKE benytter samme protokol til Arduino,de er 2 forskellige biblioteker der anvendes.

Ds18B20 har en 64bit adresse, det har en DHT22 ikke,
Så derfor benyt 2 forskellige pins på din Arduino

[EDIT]
Mit badeværelse www.ohotbar.com kører med en DHT22 sensor.
Jeg har lavet en DS18B20 sensor tilkoblet et relæ der tænder for nogle varmekabler, så mine vandrør ikke fryser.
Jeg har dog ikke prøvet at have både en DHT22 samt DS18B20 på samme Arduino, men jeg kan ikke forestille mig nogle problemer, bare der benyttes hver sin pin på Arduino hhv DHT22 og DS18B20
[/EDIT]
Morten H. Nielsen
Indlæg: 6507
Tilmeldt: 20 mar 2008, 23:02
Geografisk sted: Danmark

Re: Magnetkontakt i Homeseer via Arduino.

Indlæg af Morten H. Nielsen »

Jep jeg hedder mhn på de fleste fora. :-)

Greig er opmærksom på, der er forskel. Men han har en lang to-do liste.

I øjeblikket er der en god stabil grundfunktion. det er et rigtigt godt udgangspunkt. :-)

Scriptet fortæller mig i øjeblikket om vinduet i bryggerset er åben/lukket med grafik på HS Touch.
Mvh
Morten
Besvar