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?
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.
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!
Für mich klingt das nach "overengineered" Ich würde als Betreuer einfach dem Techniker (oder direkt den Eltern) eine SMS oder Whatsapp schreiben.
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.
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.
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...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.