development:api:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
development:api:start [2010/07/29 16:18] – updated API after justins discussion with bart steffenvogel | development:api:start [2018/12/10 15:15] (aktuell) – Beispiel hinzugefügt zugschlus | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== API ====== | ====== API ====== | ||
- | Das API ist zentrale Schnittstelle des Backends. Es gliedert sich in zwei Teile | + | ===== Die Software auf volkszaehler.org besteht aus 2 Komponenten: |
- | * Kommunikation zwischen | + | ==== Frontend |
- | * Kommunikation zwischen Controller und Backend\\ Hier besitzt volkszaehler.org | + | Das ist die Visualisierung der Werte, i.d.R. also ein Browser, in dem der Verlauf der Stromverbrauchswerte angezeigt wird. |
- | * Flukso | + | Alternativ zum Browser sind aber auch andere Frontends angedacht: eine direkte Anzeige des aktuellen Verbrauchswertes z.B. via [[http:// |
- | * Google Power Meter | + | |
- | * Yello Strom Zähler (mehr Informationen benötigt) | + | |
- | **[[reference]]** | + | ==== Middleware ==== |
+ | Hierbei handelt es sich im Wesentlichen um einen Wrapper um die Datenbank. Sämtliche Kommunikation in Richtung Datenbank wird über die Middleware abgewickelt. | ||
+ | |||
+ | |||
+ | ===== Entsprechend besteht die API aus 2 Teilen: ===== | ||
+ | |||
+ | ==== Frontend-API ==== | ||
+ | Diese definiert die Kommunikation zwischen dem Frontend und der Middleware. | ||
+ | |||
+ | ==== Middleware-API ==== | ||
+ | Das ist jetzt leicht: die Middleware-API beschreibt die Kommunikation zwischen dem Messgerät (AVR Net-IO, Flukso, ...) und der Middleware. | ||
+ | |||
+ | [[development/ | ||
===== Aufgaben der API ===== | ===== Aufgaben der API ===== | ||
- | * die komplette Kommunikation mit dem Backend | + | * die komplette Kommunikation mit der Middleware |
- | * die Möglichkeit bieten Daten in Paketen an den Backend-Server schicken, um die Netzwerkverbindung zu entlasten und dadurch Strom zu sparen oder Verbindungsprobleme zum Backend-Server abfangen können | + | * die Möglichkeit bieten Daten in Paketen an den Middleware-Server schicken, um die Netzwerkverbindung zu entlasten und dadurch Strom zu sparen oder Verbindungsprobleme zum Middleware-Server abfangen können |
* nicht nur Pulse übertragen können, sondern auch Messwerte anderer Sensoren (Temperatur, | * nicht nur Pulse übertragen können, sondern auch Messwerte anderer Sensoren (Temperatur, | ||
* eine eindeutige Versionierung beinhalten | * eine eindeutige Versionierung beinhalten | ||
Zeile 22: | Zeile 32: | ||
===== Umsetzung ===== | ===== Umsetzung ===== | ||
- | Das API baut auf dem HTTP Protokoll auf und orientiert sich an [http:// | + | Die gesamte Kommunikation mit der Middleware wird ausnahmslos über HTTP-Anfragen abgewickelt. |
- | Die Daten werden mit JSON codiert übertragen. | + | Beim Entwurf der API wurde auf folgende Punkte geachtet: |
- | **HTTP** | + | **HTTP-Protokoll** |
* wird nur selten in Netzwerken gefiltert | * wird nur selten in Netzwerken gefiltert | ||
* kann getunnelt oder durch Proxies benutzt werden | * kann getunnelt oder durch Proxies benutzt werden | ||
Zeile 31: | Zeile 41: | ||
* ist durch vorhande Bibliotheken gut nutzbar und weit verbreitet | * ist durch vorhande Bibliotheken gut nutzbar und weit verbreitet | ||
- | **REST** | + | **[[http:// |
- | * die Zustandslosigkeit ist gerade für schwache Controller von Vorteil. | + | * [[http:// |
- | * wird auch von Flukso genutzt | + | * [[http:// |
+ | * [[http:// | ||
+ | * [[http:// | ||
- | **JSON** | + | **JSON-Format** |
* von Menschen lesbar | * von Menschen lesbar | ||
* geringer Overload im Vergleich zu XML | * geringer Overload im Vergleich zu XML | ||
* performante Verarbeitung der Daten mit Javascript | * performante Verarbeitung der Daten mit Javascript | ||
- | ===== Zukunftsmusik | + | ===== Beispiel |
+ | |||
+ | ** (nachträgliches) Auslesen von Zählerständen zum 01. des laufenden Monats ** | ||
+ | |||
+ | (alles auf eine Zeile schreiben) | ||
+ | |||
+ | http:// | ||
+ | uuid[]=...& | ||
+ | uuid[]=...& | ||
+ | group=month& | ||
+ | options=raw& | ||
+ | to=first%20day%20of%20this%20month%20midnight | ||
+ | |||
+ | Man kann beliebig viele `uuid[]=...` (also auch nur einen einzigen) Abschnitte angeben und erhält ein CSV zurück, in dem die Zählerstände zum 01. des Monats Mitternacht enthalten sind. | ||
- | * Direktzugriff auf den Controller für Echtzeitdarstellung & Steuerung des Controllers (Ethersex besitzt bereits einen HTTPD, Flukso auch) | ||
- | * Matthias von mysmartgrid hat das bereits für den Flukso Controller implementiert | ||
- | * Erkennung und Übertragung der Sensortypen, | ||
- | * Google Power Meter like Workflow zum installieren neuer Zähler |
development/api/start.1280413117.txt.gz · Zuletzt geändert: 2011/05/29 13:09 (Externe Bearbeitung)