Your SlideShare is downloading. ×
0
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Fr os con2010_bmatrainer
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Fr os con2010_bmatrainer

1,228

Published on

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

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,228
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1.  
  • 2.  
  • 3.  
  • 4.  
  • 5. BMATrainer <ul>Simulationsprogramm für Brandmeldeanlagen </ul>
  • 6. Die GUI
  • 7. Die GUI
  • 8. Die GUI
  • 9. Die GUI <ul><li>wxFormBuilder im Einsatz... </li></ul>
  • 10.  
  • 11. GUI
  • 12. Plugins
  • 13. Plugins I <ul><li>Löst den “Alarm” aus
  • 14. Einfache Arduino-Anwendung
  • 15. Anschluss an USB-Port
  • 16. Device::SerialPort zum Auslesen der Arduino-Daten
  • 17. Einfacher Sketch für Arduino </li></ul>
  • 18. Plugins I
  • 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; }
  • 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; }
  • 21. Plugins II <ul><li>Soll “Hausalarm” simulieren
  • 22. Steuerung mit Win32::Sound
  • 23. Win32-only im Moment </li></ul>
  • 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(); }
  • 25. Plugins <ul><li>threads + wxPerl -> “use threads” vor “use Wx”
  • 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>
  • 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; }
  • 28. Plugins einbinden --- plugins: - type: input module: Feuermelder active: 0 label: Feuermelder - type: output module: Sirene event: AlarmStart active: 0 label: Sirene
  • 29. Kommunikation
  • 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
  • 31. => Ein Eventsystem muss her </li></ul>
  • 32. Kommunikation <ul><li>Alle Output-Plugins können auf Events hören, alle Events können Events auslösen
  • 33. GUI stellt an Hand der Konfig fest, welche Plugins aufgerufen werden müssen </li></ul>
  • 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; ); }
  • 35. Kommunikation $self->event( event => 'StartAlarm', );
  • 36. Zukunft von BMATrainer <ul><li>Es ist noch einiges zu tun
  • 37. Mehr Plugins
  • 38. Plugins auch unter Linux verfügbar machen
  • 39. .exe für Windows-Nutzer erstellen
  • 40. Restliche Funktionalität programmieren
  • 41. Dokumentieren </li></ul>
  • 42. Lesestoff <ul><li>$foo – Perl-Magazin </li><ul><li>BMATrainer: Ausgaben 13 und 14
  • 43. WxPerl-Tutorial: ab Ausgabe 12 </li></ul><li>http://github.com/reneeb/BMATrainer
  • 44. http://renee-baecker.de/vortraege.html </li></ul>
  • 45. Fragen? <ul><li>Hier auf der FrOSCon oder unter
  • 46. [email_address] </li></ul>
  • 47. Vielen Dank für Ihre Aufmerksamkeit

×