SmartHomeNG: Öffentliche API und Versionierung
SmartHomeNG folgt ab Version 2.0.0 dem Semantic Versioning 2.0.0. Dieses Dokument legt fest, was zur öffentlichen API gehört, wie Versionsnummern zu lesen sind und welche Änderungen welche Versionserhöhung nach sich ziehen. Es richtet sich an Entwickler von Plugins, Modulen, Logiken und Visualisierungen sowie an alle, die auf SmartHomeNG aufbauen.
Was zur öffentlichen API gehört
Nur die hier aufgeführten Bereiche sind durch die Versionsnummer abgedeckt. Alles andere kann sich in jeder Version ändern.
1. Python-API für Plugin-, Modul- und Logik-Autoren
Öffentliche Klassen, Methoden, Funktionen und GROSS_GESCHRIEBENE Konstanten der folgenden Dateien
im Verzeichnis lib/. Bei Klassen zählen auch die Signaturen von __init__ und __call__.
Bereich |
Dateien |
|---|---|
Plugin-Basisklassen |
|
Items |
|
Kern und Infrastruktur |
|
Hilfsklassen |
|
2. Konfiguration für Anwender
Modul-Parameter: die in
modules/*/module.yamldeklarierten Parameter, also die Schlüssel, die Anwender inetc/*.yamleintragen.Kommandozeilen-Optionen von
bin/smarthome.py.Item-Attribute, wie sie in
modules/core/items.yamlkatalogisiert sind (Name, Typ, zulässige Werte).Struct-Syntax und der Namensraum von Logik-Skripten.
3. smartVISU-Websocket-Protokoll
Die Kommandos, die modules/websocket/smartvisu.py entgegennimmt und sendet. Visualisierungen von
Drittanbietern verlassen sich darauf.
Nicht öffentliche API
Dies darf sich jederzeit ändern, auch in Patch-Versionen:
Namen, die mit einem Unterstrich beginnen, sowie Module, deren Dateiname mit einem Unterstrich beginnt (z. B.
lib/item/_internal/).Die REST-API und das Websocket-Protokoll des Admin-Moduls. Einziger Client ist die mitgelieferte Admin-Oberfläche (shngadmin).
Dateien der Weboberflächen (Assets, Templates),
tools/,tests/sowie die Texte von Log-Meldungen.Versionsangaben von Drittbibliotheken in
requirements.txt.Die unterstützten Python-Versionen (das ist eine Support-Zusage, keine API).
Versionsnummern
Komponente |
Schema |
|---|---|
Core |
|
Plugins, Module |
|
SmartDevicePlugin |
|
Anforderungsfelder (sh_minversion, sh_maxversion, sdp_minversion, py_minversion,
py_maxversion) dürfen aus historischen Gründen eine vierte Ziffer enthalten (1.12.2.2). Sie ordnet
sich zwischen 1.12.2 und 1.12.3 ein. Die Version einer Komponente selbst hat immer genau drei
Ziffern.
Build-Metadaten nach einem + (Commit, Branch) sind informativ und werden beim Vergleich von
Versionen ignoriert.
Veröffentlichungen vor 2.0.0 werden nicht nachträglich eingeordnet.
Welche Änderung erhöht welche Versionsstelle
Änderung |
Erhöhung |
|---|---|
Entfernter oder umbenannter öffentlicher Name; geänderte Signatur, die bestehende Aufrufer bricht; geänderter Parametertyp; neuer Pflichtparameter; eingeschränkte zulässige Werte ( |
Major |
Erhöhte |
Major |
Erhöhte |
Minor |
Neuer öffentlicher Name, neuer optionaler Parameter, neue Kommandozeilen-Option, neues Websocket-Kommando oder erweiterte zulässige Werte ( |
Minor |
Fehlerbehebung, interne Änderung, Dokumentation |
Patch |
Solange eine Komponente unter 1.0.0 liegt, erzwingt kein Änderungstyp eine Major-Erhöhung.
Abkündigungen
Öffentliche API wird nicht ohne Vorwarnung entfernt: Eine Abkündigung erfolgt in einem Minor-Release (Warnung im Log, Eintrag in den Release Notes), die Entfernung frühestens im folgenden Major-Release.
Hinweise für Entwickler
Wer ein Plugin oder Modul ändert, erhöht dessen Version entsprechend der obigen Tabelle, bevor die Änderung eingereicht wird. Im Zweifel gilt die höhere Stufe.
PLUGIN_VERSIONim Code undversioninplugin.yamlbzw.module.yamlmüssen übereinstimmen.sh_minversiondarf nicht höher sein als die Version des Cores, in dem das Plugin ausgeliefert wird.Eine Änderung, die nur Tests, Dokumentation (
*.rst,*.md) oder superseded Plugin-Versionen (_pv_*) betrifft, benötigt keine neue Version.Verwende nur öffentliche Namen aus Abschnitt 1. Wer auf unterstrichene Namen oder nicht aufgeführte Module zugreift, muss damit rechnen, dass dies in jeder Version bricht.