Laden...

Waage/RFID-Projekt Softwarearchitektur C#

Erstellt von arvbar vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.446 Views
A
arvbar Themenstarter:in
23 Beiträge seit 2013
vor 5 Jahren
Waage/RFID-Projekt Softwarearchitektur C#

Hallo zusammen,

derzeit arbeite ich privat an einem kleinem Projekt mit welchem ich NFC-Tags / Gewichte auslesen/messen möchte. Die ausgelesenen Daten sollen anschließend in einer SQL-Datenbank oder ähnliches gespeichert werden.

Als Hardware steht mir zur Verfügung ein Rasperry PI, kleines Touch Display (zur Anzeige von Daten), Tinkerforge Red-Brick, Tinkerforge NFC-Bricklet, Load Cell-Bricklet.

Der Ablauf ist theoretisch ganz einfach. Man nimmt eine Ware legt diese auf eine Waage, dann wird der NFC-Tag gelesen und anschließend das Gewicht gemessen. Gewicht wird in eine Datenbank gespeichert. Während der Messung werden dem Nutzer die Daten auf dem Touchdisplay angezeigt. (Als Erweiterung sollen später das aktuelle Gewicht etc. als MQTT-Topic zur Verfügung gestellt werden, damit diese parallel auf anderen Dashboards (Anzeigegeräten) verwendet werden können.

Meine Idee ist eine C# Applikation zu schreiben, welche auf dem Rasperry PI ausgeführt wird. Auf dem Rasperry läuft das Mono-Framework unter Linux.

Ich würde gerne von euch erfahren, welche Pattern verwende ich optimalerweise für solch eine Applikation?

1.) MVVM-Pattern für die Entkopplung von UI und Logik?

  • Was bietet sich hier für das UI an ?

2.) Welches Pattern würdet Ihr verwenden um die Logik abzubilden?

  • Eine einfache Statemachine, welche die Messungen Auswertungen, Kalibrierungen etc. übernehmen?

3.) Kann ich für das UI auch etwas Webbasiertes verwenden, was auch von anderen Netzwerkgeräten angezeigt werden kann?

Ich bin absolute kein Hardcore Informatiker 😉. Also immer schön KISS.

Über jegliche Tipps würde ich mich freuen.

Gruß,
Arne

16.835 Beiträge seit 2008
vor 5 Jahren

(Als Erweiterung sollen später das aktuelle Gewicht etc. als MQTT-Topic zur Verfügung gestellt werden, damit diese parallel auf anderen Dashboards (Anzeigegeräten) verwendet werden können.

So funktioniert ein Topic nicht 😉
Ein Message Broker ist kein State Handler.

Meine Idee ist eine C# Applikation zu schreiben, welche auf dem Rasperry PI ausgeführt wird. Auf dem Rasperry läuft das Mono-Framework unter Linux.

Nimm Abschied von Mono und nimm .NET Core.
Das läuft sogar einfach als Docker Container auf Deinem Raspberry.

1.) MVVM-Pattern für die Entkopplung von UI und Logik?

  • Was bietet sich hier für das UI an ?

Sich erst den Pattern auszusuchen und dann die UI-Technologie - kurios.
MVVM funktioniert mit WPF gut; mit WinForms teilweise nicht möglich oder nur mit großem Aufwand.
Daher macht die Frage in der Form wenig sinn.

2.) Welches Pattern würdet Ihr verwenden um die Logik abzubilden?

  • Eine einfache Statemachine, welche die Messungen Auswertungen, Kalibrierungen etc. übernehmen?

Im Endeffekt hast Du ein klassisches Schulbeispiel für eine Event-basierte Architektur.
Messungen werden hier als Nachricht auf einen Topic geschmissen alá "NewWeightMeasurement".

Nun kann eine freie Anzahl von Workern Deine Logik abgedecken; oder auch Function Handler genannt.
Logik sind hierbei kleine Bausteine, die zusammen zu einer großen Anwendung werden.

Der eine Listener von NewWeightMeasurement fügt das Gewicht in die Datenbank.
Ein anderer Listener von NewWeightMeasurement führt das Gewicht in einen State um das aktuelle Gewicht anzuzeigen.

Kann man jetzt als kleinen Schritt in das große Thema des Event Sourcings sehen.

3.) Kann ich für das UI auch etwas Webbasiertes verwenden, was auch von anderen Netzwerkgeräten angezeigt werden kann?

Klar. Wieso nicht?

A
arvbar Themenstarter:in
23 Beiträge seit 2013
vor 5 Jahren

Hallo Herr Abt,

folgende Fragen stellen sich mir noch:

1.) Sofern ich ein Docker Container mit .Net Core auf dem PI ausführe, kann ich dann die UI-Technologien wie WPF & WinForms verwenden? Über das lokal an dem PI angeschlossene Touchdisplay, will ich gerne die aktuellen Gewichte darstellen und minimale Bedienung zulasssen.

2.) Mein bisher einziges Projekt in C# war das Spiel 3D-Mühle, dass habe ich nach MVVM und mit WPF für Windows umgesetzt. Mein Wissen in dem Bereich ist also sehr beschränkt 😉.

3.) Dann werde ich mich mal Informationen zu dem Thema eventbasierte Architekturen beschaffen.

Vielen Dank schon mal für die schnelle Antwort.

Gruß,
Arne

P
441 Beiträge seit 2014
vor 5 Jahren

Docker kann für dich eine Serverseite einer WebApp sein.
Weder unter .net core, noch unter Mono kannst du WPF nutzen. WinForms nur unter Mono und nur eingeschränkt... allerdings als Client für z.B. eine REST API, die du in Docker haben kannst.

Wenn du etwas Webbasiertes verwenden willst wäre Docker die richtige Wahl. Willst du WinForms nutzen, so kannst du durchaus deine Logik in Docker abbilden musst aber die GUI davon getrennt haben.

16.835 Beiträge seit 2008
vor 5 Jahren

Mit WinForms oder WPF wirst Du auf dem Raspberry keinen Spaß haben.
Du wirst was produzieren können; aber ich rate davon ab. Du wirst von einem Workaround in den anderen Hüpfen.

Du kannst aber natürlich eine Webseite auf Deinem Touchdisplay starten, und diese mit einer Webtechnologie umsetzen, zB ASP.NET via MVC oder zB Angular oder React und einer Http API.

Und eben das kann dann in einem Docker-Container laufen.
(Ich kam gar nicht auf die Idee, dass Du WinForms oder WPF auf dem Raspberry erwägen könntest)

Dann werde ich mich mal Informationen zu dem Thema eventbasierte Architekturen beschaffen.

Das ist eine von vielen verschiedenen Möglichkeiten - vielleicht die aktuell modernste (kommt quasi in jeder größeren Cloud/Verteilten-Applikation zum Einsatz) - aber sicherlich auch mit die komplexeste und aufwändigste für diesen Fall.
Wenn es aber mit ein Lernprojekt ist: nimms mit.

A
arvbar Themenstarter:in
23 Beiträge seit 2013
vor 5 Jahren

Vielen Dank schon mal für eure Antworten.

Wäre es auch eine Möglichkeit die anzuzeigenden Daten per MQTT-Topics nach außen anzubieten und dann anschließend mit Node-Red oder anders anzuzeigen?

Gruß,
Arne

16.835 Beiträge seit 2008
vor 5 Jahren

Wie gesagt, ein MQTT Broker ist kein State Presenter.
MQTT ist ein Messaging Protocol; vor allem für Telemetrie-Informationen.

Klar kann man das so machen, wie Du denkst (bestimmt).
Der Sinn erschließt sich mir nicht. Wirkt etwas "nicht zu Ende gedacht".