From: Pilfos <pi...@gm...> - 2007-03-16 22:41:22
|
Hello, I'm starting to study MisterHouse "architecture", and before going deep I would like to know If it will be easy to develop a new serial protocol. I have a "custom" hardware, IHC from Denmark. This hardware has it's own protocol that works with RS485, but I could communicate with a RS232/RS485 converter. Basically, I can send & receive hex numbers in ascii. For example, each message that I send or receive, start with 0x02. Each message ends with 0x17. After the 0x17 always a CRC appears, that is the sum of all the numbers of the message. For example, to get the status of all the outputs of the system: a) IHC is sending this commmand: 02 1C 30 17 65 ( The system is ready) b) After that, the PC sends: 02 12 82 17 AD (ask for Getting the output status, lights) c) IHC answers: 02 1C 83 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 17 B9 (Return the outputs on) There is 1 light ON. There are commands to switch ON & switch OFF outputs, requests the inputs (buttons pressed). As you can see the protocol is easy to understand. Is there any source code with sending & receiving ascii through serial, with events, which I could modify easily under Misterhouse? Thanks in advance! -- View this message in context: http://www.nabble.com/Programming-a-new-serial-protocol-tf3417211.html#a9523779 Sent from the Misterhouse - User mailing list archive at Nabble.com. |
From: Jason S. <ja...@sh...> - 2007-03-17 21:35:21
|
Look at the RCS_xxxx.pm files in the /lib folder for examples. These thermostats communicate simply with 232 and 485. -J On Fri, 16 Mar 2007, Pilfos wrote: > > Hello, > > I'm starting to study MisterHouse "architecture", and before going deep I > would like to know If it will be easy to develop a new serial protocol. > > I have a "custom" hardware, IHC from Denmark. This hardware has it's own > protocol that works with RS485, but I could communicate with a RS232/RS485 > converter. Basically, I can send & receive hex numbers in ascii. For > example, each message that I send or receive, start with 0x02. Each message > ends with 0x17. After the 0x17 always a CRC appears, that is the sum of all > the numbers of the message. For example, to get the status of all the > outputs of the system: > > a) IHC is sending this commmand: 02 1C 30 17 65 ( The system is ready) > > b) After that, the PC sends: 02 12 82 17 AD (ask for Getting the output > status, lights) > > c) IHC answers: 02 1C 83 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 17 > B9 (Return the outputs on) > > There is 1 light ON. > > There are commands to switch ON & switch OFF outputs, requests the inputs > (buttons pressed). > > As you can see the protocol is easy to understand. Is there any source code > with sending & receiving ascii through serial, with events, which I could > modify easily under Misterhouse? > > Thanks in advance! > > |
From: Pilfos <pi...@gm...> - 2007-05-20 14:53:15
|
I'm starting with my first tests. I'm only checking the data that comes from my device but I'm receving a lot of "Framing Error detected". The data I receive is correct. Here is the code I'm using: if ($Startup||$Reload) { $serial_out = new Serial_Item(undef, undef, 'serial10'); print_log "It is $Time_Now on $Date_Now_Speakable."; print_log "Inici SIMON"; } if (my $data = said $serial_out) { for (my $i = 0; $i < length($data); ++$i) { my $in = sprintf("%x",ord(substr($data,$i,1))); print "$in\n"; } } The device is defined in my mh.private.ini with: serial10_port = COM1 serial10_baudrate = 19200 serial10_datatype=raw serial10_handshake=dtr Here is a sample of data I'm receiving: 2 1c 30 17 65 2 1b 30 17 64 Framing Error detected Framing Error detected Framing Error detected Framing Error detected Framing Error detected 2 9 30 17 52 2 1c 30 17 65 2 1b 30 17 64 2 a 6a 36 0 ff 17 c2 Framing Error detected 2 1c 30 17 65 Framing Error detected Framing Error detected 2 9 30 17 52 2 1c 30 17 65 Framing Error detected Framing Error detected 2 9 30 17 52 Each "message" from device starts with 0x02, and ends with 0x17 + CRC byte e.g. 2, 1c, 30, 17, 65 May be I need some "pause" ? Anyway, Is there any sample/generic serial interface module (.pm) and it's test code I can follow? Only with "new", "send", and "receive" methods? The RCSs*.* sample is a liitle "big" for me. Thanks! -- View this message in context: http://www.nabble.com/Programming-a-new-serial-protocol-tf3417211.html#a10706512 Sent from the Misterhouse - User mailing list archive at Nabble.com. |
From: Pilfos <pi...@gm...> - 2007-05-21 08:04:48
|
Sorry to ask again, but my knowledge of Perl is low and MisterHouse is a big world for me at this moment. :-/ As the MH loop can be more quickly than the data received from the serial device, I'm thinking about some queue to store the bytes I receive, and "decode" the messages from this queue (wait for the end byte of message). Is there any sample or interface already developed that can help me a little in this approach? Thanks a lot again. :) -- View this message in context: http://www.nabble.com/Programming-a-new-serial-protocol-tf3417211.html#a10714610 Sent from the Misterhouse - User mailing list archive at Nabble.com. |
From: Joel D. <jr...@io...> - 2007-05-21 13:15:17
|
I don't think you need to add a delay. I used &main::check_for_generic_serial_data() in the Omnistat driver and as I understand it, it doesn't return until it's got data. Take a look in Omnistat.pm. Hope this helps. Joel -- Joel Davidson Austin, TX On Mon, 21 May 2007, it would appear that Pilfos wrote: > > Sorry to ask again, but my knowledge of Perl is low and MisterHouse is a big > world for me at this moment. :-/ > > As the MH loop can be more quickly than the data received from the serial > device, I'm thinking about some queue to store the bytes I receive, and > "decode" the messages from this queue (wait for the end byte of message). Is > there any sample or interface already developed that can help me a little in > this approach? > > Thanks a lot again. :) > |
From: Pilfos <pi...@gm...> - 2007-05-21 14:32:29
|
I don't know how check_for_generic_serial_data() exactly works, but my device is continuously sending messages, and NO CR/LF appears between them. I think I'll need some kind of queue to store the bytes I receive, and process them each time I detect a final message byte. Let's see if check_for_generic_serial_data() is good for me. Thanks! :) Joel Davidson wrote: > > I don't think you need to add a delay. I used > &main::check_for_generic_serial_data() in the Omnistat driver and as I > understand it, it doesn't return until it's got data. Take a look in > Omnistat.pm. Hope this helps. > > Joel > -- > Joel Davidson > Austin, TX > > > -- View this message in context: http://www.nabble.com/Programming-a-new-serial-protocol-tf3417211.html#a10720017 Sent from the Misterhouse - User mailing list archive at Nabble.com. |
From: Joel D. <jr...@io...> - 2007-05-21 14:40:55
|
Do you need to process all of the messages, or just the latest one? You may need to something special to avoid overflowing a receive buffer in check_for_generic_serial_data. Perhaps you can use a circular buffer that is big enough to hold a couple of messages and just search through that for the start of a message when you need to process one. On Mon, 21 May 2007, it would appear that Pilfos wrote: > > I don't know how check_for_generic_serial_data() exactly works, but my device > is continuously sending messages, and NO CR/LF appears between them. > I think I'll need some kind of queue to store the bytes I receive, and > process them each time I detect a final message byte. > > Let's see if check_for_generic_serial_data() is good for me. > > Thanks! :) > > > Joel Davidson wrote: >> >> I don't think you need to add a delay. I used >> &main::check_for_generic_serial_data() in the Omnistat driver and as I >> understand it, it doesn't return until it's got data. Take a look in >> Omnistat.pm. Hope this helps. |
From: Pilfos <pi...@gm...> - 2007-05-21 15:06:18
|
Yes, I think that your suggestion of a "circular buffer" is good. So, now, not only I need to know how to put the data from check_for_generic_serial_data into a queue buffer, but also how to make it circular.. Thanks!! :) Joel Davidson wrote: > > Do you need to process all of the messages, or just the latest one? You > may need to something special to avoid overflowing a receive buffer in > check_for_generic_serial_data. Perhaps you can use a circular buffer that > is big enough to hold a couple of messages and just search through that > for the start of a message when you need to process one. > -- View this message in context: http://www.nabble.com/Programming-a-new-serial-protocol-tf3417211.html#a10720582 Sent from the Misterhouse - User mailing list archive at Nabble.com. |
From: Pilfos <pi...@gm...> - 2007-05-22 08:34:07
|
I tried to use the DSC5401.pm module as starting point for "develop" the interface for my device. I only wanted to use the new, init, startup & check_for_data methods. I tested the modified .pm module with a "small" code in a custom.pl if ($Startup||$Reload) { use DSC5401; $DSC = new DSC5401; } but only the new method is running. the startup method is not called at startup (as expected), so neither check_for_data (from loop), nor init are been called. What I'm doing wrong? I've added some &main::print_log("bla bla bla bla"); to confirm it... and also I started mh with the -debug serial, but I can't see anything different... Thanks! PD: Here is some info about the home automation device I'm trying to connect to MisterHouse: http://www.schneider-electric.nl/pdf/IHCLexCom/IHCTechInfo_EngSE.pdf -- View this message in context: http://www.nabble.com/Programming-a-new-serial-protocol-tf3417211.html#a10733686 Sent from the Misterhouse - User mailing list archive at Nabble.com. |
From: Pilfos <pi...@gm...> - 2007-05-23 13:20:32
|
After "recoding" the MisterHouse module, I can recevie serial data without errors and using check_for_generic_serial_data as recommended by Joel Davidson. Thanks! Now, when I try to use the send_cmd method to write a raw of bytes to the IHC system, it seems as they are not "written" to the serial device. I'm using "Bill Serial Monitor" to see what is happening with the serial port in the pc. I can see the same data received from both the MisterHouse module and Bill Serial Monitor. I can also send "manually" from Bill Serial Monitor the data I try to send from my MisterHouse and It works correctly (the IHC system answers as expected). How can I check If MisterHouse is sending the data or not to the RS232 ?? Maybe I need to encode data in another way? Below is the code I'm using. First the IHC-test.pl, and second, the IHC.pm library. Thanks! # Category=Home Automation #@ Starting IHC System and sending input request # $Date: 2007-05-22 01:01:01 +0100 (Tue, 22 May 2007) $ if ($Startup||$Reload) { use IHC; # SimonVIS startup $IHC = new IHC; } #if ($New_Second and !($Second % 5)) { if ($New_Msecond_500) { $IHC->send_cmd("02128217AD"); $IHC->send_cmd("02128617B1"); } ------------------------ ############################################################################## # IHC.pm - This is a Misterhouse module for handling input from the # # IHC system # # # Configuration parameters are; # # IHC_serial_port = COMx # The serial port the IHC system is on # # = /dev/sttyx # # IHC_baudrate = [1200, 4800, 9600, 19200] # The baudrate of the port # # debug = IHC # Will turn dbuging information on if present # # # # The module will log everything recieved to; # # {data_dir}/logs/IHCYYYY_MM.log # # where YYYY is the year amd MM is the month # # # # This module is based on the DSC_Alarm module writen by Danal Estes # # # ############################################################################## # 20070522 - Pilfos - Creation day # ############################################################################## use strict; package IHC; @IHC::ISA = ('Generic_Item'); my @Zone_Objects; # Holds a list of all the zone objects to try match the to inputs my @timer_refs; # Hold the object instances for when timers are operating my $FirstCall = 0; # Used to indicate to the serial_startup, the first time it is called. my $Buffer; # # Create serial port(s) according to mh.ini # Register hooks if any ports created. # sub serial_startup { my $port = $::config_parms{"IHC_serial_port"}; my $speed = $::config_parms{"IHC_baudrate"}; if (&::serial_port_create("IHC", $port, $speed, 'dtr')) { init($::Serial_Ports{"IHC"}{object}); ::print_log "\nIHC.pm initialzed IHC on hardware $port at $speed baud" if $main::Debug{IHC}; } if ($FirstCall == 0) { # Add hooks on first call only $FirstCall = 1; &::MainLoop_pre_add_hook( \&IHC::UserCodePreHook, 1); $::Year_Month_Day = &::time_date_stamp(18,time); # Not yet set when we init. &::logit("$::config_parms{data_dir}/logs/IHC.$::Year_Month_Day.log", "IHC.pm Initialized"); ::print_log "IHC.pm adding hooks" if $main::Debug{IHC}; } } sub init { my ($serial_port) = @_; $serial_port->error_msg(0); $serial_port->parity_enable(0); $serial_port->databits(8); $serial_port->parity("none"); $serial_port->stopbits(1); $serial_port->dtr_active(0); $serial_port->rts_active(0); select (undef, undef, undef, .100); # Sleep a bit } sub UserCodePreHook { if($::New_Day ) # Move the log file name if it's a new day { $::Year_Month_Day = &::time_date_stamp(18,time); # Not yet set when we init. } if($::New_Msecond_100) { &::check_for_generic_serial_data('IHC') if $::Serial_Ports{IHC}{object}; my $data = $::Serial_Ports{IHC}{data_record}; #$::Serial_Ports{IHC}{data_record} = ''; if( $data ) { $Buffer .= $data; # Hey, we got something, So we had best do the logging bit &::logit("$::config_parms{data_dir}/logs/IHC.$::Year_Month_Day.log", "$data"); ::print_log "IHC.pm, Recieved data = $data, $::Loop_Count" if $main::Debug{IHC}; ::print_log "IHC.pm, Recieved an unknow line = $data"; for (my $i = 0; $i < length($data); ++$i) # Start with $i = 1 # Do it while $i < 10 # Increment $i before repeating { my $in = sprintf("%x",ord(substr($data,$i,1))); print "$in\n"; } } } } # # End of system functions; start of functions called by user scripts. # sub send_cmd{ my ($class, $string) = @_; my ($byte, $cmd); $cmd = ''; #$cmd= pack("C*", 0x02, 0x12, 0x82, 0x17, 0xAD); #$cmd= pack("C*", 0x02, 0x12, 0x86, 0x17, 0xB1); #$cmd= pack('H*',"02128617B1"); #$cmd= pack('H*',"02128217AD"); $cmd= pack('H*',$string); print "$::Time_Date: IHC->send_cmd string=$string\n" unless $main::config_parms{no_log} =~/IHC/ ; print "$::Time_Date: IHC->send_cmd cmd=$cmd\n" unless $main::config_parms{no_log} =~/IHC/ ; $main::Serial_Ports{IHC}{object}->write($cmd); } 1; -- View this message in context: http://www.nabble.com/Programming-a-new-serial-protocol-tf3417211.html#a10763779 Sent from the Misterhouse - User mailing list archive at Nabble.com. |
From: Joel D. <jr...@io...> - 2007-05-23 13:39:25
|
It looks ok to me, but then I'm no perl whiz. More of a hack. The only difference I can see it that when you create the port you're setting port, speed and handshake mode. In my modules I set port, speed, parity (to 'none'), and 'raw'. Offhand I don't remember if serial_port_create is position dependent on arguments, but you may want to check that. Does the log show that the data is getting packed correctly? Have you tried doing an unpack(H*, $cmd) on the transmitted data to verify? Joel On Wed, 23 May 2007, it would appear that Pilfos wrote: > > After "recoding" the MisterHouse module, I can recevie serial data without > errors and using check_for_generic_serial_data as recommended by Joel > Davidson. Thanks! > > Now, when I try to use the send_cmd method to write a raw of bytes to the > IHC system, it seems as they are not "written" to the serial device. > > I'm using "Bill Serial Monitor" to see what is happening with the serial > port in the pc. I can see the same data received from both the MisterHouse > module and Bill Serial Monitor. I can also send "manually" from Bill Serial > Monitor the data I try to send from my MisterHouse and It works correctly > (the IHC system answers as expected). > > How can I check If MisterHouse is sending the data or not to the RS232 ?? > Maybe I need to encode data in another way? > > Below is the code I'm using. First the IHC-test.pl, and second, the IHC.pm > library. > > Thanks! > > > > > # Category=Home Automation > #@ Starting IHC System and sending input request > # $Date: 2007-05-22 01:01:01 +0100 (Tue, 22 May 2007) $ > > if ($Startup||$Reload) > { > use IHC; > # SimonVIS startup > $IHC = new IHC; > > } > > #if ($New_Second and !($Second % 5)) { > if ($New_Msecond_500) { > > $IHC->send_cmd("02128217AD"); > $IHC->send_cmd("02128617B1"); > > } > > ------------------------ > > ############################################################################## > # IHC.pm - This is a Misterhouse module for handling input from the # > # IHC system > # # > # Configuration parameters are; > # > # IHC_serial_port = COMx # The serial port the IHC system is on # > # = /dev/sttyx > # > # IHC_baudrate = [1200, 4800, 9600, 19200] # The baudrate of the port > # > # debug = IHC # Will turn dbuging information on if present # > # > # > # The module will log everything recieved to; > # > # {data_dir}/logs/IHCYYYY_MM.log # > # where YYYY is the year amd MM is the month > # > # > # > # This module is based on the DSC_Alarm module writen by Danal Estes > # > # > # > ############################################################################## > # 20070522 - Pilfos - Creation day # > ############################################################################## > > use strict; > > package IHC; > > @IHC::ISA = ('Generic_Item'); > > my @Zone_Objects; # Holds a list of all the zone objects to try match the > to inputs > my @timer_refs; # Hold the object instances for when timers are > operating > my $FirstCall = 0; # Used to indicate to the serial_startup, the first > time it is called. > my $Buffer; > > # > # Create serial port(s) according to mh.ini > # Register hooks if any ports created. > # > sub serial_startup > { > my $port = $::config_parms{"IHC_serial_port"}; > my $speed = $::config_parms{"IHC_baudrate"}; > if (&::serial_port_create("IHC", $port, $speed, 'dtr')) > { > init($::Serial_Ports{"IHC"}{object}); > ::print_log "\nIHC.pm initialzed IHC on hardware $port at $speed baud" > if $main::Debug{IHC}; > } > > if ($FirstCall == 0) > { # Add hooks on first call only > $FirstCall = 1; > &::MainLoop_pre_add_hook( \&IHC::UserCodePreHook, 1); > $::Year_Month_Day = &::time_date_stamp(18,time); # Not yet set when > we init. > &::logit("$::config_parms{data_dir}/logs/IHC.$::Year_Month_Day.log", > "IHC.pm Initialized"); > ::print_log "IHC.pm adding hooks" if $main::Debug{IHC}; > } > } > > sub init > { > my ($serial_port) = @_; > $serial_port->error_msg(0); > > $serial_port->parity_enable(0); > $serial_port->databits(8); > $serial_port->parity("none"); > $serial_port->stopbits(1); > > $serial_port->dtr_active(0); > $serial_port->rts_active(0); > select (undef, undef, undef, .100); # Sleep a bit > } > > sub UserCodePreHook > { > > if($::New_Day ) # Move the log file name if it's a new day > { > $::Year_Month_Day = &::time_date_stamp(18,time); # Not yet set when > we init. > } > > if($::New_Msecond_100) > { > &::check_for_generic_serial_data('IHC') if > $::Serial_Ports{IHC}{object}; > my $data = $::Serial_Ports{IHC}{data_record}; > #$::Serial_Ports{IHC}{data_record} = ''; > > if( $data ) > { > $Buffer .= $data; > # Hey, we got something, So we had best do the logging bit > &::logit("$::config_parms{data_dir}/logs/IHC.$::Year_Month_Day.log", > "$data"); > ::print_log "IHC.pm, Recieved data = $data, $::Loop_Count" if > $main::Debug{IHC}; > > ::print_log "IHC.pm, Recieved an unknow line = $data"; > for (my $i = 0; $i < length($data); ++$i) # Start with $i = 1 > # Do it while $i < 10 > # Increment $i before repeating > { > my $in = sprintf("%x",ord(substr($data,$i,1))); > print "$in\n"; > } > } > > } > > } > > # > # End of system functions; start of functions called by user scripts. > # > > sub send_cmd{ > my ($class, $string) = @_; > my ($byte, $cmd); > $cmd = ''; > #$cmd= pack("C*", 0x02, 0x12, 0x82, 0x17, 0xAD); > #$cmd= pack("C*", 0x02, 0x12, 0x86, 0x17, 0xB1); > #$cmd= pack('H*',"02128617B1"); > #$cmd= pack('H*',"02128217AD"); > $cmd= pack('H*',$string); > print "$::Time_Date: IHC->send_cmd string=$string\n" unless > $main::config_parms{no_log} =~/IHC/ ; > print "$::Time_Date: IHC->send_cmd cmd=$cmd\n" unless > $main::config_parms{no_log} =~/IHC/ ; > > $main::Serial_Ports{IHC}{object}->write($cmd); > > } > > 1; > |
From: Pilfos <pi...@gm...> - 2007-05-23 15:06:43
|
I'll try with if (&::serial_port_create("IHC", $port, $speed, 'none', 'raw')) and unpack to check the data. Thanks! Joel Davidson wrote: > > It looks ok to me, but then I'm no perl whiz. More of a hack. > The only difference I can see it that when you create the port you're > setting port, speed and handshake mode. In my modules I set port, speed, > parity (to 'none'), and 'raw'. Offhand I don't remember if > serial_port_create is position dependent on arguments, but you may want > to check that. > > Does the log show that the data is getting packed correctly? Have you > tried doing an unpack(H*, $cmd) on the transmitted data to verify? > > Joel > -- View this message in context: http://www.nabble.com/Programming-a-new-serial-protocol-tf3417211.html#a10765826 Sent from the Misterhouse - User mailing list archive at Nabble.com. |
From: Joel D. <jr...@io...> - 2007-05-23 15:33:48
|
Does the IHC require hardware handshaking? If so, then you might need the 'dts' in there. Joel On Wed, 23 May 2007, it would appear that Pilfos wrote: > > I'll try with if (&::serial_port_create("IHC", $port, $speed, 'none', 'raw')) > and unpack to check the data. > > Thanks! > > > Joel Davidson wrote: >> >> It looks ok to me, but then I'm no perl whiz. More of a hack. >> The only difference I can see it that when you create the port you're >> setting port, speed and handshake mode. In my modules I set port, speed, >> parity (to 'none'), and 'raw'. Offhand I don't remember if >> serial_port_create is position dependent on arguments, but you may want >> to check that. >> >> Does the log show that the data is getting packed correctly? Have you >> tried doing an unpack(H*, $cmd) on the transmitted data to verify? >> >> Joel >> |
From: Pilfos <pi...@gm...> - 2007-05-23 22:24:39
|
Joel, Finally I've gotten it to work. The serial port was configured this way: $serial_port->error_msg(0); $serial_port->parity_enable(0); $serial_port->databits(8); $serial_port->parity("none"); $serial_port->handshake('none'); $serial_port->stopbits(1); $serial_port->datatype('raw'); $serial_port->dtr_active(0); $serial_port->rts_active(0); $serial_port->write_settings; Now, I can see how the IHC system answers when I ask for lights on. The next step is to "well" decode the differents messages I receive, and to code the messages to turn on and off the lights... And then, a webpage under MisterHouse so I can control the IHC from internet... And then... 8-) Thanks! -- View this message in context: http://www.nabble.com/Programming-a-new-serial-protocol-tf3417211.html#a10774113 Sent from the Misterhouse - User mailing list archive at Nabble.com. |
From: Pilfos <pi...@gm...> - 2007-05-29 15:24:56
|
After "discovering" how to communicate my home automation system with MisterHouse, I want to build the "API" over my custom .pm module so I could receive/send orders from/to the web interface. I know that I can define the lights (and other elements) with a .mht file, but I can't find any easy example I could follow to develop the necessary code that allows my custom .pm library to communicate with the web interface e.g., If a press a button under "Control Lights" under ia5 web interface, to turn on/off a light, what code I need to receive this command (in my .pm), and also, what code I need to send to the web interface (from my .pm) to notify that a light is turn on/off ? Any suggestion? Thanks! -- View this message in context: http://www.nabble.com/Programming-a-new-serial-protocol-tf3417211.html#a10856313 Sent from the Misterhouse - User mailing list archive at Nabble.com. |
From: Thorsten W. <tho...@we...> - 2007-05-31 05:43:05
|
Hello Pilfos, i have a similar problem with my RS485 bus system from ELV. Sending commands over the webinterface also works , but i didn't know how to translate the received data into mh ... You don't need to define your items with a *.mht file, you could define your items alternatively in this way: use HS485_Item; $HS485 = new Group(); $HS485PCI1 = new HS485PCI; $Schalter1 = new HS485S_Item ('$HS485PCI1','00000e30','02'); $Schalter2 = new HS485S_Item ('$HS485PCI1','00000e30','03'); $HS485 -> add ($Schalter1, $Schalter2); i splitted my support for my hs485 system in two files. This modules based on the UPB_Device.pm and UPBPIM.pm modules of Jason Sharpee. regards, Thorsten http://www.nabble.com/file/p10887753/HS485PCI.pm HS485PCI.pm http://www.nabble.com/file/p10887753/HS485_Item.pm HS485_Item.pm Pilfos wrote: > > After "discovering" how to communicate my home automation system with > MisterHouse, I want to build the "API" over my custom .pm module so I > could receive/send orders from/to the web interface. > > I know that I can define the lights (and other elements) with a .mht file, > but I can't find any easy example I could follow to develop the necessary > code that allows my custom .pm library to communicate with the web > interface > e.g., If a press a button under "Control Lights" under ia5 web interface, > to turn on/off a light, what code I need to receive this command (in my > .pm), and also, what code I need to send to the web interface (from my > .pm) to notify that a light is turn on/off ? > > Any suggestion? > > Thanks! > -- View this message in context: http://www.nabble.com/Programming-a-new-serial-protocol-tf3417211.html#a10887753 Sent from the Misterhouse - User mailing list archive at Nabble.com. |
From: Pilfos <pi...@gm...> - 2007-05-31 06:55:19
|
I'll take a look at your code. Thanks! Thorsten Weiss wrote: > > Hello Pilfos, > i have a similar problem with my RS485 bus system from ELV. > Sending commands over the webinterface also works , but i didn't know how > to translate the received data into mh ... > > You don't need to define your items with a *.mht file, you could define > your items alternatively in this way: > > use HS485_Item; > $HS485 = new Group(); > $HS485PCI1 = new HS485PCI; > $Schalter1 = new HS485S_Item ('$HS485PCI1','00000e30','02'); > $Schalter2 = new HS485S_Item ('$HS485PCI1','00000e30','03'); > $HS485 -> add ($Schalter1, $Schalter2); > > i splitted my support for my hs485 system in two files. > This modules based on the UPB_Device.pm and UPBPIM.pm modules of Jason > Sharpee. > > regards, > Thorsten > -- View this message in context: http://www.nabble.com/Programming-a-new-serial-protocol-tf3417211.html#a10888412 Sent from the Misterhouse - User mailing list archive at Nabble.com. |
From: Thorsten W. <tho...@we...> - 2007-06-01 05:31:31
|
I did a wiki artickel for my solution. I've added a new version of my code because now i can split the telegramms into the different messages but i could not tell MH which button is pressed... http://misterhouse.wikispaces.com/HS485+HA-System HS485-Wiki Pilfos wrote: > > I'll take a look at your code. > > Thanks! > > > Thorsten Weiss wrote: >> >> Hello Pilfos, >> i have a similar problem with my RS485 bus system from ELV. >> Sending commands over the webinterface also works , but i didn't know how >> to translate the received data into mh ... >> >> You don't need to define your items with a *.mht file, you could define >> your items alternatively in this way: >> >> use HS485_Item; >> $HS485 = new Group(); >> $HS485PCI1 = new HS485PCI; >> $Schalter1 = new HS485S_Item ('$HS485PCI1','00000e30','02'); >> $Schalter2 = new HS485S_Item ('$HS485PCI1','00000e30','03'); >> $HS485 -> add ($Schalter1, $Schalter2); >> >> i splitted my support for my hs485 system in two files. >> This modules based on the UPB_Device.pm and UPBPIM.pm modules of Jason >> Sharpee. >> >> regards, >> Thorsten >> > > -- View this message in context: http://www.nabble.com/Programming-a-new-serial-protocol-tf3417211.html#a10906919 Sent from the Misterhouse - User mailing list archive at Nabble.com. |
From: Pilfos <pi...@gm...> - 2007-06-01 06:56:50
|
why?? Thorsten Weiss wrote: > > .... but i could not tell MH which button is pressed... > -- View this message in context: http://www.nabble.com/Programming-a-new-serial-protocol-tf3417211.html#a10907682 Sent from the Misterhouse - User mailing list archive at Nabble.com. |
From: Thorsten W. <tho...@we...> - 2007-06-02 17:36:15
|
good Question... ;-) What i mean is, if i press a Hardware-switch wich is assigned to my input module, i could read the serial data, but i'm not able to tell MH to set the state on the webinterface so you couldn't see the real state of the switch on the webinterface. Do you have a solution for this problem? Pilfos wrote: > > why?? > > > Thorsten Weiss wrote: >> >> .... but i could not tell MH which button is pressed... >> > > -- View this message in context: http://www.nabble.com/Programming-a-new-serial-protocol-tf3417211.html#a10929517 Sent from the Misterhouse - User mailing list archive at Nabble.com. |
From: Pilfos <pi...@gm...> - 2007-06-03 22:49:44
|
:) I'm just learning how to "show" the data to MisterHouse web interface. e.g. The floorplan.pl refresh every 10 seconds, asking the status of different items: lights, appliances, fan, temperatures, ... Also, I need to know how I can receive a command from the web interface. I think this is the same problem you have. I hope in few days I can "decode" and understand this ... Thorsten Weiss wrote: > > > good Question... ;-) > > What i mean is, if i press a Hardware-switch wich is assigned to my input > module, i could read the serial data, but i'm not able to tell MH to set > the state on the webinterface so you couldn't see the real state of the > switch on the webinterface. > > Do you have a solution for this problem? > -- View this message in context: http://www.nabble.com/Programming-a-new-serial-protocol-tf3417211.html#a10941662 Sent from the Misterhouse - User mailing list archive at Nabble.com. |