Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Fr os con2010_bmatrainer

1,667 views

Published on

BMATrainer ist ein kleines Tool zur Simulation von Brandmeldeanlagen. Geschrieben in Perl.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Fr os con2010_bmatrainer

  1. 5. BMATrainer <ul>Simulationsprogramm für Brandmeldeanlagen </ul>
  2. 6. Die GUI
  3. 7. Die GUI
  4. 8. Die GUI
  5. 9. Die GUI <ul><li>wxFormBuilder im Einsatz... </li></ul>
  6. 11. GUI
  7. 12. Plugins
  8. 13. Plugins I <ul><li>Löst den “Alarm” aus
  9. 14. Einfache Arduino-Anwendung
  10. 15. Anschluss an USB-Port
  11. 16. Device::SerialPort zum Auslesen der Arduino-Daten
  12. 17. Einfacher Sketch für Arduino </li></ul>
  13. 18. Plugins I
  14. 19. Plugins I use Win32::SerialPort; my $port = 'COM3'; my $baud = 9600; my $parity = 'none'; my $data = 2; my $stop = 1; my $handshake = 'none'; sub new { bless {}, shift; }
  15. 20. Plugins I my $conn = Win32::SerialPort->new( $port ) or die $^E; $conn->databits( $data ); $conn->baudrate( $baud ); $conn->parity( $parity ); $conn->stopbits( $stop ); while ( 1 ) { my $char = $conn->lookfor; no warnings 'numeric'; # read input from usb port # if “1” is returned, start alarm $conn->lookclear; }
  16. 21. Plugins II <ul><li>Soll “Hausalarm” simulieren
  17. 22. Steuerung mit Win32::Sound
  18. 23. Win32-only im Moment </li></ul>
  19. 24. Plugins II sub start_sound { my ($self) = @_; Win32::Sound::Volume( '100%' ); Win32::Sound::Play( $self->sound_file, SND_ASYNC ); } sub stop_sound { Win32::Sound::Stop(); }
  20. 25. Plugins <ul><li>threads + wxPerl -> “use threads” vor “use Wx”
  21. 26. Kommunikation zwischen den Plugins und der Anwendung muss möglich sein </li><ul><li>Ein “Eventsystem” musste her </li></ul><li>Einbinden muss einfach sein </li></ul>
  22. 27. Plugins einbinden my $config_file = Path::Class::File->new( $args{directory}, 'plugins.yml', ); my $config = BMA::Config->new( $config_file->absolute.'' ); my $plugins = $config->get( 'plugins' ); for my $plugin ( @{$plugins} ) { $plugin->{package} = 'BMA::Plugins::'.$plugin->{module}; my $file = $plugin->{package} . '.pm'; $file =~ s{ :: }{/}gxms; $plugin->{file} = $file; push @{ $self->{ $plugin->{type} } }, $plugin; }
  23. 28. Plugins einbinden --- plugins: - type: input module: Feuermelder active: 0 label: Feuermelder - type: output module: Sirene event: AlarmStart active: 0 label: Sirene
  24. 29. Kommunikation
  25. 30. Kommunikation <ul><li>GUI muss von Plugins Befehle empfangen können </li><ul><li>Einfach Methodenaufrufe des GUI-Objekts </li></ul><li>GUI muss Befehle an Plugins senden können </li><ul><li>Nicht so einfach, da GUI die Methoden der Plugins nicht kennt </li></ul><li>Plugin ↔ Plugin müssen über GUI-Methoden kommunizieren, da diese voneinander nichts wissen
  26. 31. => Ein Eventsystem muss her </li></ul>
  27. 32. Kommunikation <ul><li>Alle Output-Plugins können auf Events hören, alle Events können Events auslösen
  28. 33. GUI stellt an Hand der Konfig fest, welche Plugins aufgerufen werden müssen </li></ul>
  29. 34. Kommunikation for my $plugin ( $self->plugins( $event ) ) { my $file = $plugin->{file}; eval { $logger->debug( &quot;require $file&quot; ); require $file; my $object = $plugin->{package}->new( %{$plugin}, logger => $logger, BMA => $args{BMA}, ); $object->run( %args ); 1; } or $logger->debug( &quot;Could not load $file: $@&quot; ); }
  30. 35. Kommunikation $self->event( event => 'StartAlarm', );
  31. 36. Zukunft von BMATrainer <ul><li>Es ist noch einiges zu tun
  32. 37. Mehr Plugins
  33. 38. Plugins auch unter Linux verfügbar machen
  34. 39. .exe für Windows-Nutzer erstellen
  35. 40. Restliche Funktionalität programmieren
  36. 41. Dokumentieren </li></ul>
  37. 42. Lesestoff <ul><li>$foo – Perl-Magazin </li><ul><li>BMATrainer: Ausgaben 13 und 14
  38. 43. WxPerl-Tutorial: ab Ausgabe 12 </li></ul><li>http://github.com/reneeb/BMATrainer
  39. 44. http://renee-baecker.de/vortraege.html </li></ul>
  40. 45. Fragen? <ul><li>Hier auf der FrOSCon oder unter
  41. 46. [email_address] </li></ul>
  42. 47. Vielen Dank für Ihre Aufmerksamkeit

×