German Eventsteuerung zwischen verschiedenen Plattformen

SirHarry

Member
Licensed User
Longtime User
Hi
Ich brauche Euch mal als Ideenschmiede :)

Hintergrund:
Ich habe mir vor einiger Zeit ein Modell der Bismarck (1:200) gebaut und dieses im Laufe der Zeit mit einer sehr aufwendigen Elektronik ausgestattet, welche es gestattet, fast alle beweglichen Teile des Schiffes zu steuern. Zusätzlich gibt es eine erhebliche Geräuschesammlung, welche programmgesteuert ertönen. Etwa Schlachtengeräusche, Kanonendonner etc. Alles wird grundsätzlich über einen Raspberry angesteuert, an welchem erhebliche Peripherie hängt, die über I2C angesteuert wird. Im Hintergrund verwaltet die MySQL-DB die Kanonenpositionen, Munitionsmenge,Ladezeiten usw.

Was hat das mit B4A zu tun?
Ds Schiff wird komplett über eine B4A-App gesteuert (siehe Fotos)

Nun meine Frage:
Die App schreibt die Befehle, Parameter etc über Wlan oder falls vorhanden über Internet in eine MySQL-DB in eine spezielle Übergabetabelle. Der verbaute Raspberry pollt auf diese tabelle und verarbeitet jeden gefunden Befehl. Dann schreibt er im Handshake eine OK-Antwort zurück.
Das klappt soweit wunderbar.

Nun mein Anliegen:
Ich wünsche mir eine Event-gesteuerte Antwort vom Raspberry direkt zurück auf die App.
Also ohne Umweg über die Datenbank.
Das besondere Problem liegt für mich nicht an der eigentlichen Übertragung. Das kann ohne Probleme über eine TCP-Client-Server Geschichte gemacht werden. Aber ich kann nicht alles Pollen. Das bremst vor Allem den Raspberry zu sehr aus. Ausserdem möchte ich die SD-Karte im Raspberry nicht unbedingt ausreizen. Ewig halten die auch nicht. Aber auch auf dem Handy ist Pollen nicht unbedingt die Ideallösung. Das soll ja noch was anderes machen, als meine App bearbeiten :)
Problem:
Aber wie sorge ich nun dafür, dass die Meldungen (wie auch immer sie ankommen) ein Event hervorrufen?
Das heisst, eine definierte Sub auf einer bestimmten Seite aufruft.
Beispiel:
Event: "Ruder im Endstand!" Reaktion: Setzen der Ruderbewegung in diese Richtung verweigern.

Möglicherweise kenne ich ja noch nicht alle Möglichkeiten, die B4A bietet.
Ich wäre für Ideen sehr dankbar.
 

Attachments

  • Screenshot_2016-07-15-13-55-43.png
    Screenshot_2016-07-15-13-55-43.png
    104.8 KB · Views: 273
  • Screenshot_2016-07-15-14-09-09.png
    Screenshot_2016-07-15-14-09-09.png
    125.1 KB · Views: 264
  • Screenshot_2016-07-15-14-09-52.png
    Screenshot_2016-07-15-14-09-52.png
    125 KB · Views: 261

rboeck

Well-Known Member
Licensed User
Longtime User
Schau Dir mal MQTT an, damit könnten alle Anforderungen abgedeckt sein: statt einer Datenbank konzipierst Du Nachrichten, die sofort zugestellt werden. MQTT kann systemübergreifend von B4A, B4I, B4R und B4J eingesetzt werden, nur das Grundkonzept ist halt ein ganz anderes, allerdings sicher sehr leistungsfähig. M.W. verwendet Facebook dieses Protokoll, um Nachrichten zuzustellen...
 

SirHarry

Member
Licensed User
Longtime User
hmm... war mir noch völlig unbekannt.
Es gibt auch diverse, ziemlich einfache Installationsanweisungen für den Raspberry im Netz.
Aber soweit ich das verstehe, dient diese Technologie in erster Linie zum Austausch von Daten zwischen völlig unterschiedlichen Geräteplattformen.
So weit, so gut. Aber das kann natürlich eine TCP-Client-Server Anwendung zunächst auch.
Wo liegt denn für mich nun der besondere Vorteil, wenn ich dieses Protokol vewende.
Bezüglich Eventaufrufen habe ich noch nichts gefunden.
Aber diese Technologie ist trotzdem sehr interessant.
Ich werde mal etwas damit herum probieren

Danke jedenfalls für den guten Hinweis.
 

rboeck

Well-Known Member
Licensed User
Longtime User
Einige Stärke des Protokolles: die Bismarck kann irgendwo auf der Welt in irgendeinem Netz sein; trotzdem funktioniert die Datenübetragung ohne Portweiterleitung etc.
Ein Vorteil, der bei diesem konkreten Projekt wahrscheinlich nicht zum Tragen kommt, ist, dass Sender und Empfänger nicht zwingend gleichzeitig online sein müssen. Für direkte Interaktion ist dadurch die TCP-Client-Server Verbindung sinnvoller, bei größeren Flotten und Schiffsverbänden ist die Überwachung mit MQTT wieder viel einfacher. Die einzelnen Clients posten z. B. regelmäßig ihre Position, ein Subscriber empfängt diese von 10 Schiffen. Es ist eben kein 1:1 Protokoll, sondern ein Nachrichtensystem mit beliebig vielen Sendern und Empfängern. Es kann natürlich auch 1:1 arbeiten, über Platform und Netzwerkgrenzen hinweg.
 

Heinz

Active Member
Licensed User
Longtime User
Spräche was gegen ein Bluetooth - Modul (z.B. das HC-05 oder BTM2222),
sofern es kurze Reichweiten sind ?

Da wäre dann die Eventbehandlung, wenn was ankommt, einfacher.
 

SirHarry

Member
Licensed User
Longtime User
Hallo Heinz
Du hast es schon angesprochen. Die Entfernung.
Das Schiff soll ja ggf. auch mal auf einem See fahren können.
Da reden wir dann u.U. von Entfernungen deutlich über 100 Meter.
Und wenn dann die Kommunikation zusammen brechen sollte... Bismarck ade.:(
 

Michael1968

Active Member
Licensed User
Longtime User
Hallo SirHarry,

Da die Datenübertragung scheinbar kein Problem bei Dir ist, würde ich wie rboeck schon sagte, mich mit dem MQTT Protokoll beschäftigen.

Ich hab mal so ein Projekt versuchsweise für mein FLB "Düsseldorf" angefangen, die ersten Tests waren erfolgreich und zufriedenstellend, hab dann aber aus Zeitmangel die Geschichte nicht weitergemacht.

Gruß Michael
 

SirHarry

Member
Licensed User
Longtime User
Hi
ich habe die Lösung gefunden.
Eine simple Server-Client Verbindung vom Schiff zum Handy sendet die entsprechenden Nachrichten.
In der Handy-App wertet der Server diese Nachrichten aus und verteilt sie per CallSub() an die entsprechenden Activity's in die dort erstellten Subroutines.

Danke für Eure Mitarbeit und die trotzdem sehr guten Tipps.
Ich werde mich mit diesem vielversprechendem Protokoll sich in naher Zukunft mal beschäftigen.
 

SirHarry

Member
Licensed User
Longtime User
Darüber muß ich mir keine Gedanken machen.
Die Server-Client Verbindung läuft über die bestehende WLan oder alternativ Internetverbindung.

Funktioniert! :)
 
Top