Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
wiki:software:beuthbot:berichte:ss2020:abschluss [23.07.2020 13:14] Lukas Danckwerth [BeuthBot Master Repository] |
wiki:software:beuthbot:berichte:ss2020:abschluss [23.07.2020 16:11] (aktuell) Jan Fromme |
||
---|---|---|---|
Zeile 4: | Zeile 4: | ||
- [[[[wiki: | - [[[[wiki: | ||
- [[[[wiki: | - [[[[wiki: | ||
- | - [[[[wiki: | + | - [[[[wiki: |
- [[[[wiki: | - [[[[wiki: | ||
- [[[[wiki: | - [[[[wiki: | ||
- | - [[[[wiki: | + | - [[[[wiki: |
- | - [[[[wiki: | + | - [[[[wiki: |
- [[[[wiki: | - [[[[wiki: | ||
- | - [[[[wiki: | + | - [[[[wiki: |
+ | - [[[[wiki: | ||
==== Abstract ==== | ==== Abstract ==== | ||
Zeile 48: | Zeile 49: | ||
# edit environment file | # edit environment file | ||
$ cp .env.sample .env && vim .env | $ cp .env.sample .env && vim .env | ||
+ | |||
+ | # create docker network | ||
+ | $ docker network create beuthbot_network | ||
# start BeuthBot | # start BeuthBot | ||
Zeile 55: | Zeile 59: | ||
$ curl http:// | $ curl http:// | ||
</ | </ | ||
+ | |||
+ | === Komponenten des BeuthBot === | ||
+ | |||
+ | <uml> | ||
+ | @startuml | ||
+ | actor " | ||
+ | rectangle " | ||
+ | package " | ||
+ | rectangle " | ||
+ | rectangle " | ||
+ | database " | ||
+ | package " | ||
+ | rectangle " | ||
+ | rectangle " | ||
+ | } | ||
+ | package " | ||
+ | rectangle " | ||
+ | rectangle " | ||
+ | rectangle " | ||
+ | } | ||
+ | package " | ||
+ | rectangle " | ||
+ | database " | ||
+ | } | ||
+ | } | ||
+ | |||
+ | U -down-> TGB | ||
+ | |||
+ | GW -left-> TGB | ||
+ | TGB -right-> GW | ||
+ | |||
+ | GW -left-> DC | ||
+ | DC -right-> GW | ||
+ | |||
+ | GW -down-> RE | ||
+ | RE -up-> GW | ||
+ | |||
+ | DC -right-> RA | ||
+ | RA -left-> DC | ||
+ | |||
+ | DBC -right-> MDB | ||
+ | MDB -left-> DBC | ||
+ | |||
+ | GW -left-> DBC | ||
+ | DBC -right-> GW | ||
+ | |||
+ | RE -left-> CA | ||
+ | CA -right-> RE | ||
+ | |||
+ | RE -up-> MS | ||
+ | MS -down-> RE | ||
+ | |||
+ | RE -up-> WS | ||
+ | WS -down-> RE | ||
+ | |||
+ | RE -up-> DBMS | ||
+ | DBMS -down-> RE | ||
+ | |||
+ | DBMS -down-> DBC | ||
+ | DBC -up-> DBMS | ||
+ | @enduml | ||
+ | </ | ||
==== Deconcentrator-JS ==== | ==== Deconcentrator-JS ==== | ||
Zeile 73: | Zeile 139: | ||
==== Update Wetter Microservice ==== | ==== Update Wetter Microservice ==== | ||
+ | |||
+ | ===Beschreibung=== | ||
+ | |||
+ | Der Wetterservice ist ein Dienst, welche aktuell über den Telegram Client angesprochen wird. Dabei kann der Service per Chat einfach angesprochen werden ohne das der User im Vorfeld etwas einrichten muss. Dieser Dienst antwortet dabei auf Fragen, welche das Wetter im Allgemeinen, | ||
+ | |||
+ | ===Verwendete Technologien=== | ||
+ | |||
+ | Node.js( https:// | ||
+ | Express.js( https:// | ||
+ | Axios.js( https:// | ||
+ | OpenWeatherMap( https:// | ||
+ | |||
+ | ===Open Weather Api=== | ||
+ | |||
+ | Open Weather Map ist eine Api, welche einem die Möglichkeit bietet Wettervorhersagen abzurufen. Dabei bietet sie 4 verschiedene Arten von Calls: | ||
+ | /weather -> Aktuellen Wettervorhersage | ||
+ | /onecall -> Aktuellen Wettervorhersage, | ||
+ | /forecast -> Wettervorhersage bis zu 5 Tage in die Zukunft | ||
+ | /history -> Wettervorhersage bis zu 5 Tage in die Vergangenheit | ||
+ | In dieses Service wurden /onecall und /history verwendet, da /forecast nur 5 Tage in die Zukunft geht und auch nur in 3 Stunden abständen. Ebenso wurde /weather nicht genommen, das nur das aktuelle Wetter zurückgibt, | ||
=== Geoservice Erweiterung des Wetter Microservices === | === Geoservice Erweiterung des Wetter Microservices === | ||
{{page>: | {{page>: | ||
+ | |||
+ | ===weather.js=== | ||
+ | |||
+ | Hier wird die Request vom Service registry aufgenommen und eine Response erstellt und gesendet. Als erstes wird die Request in message und Ort aufgeteilt. Daraufhin wird der Ort, welcher in der Request mitgesendet wurde in Längen.- und Breitengrad via eines Geoservices umgerechnet und wieder gegeben. Dies muss passieren, da die OpenWeatherMap Api bei einigen Anfragen nicht die Ortschaft selbst, sondern nur die Latitude und longitude nimmt. Ist kein Ort in der Request vorhanden wird standardmäßig Berlin oder der durch die Persistenz abgespeicherte Wohnungsort genommen. Daraufhin wird geprüft, ob die Request eine Uhrzeit enthält, um festzustellen ob eine allgemeine oder eine zeitspezifische Anfrage gestellt wurde. Bevor die Bearbeitung anfängt, wird vorher festgestellt, | ||
+ | |||
+ | ===weatherService.js=== | ||
+ | |||
+ | Diese Datei besitzt zwei Methoden, welche jeweils mit axios einen Api call an OpenWeatherMap machen und diesen zurückgeben. Beide Funktionen benötigen jeweils die Koordinaten des gefragten Bereiches. Die Methode getForecast gibt ein JSON zurück in welchem das aktuelle, das stündliche und das tägliche Wetter befindet, welche dann später in generatedMessage.js wiederverwertet werden. Die Funktion getHistory hingegen benötigt noch die spezifische Zeit als long Wert und gibt ebenfalls ein JSON zurück, allerdings nur mit dem exakt gefragten Moment, sowie ein Objekt mit den Stündlichen vergangenen Wetterdaten. | ||
+ | |||
+ | ===generatedMessage.js=== | ||
+ | |||
+ | Diese ist die zuletzt aufgerufene Datei, in welcher drei Methoden existieren, welche den Response Text für Telegram zusammenstellen. Jede Funktion benötigt die Parameter weather( Response vom weatherService.js api call ), date( Datum ) und city( Stadtname ). Es müssen diverse Zeitformate erstellt, bzw. angepasst werden, welche dann in der Response eingefügt werden. Ebenso befindet sich in der Response von OpenWeatherMap ein Icon String, welches dann in folgende Text Icons umgewandelt wird: ☀️, ⛅, ☁️, 🌧️, 🌦️, 🌩️, ❄️, 🌫️. Diese ganzen umgewandelten Daten werden daraufhin in einen fest definierten String integriert und als messageText zurückgegeben. | ||
+ | |||
+ | ===Telegram Weather Request and Response=== | ||
+ | |||
+ | ==Allgemeine Wetteranfrage== | ||
+ | |||
+ | Dies ist eine Chatanfrage ohne dabei einen spezifischen Ort zu nennen. Wenn keine Ort genannt wird, wird standardmäßig der Sitzt der Beuth Hochschule, also Berlin genommen oder aber der User hat seinen Wohnort gesetzt, dann wird dieser genommen, es seiden die Geo Api kenn diesen nicht. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==Mit spezifischer Uhrzeit== | ||
+ | |||
+ | Bei dieser Chatanfrage wurde zusätzlich die Uhrzeit mit angegeben. Wenn es sich um die nächsten 47 Stunden handelt, dann wird dementsprechend ein Response mit der Uhrzeit gesendet. Überschreitet das Datum allerdings 47 Stunde, so wird es wie eine allgemeine Anfrage gehandhabt. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==Ort ohne Uhrzeit== | ||
+ | |||
+ | Wir ein Ort, allerdings keine Uhrzeit mit geschickt, so handhabt der Bot die Anfrage wir im ersten Bild, nur das er denn mitgesendeten Ort nimmt, es seiden die Geo Api kennt diesen nicht, dann wir standardmäßig Berlin genommen. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==Ort mit Uhrzeit== | ||
+ | |||
+ | Wird neben der Uhrzeit noch ein Ort gesendet und überschreitet es nicht 47 Stunden in die Zukunft, kann der Bot da Wetter an dem Ort mit der spezifisch mitgesendeten Uhrzeit zurückgeben, | ||
+ | |||
+ | {{: | ||
=== Complete Sequence Diagram === | === Complete Sequence Diagram === |