Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Technische Hintergrundfrage, Webanbindung, REST (https://www.delphipraxis.net/196658-technische-hintergrundfrage-webanbindung-rest.html)

SvB 7. Jun 2018 06:56

Technische Hintergrundfrage, Webanbindung, REST
 
Hallo Gemeinde,

ich muss demnächst eine Maschinensteuerung mit dem Internet verheiraten, d.h. es wird ein Webportal geben, in dem die Konfigurationen und Einstellungen zu den Maschinen hinterlegt und verwaltet wird. Die Einstellungen sollen dann von den Maschinen abgerufen werden.
Mit REST-API hab ich noch nichts gemacht aber schon mitbekommen das man die Kommunikation sinnvollerweise damit machen kann.

Meine Frage: Wie bekommt die Maschine mit, dass es eine Konfigurationsänderung im Webportal gibt. Am besten in "Echtzeit". Wie macht man das?

Vielen Dank für Eure Erfahrungsinfos.

HolgerX 7. Jun 2018 07:19

AW: Technische Hintergrundfrage, Webanbindung, REST
 
Hmm..

Ich glaube, da kann Dir REST selber nicht helfen..

Hierfür bräuchtest Du einen Broker, an dem sich deine Maschine und deine zentrale Verwaltung anmeldet und ein Message-Austausch machen.

Gerade im Maschinenbereich hat sich hier MQTT etabliert.

Hierüber können Nachrichten verschickt werden, ohne REST/HTTP direkt auf TCP-Ebene.
Dies kann somit auch in 'kleinen' Steuerungen von Maschinen ohne viel Overhead recht einfach implementiert werden.

Ghostwalker 7. Jun 2018 07:21

AW: Technische Hintergrundfrage, Webanbindung, REST
 
Grundsätzlich hast du da zwei Möglichkeiten:

a.) Die Maschine fragt alle xy Sekunden das Webportal ab, ob sich was geändert hat.

b.) Das Webportal benachrichtigt die Maschine, wenn Änderungen gemacht wurden.

Welche nun die passende ist, hängt von vielen Faktoren ab.

Elrond 7. Jun 2018 07:45

AW: Technische Hintergrundfrage, Webanbindung, REST
 
Rest ansich, ist nur ein Architekturstil, zu oft wird es als Protokoll oder Schnittstelle betrachtet. Alle gängigen REST-Apis sind am ende nur http-Schnittstellen.
Für ein Echtzeitszenario ist Rest nicht geeignet, du hast aber andere Möglichkeiten. Wie bereits von HolgerX erwähnt, könntest du einen Broker verwenden, aus der Java Welt gibt es Beispielsweise ActiveMQ, kombiniert mit Camel ist es sehr mächtig, vielleicht schon zu viel des guten.
Du könntest aber genauso gut über Websockets direkt kommunizieren, jede Maschine eröffnet am Server ein Websocket.

HolgerX 7. Jun 2018 08:00

AW: Technische Hintergrundfrage, Webanbindung, REST
 
Hmm..

Ich habe hier mit 'Mosquitto' als OpenSource Broker für MQTT gute Erfahrungen gemacht.
Jedoch habe ich mir die Schnittstelle (Delphi 6) selber erstellt, da ich die bestehenden nicht verwenden konnte und meist ein paar Dinge fehlten ;)

Der Vorteil von MQTT ist, das nur wenige Bytes übertragen werden, ohne Overhead.
Jeder Client meldet sich am Server an und subscript ein Thema, für das er direkt vom Server informiert wird, ohne Polling.

Rollo62 7. Jun 2018 08:08

AW: Technische Hintergrundfrage, Webanbindung, REST
 
Verstehe ich das so das die Maschinensteuerung mit Delphi geschrieben ist ?
Dann könnte der REST-Server ja auf der gleichen Maschine laufen, und zum Internet durchleiten.

Ansonsten Vorschläge siehe unten.

Bekommt der REST-Server Änderungen z.B. bei GET einer Resource mit
www.maschine.de/v1/motor1?speed=500

Dann müsste der REST-Server mit der Maschine die Änderung umsetzen:
entweder direkt, wenn Server = Maschine
oder z.B. per Feldbus, RS485, Ethernet, oder was es da so gibt an der Maschine.

MQTT wurde schon erwähnt, finde ich auch super, allerdings braucht man einen MQTT-Broker,
den man dann möglicherweise auf einem separaten Server, Clouddients, etc. laufen lassen muss.
Einen leichten PHP-Broker gibt es dafür meines Wissens leider nicht, das würde ich aber bevorzugen um überall leicht ans Laufen zu bringen.

Rollo

Elrond 7. Jun 2018 08:31

AW: Technische Hintergrundfrage, Webanbindung, REST
 
Von TMS gibt es einen MQTT Client: https://www.tmssoftware.com/site/tmsmqtt.asp
Der lässt sich sicher mit den ActiveMQ Broker verbinden: http://activemq.apache.org/mqtt.html
ActiveMQ verwende ich sehr oft als Nachrichtenbroker, das ganze ist sehr leichtgewichtig und lässt sich einbetten oder separat starten.

HolgerX 7. Jun 2018 08:53

AW: Technische Hintergrundfrage, Webanbindung, REST
 
Zitat:

Zitat von Rollo62 (Beitrag 1404137)
Verstehe ich das so das die Maschinensteuerung mit Delphi geschrieben ist ?

Nope!
Es ist egal ob der Client (bei MQTT) eine Maschine, ein PC oder ein IoT oder was auch immer ist.
Es ist egal in welcher Sprache der Client das Protokoll implementiert hat.

Somit kannst Du deinen REST-Server mit Delphi Schreiben und dieser schickt die Konfigurationsänderung per MQTT an den Broker und dieser dann weiter an den/die Client/s.

Den Mosquitto Broker z.B. gibt es für diverse Plattformen:
https://mosquitto.org/download/

oder auch der erwähnte ActiveMQ:
http://activemq.apache.org/

Zitat:

Zitat von Rollo62 (Beitrag 1404137)
Bekommt der REST-Server Änderungen z.B. bei GET einer Resource mit
www.maschine.de/v1/motor1?speed=500

Hinweis zu REST und GET/PUSH..:
GET - Nur Holen von Daten
PUSH - Neue Daten Anlegen
PUT - Setzen/Ändern von Daten
DELETE - Löschen von Daten
...

Zitat:

Zitat von Rollo62 (Beitrag 1404137)
Dann müsste der REST-Server mit der Maschine die Änderung umsetzen:
entweder direkt, wenn Server = Maschine
oder z.B. per Feldbus, RS485, Ethernet, oder was es da so gibt an der Maschine.

Ungünstig, da der REST-Server ja dann 'Wissen' Muss, wie die Maschine direkt angesprochen wird!

Deshalb einen Broker!

Dieser leitet die Messages an alle entsprechenden Clients (Maschinen) weiter.
Somit muss nur für den Nachrichteninhalt eine Definition gemacht werden.

Die Maschine selber setzt dann anhand des Paketes die Konfiguration um.

Zitat:

Zitat von Rollo62 (Beitrag 1404137)
MQTT wurde schon erwähnt, finde ich auch super, allerdings braucht man einen MQTT-Broker,
den man dann möglicherweise auf einem separaten Server, Clouddients, etc. laufen lassen muss.

Richtig, jedoch genügt hierfür ein Raspberry Pi... ;)

Da du hier eh einen Zentralen REST-Server aufsetzen willst, kann auf diesm dein MQTT direkt mitlaufen..
Dieser muss nicht auf einem eigenen Server laufen.
Oder Du baust Dir direkt mit Delphi einen eigenen MQTT Server in deinen REST-Server mit ein.

HolgerX 7. Jun 2018 08:57

AW: Technische Hintergrundfrage, Webanbindung, REST
 
Hmm..

Ach noch was:
Da MQTT die Message puffern kann, würde sogar die Konfigurationsänderung dann auch ausgeführt werden, wenn die Maschine nach einer Verbindungsunterbrechung zum Internet sich wieder mit dem Broker verbindet!

Rollo62 7. Jun 2018 10:27

AW: Technische Hintergrundfrage, Webanbindung, REST
 
@HolgerX
Ok, dankesehr.
Meine Frage galt eher dem TE, trotzdem hast du das schön ausführlich beschrieben.

In deiner Beschreibung müsste die Maschine selbst aber MQTT-fähig (MQTT Client) sein, richtig ?
Der Broker kümmert sich nur um die Nachrichteversendung, und keent die Maschine nicht.

Das ist mir von der Eingangsfrage her immer noch nicht ganz klar.
Nicht jede Maschine kann MQTT verstehen.
Der WebService muss aber schon etwas von der MAdschine verstehen, denn er kennt zumindest die erlaubten Commandos, wenn es von da gesteuert werden soll.

Rollo

SvB 7. Jun 2018 10:46

AW: Technische Hintergrundfrage, Webanbindung, REST
 
Die Maschinensteuerung ist in Delphi geschrieben und steht irgendwo beim Kunden im Netzwerk, hat also nur Kommunikationsmöglichkeit nach außen. Vom Internet her ist die Maschine nicht direkt erreichbar, es gibt also keinen Portweiterleitung von außen nach innen.
Die Maschine muss sich also irgendwie mit dem Webserver verbinden, entweder über regelmäßige periodische Abfrage ob es was neues gibt oder direkt verbunden sein.
In der Kundenumgebung können auch mehrere Maschinen stehen, bzw. über Standorte verteilt sein und es wird auch Konfigurationen für Gruppen von Maschinen geben.

Ich werde mir das mit dem Broker und MQTT ansehen, hört sich interessant an. Der erzeugte Traffic sollte für die reine Änderungsinfo auch nicht so groß sein.

HolgerX 7. Jun 2018 10:49

AW: Technische Hintergrundfrage, Webanbindung, REST
 
Hmm..

Da lt. TE die Maschinen ja anscheinend mit einem REST_Server 'sprechen' können,
sollte dort bereits eine TCP-IP Kommunikation vorhanden sein (Ohne die geht HTTP/REST nicht).

TCP/IP ist für MQTT die Mindest-Voraussetzung, optional können auch andere Schnittstellen benutzt werden, sie müssen nur Bytes als Stream verschicken können und im Brocker zur Verbindung zur Verfügung stehen.

Jede Message bestehrt aus wenigen Bytes als Header und dem Payload.
Der Payload beinhaltet eigendlich die Message und kann alles sein, von Bytes über einfache Strings hin zu XML/JSON...

Es müsste somit nur eine (verallgemeinerte) Definition eben dieses Payloads erstellt werden, über den die Maschine mitteilt, was sie als Konfiguration erwarten kann und eben die Steuerbefehle entschlüsselt.

Alternativ würde bei (alten) Maschinen ohne TCP/IP eh ein PI oder Microcontroller dazwischen geschaltet werden müssen, um das Protokoll zu implementieren, dort würde dann der MQTT-Client installiert werden plus die Hardware-Seitige Anbindung zur Maschine.

Altrernativ könnte das sogar auf einem 8-Bit Microcontroller installiert werden, da die benötigten Resourcen überschaubar sind ;)

Beispiel:
Die Maschine meldet sich am Broker an und schickt (in definierter Form) eine Beschreibung aller Sensoren und Aktoren, welche sie zur Verfügung stellt.

Der REST-Service wird per Brocker benachrichtigt, erhält die Definition (MQTT kennt den Inhalt nicht!) und richtet bei sich dann die Views und Parametereinträge ein, welche von Extern dann angesprochen werden können.

Bei Änderung (durch REST-Put/GET.. von externen System) würde dann der REST per MQTT an die Maschine einen (im Format definierten) Befehl schicken, um den Sensor X abzufragen oder den Aktor Y auf Wert XXX zu sezten.

Was das nun wirklich für Sensoren oder Aktoren sind, braucht der REST-Service nicht komplett zu kennen. Auch, wie die Daten dann Technisch bei der Maschine ankommen bzw. Umgesetzt werden ist dem REST-Service egal, dass macht dann der MQTT-Client auf der Maschinenseite..

HolgerX 7. Jun 2018 10:51

AW: Technische Hintergrundfrage, Webanbindung, REST
 
Hmm..

Zitat:

Zitat von SvB (Beitrag 1404165)
Der erzeugte Traffic sollte für die reine Änderungsinfo auch nicht so groß sein.

Bei MQTT sind das im Minimum nur wenige Bytes..
Hängt von deiner Definition der Kommandos/Payload-Daten ab ;)

SvB 7. Jun 2018 11:15

AW: Technische Hintergrundfrage, Webanbindung, REST
 
Die Kommunikationsart, bzw. das Protokoll ist noch nicht festgelegt. Deshalb dieser Beitrag, weil ich in der Richtung noch nichts gemacht habe und von daher nicht weiß mit welcher Technologie man da am besten ran geht. Auf der Webseite ist noch alles offen, da gibt es noch nichts. Auf der Maschinenseite gibt es nur die Steuerung, die Anbindung an den Server (im Internet) ist auch noch offen.

Wie gesagt, ich schaue mir eure Vorschläge mal an. Hört sich auf jeden Fall vielversprechend an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz