mirror of
https://github.com/brmlab/brmdoor.git
synced 2025-06-08 11:44:01 +02:00
brmd: Brmdoor is no longer TCP service but local serial
This commit is contained in:
parent
e2f813dd25
commit
0e8d06ca42
1 changed files with 44 additions and 11 deletions
55
brmd/brmd.pl
55
brmd/brmd.pl
|
@ -2,10 +2,14 @@
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use POE qw(Component::IRC Component::IRC::Plugin::Connector Component::Client::TCP Component::Server::HTTP);
|
use POE qw(Component::IRC Component::IRC::Plugin::Connector Component::Server::HTTP
|
||||||
|
Wheel::ReadWrite Filter::Line);
|
||||||
|
use Symbol qw(gensym);
|
||||||
|
use Device::SerialPort;
|
||||||
use HTTP::Status qw/RC_OK/;
|
use HTTP::Status qw/RC_OK/;
|
||||||
|
|
||||||
our $channel = "#brmlab";
|
our $channel = "#brmlab";
|
||||||
|
our $device = "/dev/ttyUSB0";
|
||||||
our ($status, $record, $topic) = (0, 0, 'BRMLAB OPEN');
|
our ($status, $record, $topic) = (0, 0, 'BRMLAB OPEN');
|
||||||
|
|
||||||
my $irc = POE::Component::IRC->spawn(
|
my $irc = POE::Component::IRC->spawn(
|
||||||
|
@ -14,12 +18,6 @@ my $irc = POE::Component::IRC->spawn(
|
||||||
server => 'irc.freenode.org',
|
server => 'irc.freenode.org',
|
||||||
) or die "Oh noooo! $!";
|
) or die "Oh noooo! $!";
|
||||||
|
|
||||||
my $door = POE::Component::Client::TCP->new(
|
|
||||||
RemoteAddress => "192.168.1.3",
|
|
||||||
RemotePort => 23,
|
|
||||||
ServerInput => \&brmdoor_input,
|
|
||||||
) or die "Oh naaaay! $!";
|
|
||||||
|
|
||||||
my $web = POE::Component::Server::HTTP->new(
|
my $web = POE::Component::Server::HTTP->new(
|
||||||
Port => 8088,
|
Port => 8088,
|
||||||
ContentHandler => {
|
ContentHandler => {
|
||||||
|
@ -33,11 +31,14 @@ my $web = POE::Component::Server::HTTP->new(
|
||||||
) or die "Oh neee! $!";
|
) or die "Oh neee! $!";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
POE::Session->create(
|
POE::Session->create(
|
||||||
package_states => [
|
package_states => [
|
||||||
main => [ qw(_default _start irc_001 irc_public irc_332 irc_topic) ],
|
main => [ qw(_default _start irc_001 irc_public irc_332 irc_topic) ],
|
||||||
],
|
],
|
||||||
|
inline_states => {
|
||||||
|
serial_input => \&serial_input,
|
||||||
|
serial_error => \&serial_error,
|
||||||
|
},
|
||||||
heap => { irc => $irc },
|
heap => { irc => $irc },
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -47,6 +48,16 @@ $poe_kernel->run();
|
||||||
sub _start {
|
sub _start {
|
||||||
my $heap = $_[HEAP];
|
my $heap = $_[HEAP];
|
||||||
|
|
||||||
|
$heap->{serial} = POE::Wheel::ReadWrite->new(
|
||||||
|
Handle => serial_open($device),
|
||||||
|
Filter => POE::Filter::Line->new(
|
||||||
|
InputLiteral => "\x0A", # Received line endings.
|
||||||
|
OutputLiteral => "\x0A", # Sent line endings.
|
||||||
|
),
|
||||||
|
InputEvent => "serial_input",
|
||||||
|
ErrorEvent => "serial_error",
|
||||||
|
) or die "Oh ooops! $!";
|
||||||
|
|
||||||
# retrieve our component's object from the heap where we stashed it
|
# retrieve our component's object from the heap where we stashed it
|
||||||
my $irc = $heap->{irc};
|
my $irc = $heap->{irc};
|
||||||
|
|
||||||
|
@ -93,10 +104,26 @@ sub topic_update {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
## Brmdoor
|
## Brmdoor serial
|
||||||
|
|
||||||
sub brmdoor_input {
|
sub serial_open {
|
||||||
my $input = $_[ARG0];
|
my ($device) = @_;
|
||||||
|
# Open a serial port, and tie it to a file handle for POE.
|
||||||
|
my $handle = gensym();
|
||||||
|
my $port = tie(*$handle, "Device::SerialPort", $device);
|
||||||
|
die "can't open port: $!" unless $port;
|
||||||
|
$port->datatype('raw');
|
||||||
|
$port->baudrate(9600);
|
||||||
|
$port->databits(8);
|
||||||
|
$port->parity("none");
|
||||||
|
$port->stopbits(1);
|
||||||
|
$port->handshake("none");
|
||||||
|
$port->write_settings();
|
||||||
|
return $handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub serial_input {
|
||||||
|
my ($input) = ($_[ARG0]);
|
||||||
print ((scalar localtime)." $input\n");
|
print ((scalar localtime)." $input\n");
|
||||||
$input =~ /^(\d) (\d) (.*)$/ or return;
|
$input =~ /^(\d) (\d) (.*)$/ or return;
|
||||||
my ($cur_status, $cur_record, $brm) = ($1, $2, $3);
|
my ($cur_status, $cur_record, $brm) = ($1, $2, $3);
|
||||||
|
@ -121,6 +148,12 @@ sub brmdoor_input {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub serial_error {
|
||||||
|
my ($heap) = ($_[HEAP]);
|
||||||
|
print "$_[ARG0] error $_[ARG1]: $_[ARG2]\n";
|
||||||
|
print "bye!\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
## Web interface
|
## Web interface
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue