Forum: PC-Programmierung verteilte Umgebung/mehrere Räume: Schaltzustände synchronisieren


von Hawa M. (hawamand)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
Ich habe mich für dieses Forum entschieden, weil die Sache wohl auf eine 
programmiertechnische Sache hinausläuft.

Ausgangslage:
Ich will/muss für 1..10 Elemente den jeweiligen Zustand einstellen 
können.
Pro Element sind 3 Zustände vorgesehen.
Das Umschalten erfolgt durch Klick auf ein Element und Klicken auf den 
neuen Soll-Zustand. (oberer Teil des Bildes)
Der neu eingestellte Zustand soll auf 1..5 weitere Teilnehmer übertragen 
werden. (unterer Teil des Bildes)

Die Teilnehmer sind gleichberechtigt bezüglich Setzen/Umschalten der 
Elemente.
Analogie: an drei Stellen im Raum diverse Leuchten einschalten/halb 
dimmen/ausschalten können.

Die Umschaltung der Zustände resp. das Übertragen auf die anderen 
Teilnehmer ist nicht zeitkritisch. Es sollte jedoch eine 
Verbindungskontrolle eingebaut sein, so dass der Teilnehmer merkt, wenn 
er keine Verbindung mehr zum "Server" hat (falls es so einen 
gibt/braucht).

Umgebungsbedingungen:
- innerhalb eines Gebäudes
- mehrere Räume
- WLAN in den Räumen verfügbar
- Netzwerkspeicher über WLAN erreichbar
- Internetzugang nicht verfügbar

Hardware für Eingabe/Anzeige:
- Standardprodukt, möglichst "ab Stange", darf auch Gebrauchtware sein
--> wahrscheinlich ein Tablet / ausrangiertes Smartphone

Angedachte Umsetzung:
- XML File auf dem Netzwerkspeicher ablegen
- Anzahl Elemente im XML File konfiguriert
- Wenn 1 Teilnehmer einen Zustand ändert, dann schreibt er den neuen 
Wert in das XML File
- Die anderen Teilnehmer pollen das XML-File auf Änderungen und laden 
dieses bei Bedarf neu.
- Auf dem Netzwerkspeicher liegt ein HTML-File mit JavaScript drin.
- Mit JavaScript wird das Editieren der Elemente im XML File erledigt.

Fragen:
- Ist das ein sinnvoller Ansatz?
- Gibt es Probleme, wenn mehrere Teilnehmer auf dieselbe XML-Datei 
zugreifen?
- Ist Browser  JavaScript  XML für die Problemstellung ein günstiger 
Ansatz?
- Andere Ideen?

von Vka (Gast)


Lesenswert?

Hawa M. schrieb:
> Die anderen Teilnehmer pollen das XML-File auf Änderungen und laden
> dieses bei Bedarf neu.

Das Pollen ist schon so aufwändig das du die Datei auch gleich neu laden 
kannst. Sinnvoller wäre es mit Websockets zu arbeiten, dann kannst du 
Änderungen vom Server zum Client schieben.
Ich würde mit einer aufsteigenden Kennung arbeiten, dann kannst du eine 
Neu-Synchronisation auslösen wenn Client & Server einen 
Verbindungsabbruch hatten. Ggf. noch Keep-Alive Pakete und Timeouts 
einbauen.
MQTT wäre einen Blick wert, das deckt eigentlich alles ab was du vor 
hast.

von Hawa M. (hawamand)


Lesenswert?

MQTT täte die beschriebenen Anforderungen zweifellos abdecken, aber...

...ich stelle mir doch eher eine bastelmässig-handgestrickte "Lösung" 
vor. Es handelt sich wirklich um eine in keiner Hinsicht kritische 
Applikation.

Ich muss vielleicht noch anmerken, dass es sich bei der angedachten 
Applikation mehr um Informationsverteilung als um "echtes" 
Synchronisieren von Systemzuständen handelt.

Zudem kommt das System nicht 24/7 zum Einsatz, sondern ca. 2h pro Woche. 
Die restliche Zeit sind die Komponenten ausgeschaltet.
Zum Hintergrund der Anwendung: Während wöchentlichen Anlässen 
(Gottesdienst in einer evangelischen Freikirche) werden in zwei Räumen 
Kinder gehütet.
Im einen Raum sind dies die ganz kleinen (0..3Jahre), im anderen Raum 
die etwas grösseren (3..6Jahre).

Die Problemsituation ist nun die, dass sich die BetreuerInnnen eine 
Möglickeit brauchen, sich im Gottesdienst bemerkbar zu machen, falls in 
einem der Betreuungsräume eine Ausnahmesituation eintreten sollte.

Der angedachte Ablauf sieht dann vor, dass sie auf dem 
Tablet/Smartphone/Display im Betreuungsraum auf die Nummer des 
betroffenen Kindes klickt und diese Nummer auf "Request" stellt.
Die betreffende Nummer wird dann auf dem Display beim Technikplatz auch 
auf "Request" gestellt, z.B. rot eingefärbt.
Der Techniker kann daraufhin die Nummer auf dem Beamer zeigen (evtl. in 
die laufende Präsentation einblenden), so dass die Eltern des 
"Event-Kindes" reagieren und dieses abholen können.
Nach Reaktion der Eltern kann der Techniker auf seinem Display die 
betroffene Nummer auf "Confirm" stellen, so dass im Betreuungsraum 
sichtbar wird, dass auf die Ausnahmesituation reagiert wurde.
Die BetreuerInnen wiederum können den "Alarm" zurückstellen auf Default 
oder den Zustand auf "Confirm" stehen lassen.
Eine Woche später beginnt der Ablauf wieder mit allen Nummern im 
Defaultzustand (Reset All)

Das "aufwändige" Pollen hält sich also in Grenzen, eine Reaktionszeit im 
Sekundenbereich liegt problemlos drin.
Einzig die Alive-Funktionalität erachte ich als zwingend, damit 
allseitig klargestellt ist, dass Verbindung besteht.

Der Idealfall für mich wäre nun eben eine solche Lösung:
- "keine" Hardwareanforderungen, Plattformunabhängig ->Browser-basiert
- möglichst einfaches Interface ->File auf NetworkStorage für 
Datenhaltung
- "nur" Anzeige der farbigen Kästchen + Editieren derselben auf den 
Clients
- "Synchronisation" der Clients durch Reload des editierten Files

Dass zwei Clients gleichzeitig das File schreiben scheint mir äusserst 
unwahrscheinlich.

Hoffe, etwas Klarheit in die Sache gebracht zu haben.
Danke für das Mitdenken!

von Max D. (max_d)


Lesenswert?

Für mich klingt das nach "overengineered"
Ich würde als Betreuer einfach dem Techniker (oder direkt den Eltern) 
eine SMS oder Whatsapp schreiben.

von Hawa M. (hawamand)


Lesenswert?

Nein, overengineered ist das nicht.
Das mit den WhatsApp und/oder SMS haben wir bereits durch.
Das funktioniert aus diversen Gründen nicht zufriedenstellend - ist 
momentan aber als "Notlösung" im Einsatz.

von Schwarzseher (Gast)


Lesenswert?

Hawa M. schrieb:
> MQTT täte die beschriebenen Anforderungen zweifellos abdecken, aber...
>
> ...ich stelle mir doch eher eine bastelmässig-handgestrickte "Lösung"
> vor.

was ist an MQTT weniger "bastelmäßig" als an deinem XML-Basierten 
Dateiaustausch?

Solange man "hangestrickt" nicht mit "möglichst kompliziert, schlecht 
und unzuverlässig funktionierend" gleichsetzt, fällt mir da ad hoc nix 
ein.

Mosquitto auf einen WLan-router oder Raspi und fertig.

Hawa M. schrieb:
> Zudem kommt das System nicht 24/7

Den MQTT-Server kann man auch ausschalten, wenn er nicht gebraucht wird.

von Hawa M. (hawamand)


Lesenswert?

OK, habe MQTT ein bisschen angeschaut -- scheint wirklich zu passen.
Der Windows-basierte Präsentations-PC läuft ja zum fraglichen Zeitpunkt 
sowieso. Der MQTT-Broker liesse sich wohl darauf unterbringen.

Wie komme ich aber zum Client - am liebsten auf einem "ausrangierten" 
Tablet mit Adroid oder iOS? Läuft das komplett Browser-basiert?
Eine zu installierende App entwickeln möchte ich eher vermeiden...

von Vka (Gast)


Lesenswert?

Okay irgendwie hatte ich kleine Kästchen mit WLAN Mikrocontroller im 
Sinn, wo Netzwerkkommunikation ja "teuer" ist. Wenn du mit Tablets, 
RasPi und x86 PCs hantieren kannst ist das ja alles kein Problem mehr.

Dann würde ich da eine klassische Javascript/jQuery Web Applikation 
draus machen. Irgendwo läuft ein Webserver (z.B. Apache), der irgend 
eine Skriptsprache unterstützt und eine kleine Datenbank ansprechen 
kann.
Die Oberfläche läuft dann komplett im Browser. Statt einer XML Datei 
würde ich dynamisch JSON aus der Datenbank raus generieren. Ob du die 
Infos dann per Websocket zum Client schiebst, oder der Client alle 60 
Sekunden ein "Keep Alive" schicken muss und als Antwort den aktuellen 
Status bekommt sollte bei dem kleinen Projekt egal sein.

Theoretisch (dann sollte das halbwegs sauber entwickelt sei) kann der 
Server dann auch irgendwo außerhalb stehen (Billighoster) und per Domain 
ansprechbar sein. Hätte den Vorteil, dass zumindest auf den mobilen 
Geräten das System auch ohne hausinternes WLAN funktioniert.

von Hawa M. (hawamand)


Lesenswert?

Ich habe da ein bisschen rumprobiert.
Der aktuelle Stand sieht wie folgt aus:
- Internetanbindung ist doch vorhanden
- demzufolge: Die Sache läuft auf dem Webserver
- falls nötig wird dann später halt ein kleiner Server auf den PC beim 
Technikplatz installiert

- Die Daten kommen in eine simple MySQL Tabelle
- Per PHP wird aus der DB gelesen und aktualisierte Daten 
reingeschrieben
- Die Clients greifen per Browser auf die Daten zu und machen ein 
Refresh alle n Sekunden.

Das Projekt läuft somit auf ein paar PHP-Files und etwas Beautify 
hinaus.
Die grafische Optimierung auf Mobilgeräten überlasse ich dann anderen, 
resp. dem Browser...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.