Alles was die LMC nicht über die Smart-Konfig generieren kann, kann über die Detailkonfiguration erreicht werden. Durch die Smartkonfig generierte Werte können über die Detailkonfiguration nicht manuell bearbeitet werden.
Wenn mein Projekt viele Geräte hat, die eine manuelle Anpassung benötigen, oder von der Smartkonfig abgewichen werden muss, kann dies über Add-In Scripte automatisiert werden.
Aber was ist ein Add-In?
Ein LMC Add-In ist ein Script, mit dem die Detailkonfiguration eines Geräts bearbeitet werden kann - quasi ein direkter Eingriff in die Konfigurationsdatenbank der LMC.
Als Scriptsprache wird Javascript mit ein paar LANCOM-Spezifischen Erweiterungen genutzt.
Für einen schnellen Einstieg stellt LANCOM in der Knowledgebase ein "LANCOM Management Cloud - Add-in Handbuch" zur Verfügung
Wie ein einfaches Add-In erzeugt werden kann stelle ich hier am Beispiel eines LANCOM 1906VA-4G dar.
Der 1906 hat über die gesamte Breite einen RGB LED Streifen, bei dem die Farbe frei konfigurierbar ist.
Wäre doch schön, wenn der nicht im alten LANCOM-Hellblau läuft, sondern in meiner Lieblingsfarbe - und das über alle Geräte.
Manuell können wir das in der Detailkonfiguration unter Management > Erweitert > LED-Streifen-Farbe (RGB) erreichen.
Einfach RGB Hex Wert ohne vorangestellte # (im Beispiel 00ff00) eintragen und dann "Speichern und Ausrollen" 30 Sekunden später leuchtet der Router Grün
Den Vorgang für alle Router durchzuführen wäre doch etwas lästig, dafür kann auch ein Add-In genutzt werden.
Bevor Add-Ins verwendet werden können, müssen diese unter "Projektvorgaben > Basis > Konfiguration > Add-ins verwenden" aktiviert werden.
Damit taucht nun in der Navigationsleiste der Bereich "Add-ins" auf.
Jetzt legen wir uns erstmal ein leeres Add-In an. (Add-Ins > Neues Add-in erstellen)
Im Add-In Dialog sehen wir nun eine Javascript IDE mit vorgefertigtem Script-Rumpf.
Als erstes vergeben wir einen sprechenden Namen - der Name ist jedoch auf bestimmte Zeichen begrenzt, über das Kommentarfeld kann ein Freitextkommentar zur besseren Beschreibung des Add-Ins vergeben werden.
Über das Dropdown Menü wird das Betriebssystem ausgewählt, für das das Add-In zutrifft. Für Router ist LCOS bereits richtig vorausgewählt. Für die anderen Gerätetypen / Betriebssysteme müsste die Auswahl korrigiert werden.
Im Code-Fenster sehen wir schon ein freundliches "Write your script here." - aber woher wissen wir, was wir hier schreiben sollen? Der Script-Rumpf wird nun mit Speichern unten rechts verlassen und wir schauen uns erneut die Detailkonfiguration des Routers an.
Oben Rechts in der Detail-Konfiguration gibt es das Dropdown "Konfigurationsaktionen"
Sobald der Entwicklermodus an ist, sehen wir neben jedem Feld einen "Kopieren" Button. Per Mouse-Over wird die OID dieses Felds eingeblendet, bzw. mit Klick auf das Symbol wird die OID in die Zwischenablage kopiert.
Anhand dieser OIDs (die meisten kennen diese von der LCOS CLI / vom "alten" LCOS Scripting) speichert die Cloud diese Konfigurationselemente.
Aber der Entwicklermodus kann noch etwas mehr.
Wenn wir nun den Wert vom LED-Streifen (Management > Erweitert > LED-Streifen-Farbe (RGB)) ändern, taucht unten eine neue Schaltfläche auf:
Mit dem Entwickler-Modus wird ein Delta über alle Änderungen aufgezeichnet (Wichtig: nur so lange bis auf "Speichern" oder "Speichern und Ausrollen" unten rechts geklickt wird, Speichern innerhalb einer Tabelle über den Speichern-Dialog "oben" bleiben im Delta enthalten).
Dieses Delta können wir mit "Änderungen anzeigen" anzeigen lassen.
Code: Alles auswählen
// ------------------------------------------------------------------------
// Management/Erweitert/Anzeige/LED-Streifen-Farbe (RGB)
// ------------------------------------------------------------------------
config.setScalarByOid("1.2.11.95", "0000ff");
(Ausblick API-Scripting: JSON Format zeigt uns das Delta was über die LMC-API in die Detailkonfiguration gemerged werden muss, um diese Änderung auszuführen.)
Add-In Format zeigt uns ein fertiges, lauffähiges Add-In, Über den Kopieren Button oben rechts den Inhalt in die Zwischenablage kopieren,
Fenster schließen, Änderungen in der Detailkonfiguration verwerfen und unser eben erstelltes Add-In öffnen.
Den Inhalt der Zwischenablage können wir jetzt da einfügen wo bislang "Write your Add-In here" stand.
Code: Alles auswählen
/**
* @param {Config} config
* @param {Context} context
* Do not edit this comment or parameter types. Required for code suggestions
*/
exports.main = function (config, context) {
// ------------------------------------------------------------------------
// Management/Erweitert/Anzeige/LED-Streifen-Farbe (RGB)
// ------------------------------------------------------------------------
config.setScalarByOid("1.2.11.95", "0000ff");
};
Aber woher weiß das Add-In jetzt wo es verwendet werden soll?
Das Add-In muss erst "zugewiesen" / angebunden werden (Add-ins > Zuweisung).
Hier gibt es zwei Möglichkeiten zur Zuweisung.
Entweder Global oder Netzspezifisch.
Global benötigt eine Variable als Einstiegsbedingung (Nur wenn eine Variable einen bestimmten Wert hat, dann wird das Add-In angewandt)
Die Netzspezifische Zuweisung verzichtet auf diese Variablenprüfung.
Beide Zuweisungen haben vor- und Nachteile dazu aber später mehr.
Weil wir noch keine Variablen kennen, weisen wir das Add-In Netzspezifisch zu.
Netzspezifisch heißt das Add-In wird angewendet auf alle Geräte, die dieses Netz zugewiesen haben (in unserem konkreten Fall: das Netz ist dem Standort zugewiesen, das Gerät ist vom Typ LCOS und der Router hat die Gateway-rolle in diesem Netz).
Ich wähle hierzu mein "INTRANET" aus und füge das Add-In hinzu (links das Netz auswählen, dann oben über das Dropdown menu das add-in auswählen und hinzufügen)
Sobald man nun unten rechts auf Speichern drückt, sollten alle LCOS Geräte, die diesem Netz zugewiesen sind, als geändert markiert sein.
Um zu prüfen, ob das Add-in funktioniert, kann man entweder das Gerät ausrollen und dabei die LED beobachten, oder man prüft es in der Detailkonfiguration.
In der Detailkonfiguration gibt es die Basiskonfiguration und die Rolloutkonfiguration (Vorschau).
In der Basiskonfiguration sieht man die Werkseinstellungen des Geräts + lokale Änderungen (wenn in den Projektvorgaben die Übernahme lokaler Konfigurationsänderungen aktiv ist) + Änderungen von "One-Time Add-Ins".
Die Basiskonfiguration wird beim Rollout von der Smartkonfig der LMC überschrieben, dies wird nochmal durch reguläre Add-Ins überschrieben. Das Ergebnis von Smartkonfig und OID-basierten Add-Ins sieht man in der Rolloutkonfiguration (Vorschau).
Also Detailkonfiguration des Geräts öffnen, Rolloutkonfiguration auswählen, Sekunde warten (das Add-In wird live angewendet) und dann Navigation zu Management > Erweitert > LED-Streifen-Farbe (RGB).
Hier sollte nun der Wert stehen, den wir statisch im Script vergeben haben.
Wenn das Add-In Syntaktisch falsch ist, lässt der Editor das Speichern nicht zu und markiert die fehlerhafte Zeile.
Wenn das Add-In Syntaktisch richtig ist, aber logikfehler enthält (z.b. variable ist leer oder existiert nicht) dann schlägt die Konfigurationserzeugung fehl und wir bekommen eine Fehlermeldung eingeblendet. Diese ist auch im Gerätelog nachlesbar.
Wenn alles OK ist, sehen wir das Ergebnis direkt in der Rolloutvorschau und im Log steht nur "Das Add-in "LED-Streifen-Farbe" wurde auf der LMC angewandt."
Jetzt wäre es aber nett, wenn wir die Farbe etwas dynamischer verteilen können und nicht bei jeder neuen Lieblingsfarbe wieder ein Script editieren müssten.
Das können wir in der LMC über Variablen steuern.
Variablen werden Global innerhalb des Projekts definiert und bis zum Gerät durch vererbt.
Von der Globalen Definition kann auf Ebene des Standortes, Netzes, Geräts abgewichen werden, wobei "am nähesten am Gerät" gewinnt.
Um eine neue Variable anzulegen gehen wir nach Add-Ins > Benutzer-Variablen > Neue Variable anlegen.
Ich nenne meine Variable "LED_Strip_Farbe_1900" und gebe den Anzeigename "LED Farbe 1900er Router (6-digit hex-value), Variablen Typ String.
Über das Feld "Wert" kann diese Variable global vorbelegt werden - hier kann die aktuelle globale Farbe eingetragen werden.
Zurück im Add-In kann diese Variable eingebunden werden.
Dazu kann die Variable erstmal rechts im Variablenbereich dem Add-In zugewiesen werden
Über den Kopieren Button kann der Name der Variable in die Zwischenablage kopiert werden.
Die variable ersetzt nun den Wert in der Skalarzuweisung (statt "0000ff" inkl. Anführungszeichen)
Code: Alles auswählen
/**
* @param {Config} config
* @param {Context} context
* Do not edit this comment or parameter types. Required for code suggestions
*/
exports.main = function (config, context) {
// ------------------------------------------------------------------------
// Management/Erweitert/Anzeige/LED-Streifen-Farbe (RGB)
// ------------------------------------------------------------------------
config.setScalarByOid("1.2.11.95", context.vars.LED_Strip_Farbe_1900);
};
Aber wir sind selbst dafür verantwortlich, dass dort ein Sinnvoller Wert enthalten ist.
Wenn die Variable leer ist, schreibt das Add-In auch einen leeren Wert. Wenn da "Käseigel" steht, zaubert das Add-In daraus keinen Farbwert und der Rollout schlägt fehl.
Ab jetzt kommt es auf die eigenen Javascript-Fähigkeiten an - wie prüft man, ob ein gültiger Hexwert eingegeben wurde?
Ich habe lange in Perl gescriptet, Regex liegen mir da nahe.
Wenn wir schon Sanity Checks einbauen, dann können wir auch im Log Hinweise geben, was schief gelaufen ist.
Code: Alles auswählen
/**
* @param {Config} config
* @param {Context} context
* Do not edit this comment or parameter types. Required for code suggestions
*/
exports.main = function (config, context) {
/**
* Author: LNA
* Referenz: https://www.lancom-forum.de/ 20250805
*/
// Prüfung ob gültiger Hex-Code eingegeben wurde
if (/^#?[0-9A-F]{6}$/i.test(context.vars.LED_Strip_Farbe_1900)){
// Die Routerkonfiguration erwartet den Hex-Code ohne führendes #
var color=context.vars.LED_Strip_Farbe_1900.replace(/#/i, "")
// Gültigen, Bereinigten Farbcode in die Detailkonfiguration schreiben
config.setScalarByOid("1.2.11.95", color)
// Farbcode im Info-Log ausgeben
config.infoLog("LED-Streifen Farbe",color)
}
else {
// Fehlermeldung im Log ausgeben und Konfiguration abbrechen
config.abort(context.vars.LED_Strip_Farbe_1900 + " is not a valid HEX RGB Color. Expected Format: AABBCC or #AABBCC")
}
};
Um leichter Testen zu können, weise ich die Variable direkt am Router zu.
Hierzu statt der Detail-Konfiguration den Bereich "Variablen" im Gerät öffnen
Dort "Variablen Hinzufügen
Ich trage erstmal bewusst einen falschen Wert ein.
Wenn wir jetzt die Rolloutvorschau in der Detailkonfiguration öffnen, begrüßt uns die folgende Fehlermeldung
Im Gerätelog können wir das dann nochmal nachlesen. Wenn wir nun einen gültigen Hex-Wert mit oder ohne führende # angeben, kann die Rolloutvorschau aufgerufen werden. Im Gerätelog sehen wir dann die Positivmeldung:
Das fertige Addin anbei als Json zum direkten Import und ausprobieren in der LMC.Das Add-In LED-Strip-Farbe wurde auf der LMC Angewandt, script.LED-Strip-Farbe-LED-Streifen Farbe 00ffff
######
Ich versuche mich mal an diesem Tutorial-Format, ich hoffe es hilft dem einen oder anderen.
Ich kann leider nur 3 Dateien anhängen, daher nur wenige Screenshots.
Gibt es Wünsche für weitere Themen?