Was ist CCU.IO?

CCU.IO ist eine auf Node.js basierende Applikation die die Möglichkeiten einer HomeMatic CCU erweitert. CCU.IO kommuniziert über das "BIN-RPC"-Protokoll mit rfd (HomeMatic Funk-Komponenten), hs485d (HomeMatic Wired-Komponenten) und CUxD (FS20, EnOcean, ...), außerdem wird auch die Logikschicht ("ReGaHSS") der HomeMatic CCU eingebunden.

CCU.IO kann mit seinem integrierten Webserver als Basis für Web-basierte Visualisierungen dienen und ermöglicht durch die Nutzung der Socket.IO Bibliothek Web-Oberflächen Events von der CCU nach dem Push-Prinzip zu empfangen. Ein Ressourcenintensives Polling entfällt somit und die Visualisierung stellt geänderte Status mit geringerer Latenz dar. Darüberhinaus fungiert CCU.IO hier als Proxy - egal wieviele Visualisierungs-Instanzen geöffnet sind - die Belastung für die HomeMatic CCU bleibt gleich gering.

CCU.IO ist in der Lage Fremd-Systeme über sogenannte Adapter anzubinden. Bisher existieren Adapter für Philips Hue, Sonos, IRTrans, die Anbindung an eine MySQL-Datenbank und diverse WebServices (Wettervorhersage, Pushover, ...). Weitere Adapter sind in Planung und Entwicklung.

Die in CCU.IO integrierte Script-Engine ermöglicht es Automatisierungs-Aufgaben via JavaScript zu implementieren, es stehen hier alle Möglichkeiten von Node.js zur Verfügung, z.B. Zugriffe auf das Dateisystem, Netzwerkkommunikation u.v.m. Darüberhinaus können beliebige Node.js Module eingebunden werden.

CCU.IO ist freie Software, nicht-kommerzielle Nutzung ist für jedermann kostenlos möglich. Weitere Informationen zu den Lizenz-Bedingungen

Installation

Voraussetzungen

CCU.IO benötigt Node.js (Version >= 0.8). Links zu Node.js Downloads sind im Download-Bereich zu finden.

Manuelle Installation

  • Dieses Zip-File herunterladen und entpacken
  • In das enptackte Verzeichnis wechseln
  • Den Server starten: node ccu.io-server.js start (unter Windows: node.exe ccu.io-server.js start)
  • Die CCU.IO Weboberfläche aufrufen: http://hostname:8080/ccu.io
  • Im Reiter "CCU.IO"->"Settings" die IP der CCU und des Hosts auf dem CCU.IO selbst läuft eintragen (siehe auch)
  • Im Reiter "CCU.IO"->"Control" CCU.IO neu starten

Installation als Debian-Paket (RaspberryPi)

Auf dem Raspberry Pi einloggen und folgende Befehle ausführen um Node.js und CCU.IO zu installieren:

wget http://ccu.io.mainskater.de/nodejs_0.10.22-1_armhf.deb
wget http://ccu.io.mainskater.de/ccu.io_1.0.29.deb
sudo dpkg -i nodejs_0.10.22-1_armhf.deb
sudo dpkg -i ccu.io_1.0.29.deb
  • Die CCU.IO Weboberfläche aufrufen: http://hostname:8080/ccu.io
  • Im Reiter "CCU.IO"->"Settings" die IP der CCU und des Hosts auf dem CCU.IO selbst läuft eintragen (siehe auch)
  • Im Reiter "CCU.IO"->"Control" CCU.IO neu starten

Installation auf Mac OS X

SGiersch hat in seinem Wiki die Erstellung eines Start-Scripts dokumentiert.

Die automatische Installation über .pkg ist in Vorbereitung/Entwicklung.

Installation auf Windows

Die automatische Installation über .msi ist in Vorbereitung/Entwicklung.

Installation als CCU2-Addon

Hinweis: die Installation auf einer CCU2 ist machbar - wird aber wegen mangelhafter Performance nicht empfohlen.

Die automatische Installation über ein .tar.gz ist in Vorbereitung/Entwicklung

Hinweise

Wird eine bestehende CCU.IO Installation Version 0.9.x aktualisiert müssen alle Settings neu vorgenommen werden, es findet keine Übernahme der alten Settings statt.

Wenn Port 8080 bereits belegt ist kann CCU.IO nicht starten. Dann bitte vorübergehend den Dienst der Port 8080 belegt beenden, CCU.IO starten, Port in Settings ändern.

getestete Plattformen

CCU.IO wurde bisher erfolgreich auf folgenden Plattformen installiert:

  • Raspbian (RaspberryPi)
  • Cubian (Cubieboard/Cubietruck)
  • RCU (CCU2 Firmware auf RaspberryPi)
  • Homematic CCU2
  • Mac OS X
  • Windows
  • x86 und amd64 Linux
  • QNAP TS-469 Pro (vermutlich auch auf allen anderen x86-basierten QNAP NAS)
  • QNAP TS-419II (vermutlich auch auf anderen ARM-basierten QNAP NAS)
  • Synology DS212, DS214play, DS412+, DS413j (vermutlich auf den meisten ARM- und Atom-basierten Synolgy)
  • Western Digital My Cloud

Konfiguration

Die Konfiguration von CCU.IO wird über die Weboberfläche (Reiter "CCU.IO"->"Settings") vorgenommen. Die Konfiguration der Adapter ist im Reiter "Adapter" zu finden. (Button Configure in der Adapter-Tabelle). Eine Änderung der Konfiguration (sowohl von CCU.IO selbst als auch die der Adapter) erfordert immer einen Neustart.

Grundkonfiguration

CCU IP Adresse

Die IP-Adresse der HomeMatic CCU. Bitte beachten dass Zugriffe nicht von der CCU-Firewall geblockt werden (sowohl für "HomeMatic XML-RPC API" als auch für "Remote HomeMatic-Script API").

CCU.IO IP Adresse

Die IP-Adresse des Hosts auf dem CCU.IO selbst läuft. Wird der CCU mitgeteilt damit diese Kenntnis davon hat unter welcher Adresse sie CCU.IO erreichen kann

Stats

Wenn aktiviert werden im angegebenen Intervall Informationen zur Anzahl der von der CCU empfangen Events sowie die Anzahl verbundener Clients ins Logfile geschrieben.

Logging

Wenn aktiviert werden alle Events und Variablenänderungen geloggt. Notwendig für die Nutzung der Addons Highcharts und Eventlist. Write Interval gibt an wie oft die Daten vom RAM auf den Datenträger geschrieben werden sollen.

Script-Engine

Aktiviert die Script-Engine. Longitude und Lattitude (Längen- und Breitengrad) sind notwendig für die Astro-Funktion (Berechnung Sonnenaufgang/untergang) der Script-Engine.

Webserver

Hier können die Webserver für http und https getrennt aktiviert werden und die zu verwendenden Ports konfiguriert werden. Außerdem ist es möglich ein Username und ein Passwort für "HTTP Basic Auth" anzugeben und die Authentifizierung getrennt für HTTP und HTTPS zu aktivieren.

HomeMatic RPC

Hier müssen je nach vorhandener Hardware die Inits für Funk-Komponenten (rfd), Wired-Komponenten (hs485d) und CUxD Geräte aktiviert werden

Wird "Check RPC Events" aktiviert prüft CCU.IO alle 3 Minuten ob ein Event von rfd und ggf. hs485d empfangen wurde, falls nicht wird versucht über den Druck auf einen Virtuellen Taster ein Event zu "provozieren". Sollte nach weiteren 2 Minuten immer noch kein Event eingetroffen sein wird der RPC Init erneut durchgeführt. Dient dazu eventuell nicht mehr funktionierende RPC Inits zu erkennen und zu verhindern.

HomeMatic ReGaHSS

Ist Polling aktiviert fragt CCU.IO im angegebenen Intervall den Status von Systemvariablen von der CCU ab.

Bei aktivierten Polling-Trigger wird immer wenn ein PRESS_SHORT Event auf dem angegeben virtuellen Taster empfangen wird der Zustand der Systemvariablen von der CCU abgefragt. Somit kann quasi ein "pseudo-Push" Mechanismus für Systemvariablen geschaffen werden. Hierzu ist es dann notwendig auf der CCU ein Programm anzulegen das bei Änderung von relevanten Systemvariablen den kurzen Tastendruck auf dem angegebenen virtuellen Taster durchführt.

Updates

Einstellungen und Dateien in den Verzeichnissen datastore, log, scripts und www sollten Updates unbeschadet überstehen, es empfiehlt sich natürlich dennoch vor jedem Update ein Backup der gesamten CCU.IO Installation durchzuführen.

CCU.IO kann (ab v1.0.4) "sich selbst" updaten. Einfach in der CCU.IO Oberfläche im Reiter CCU.IO-Info bei "available Version" nachsehen ob ein Update verfügbar ist (check-Button) und ggf. den Update-Button betätigen

Dieser Vorgang kann abhängig von der Internetanbindung und der Rechenleistung die CCU.IO zur Verfügung steht relativ lange dauern. Am besten ist es das CCU.IO-Logfile (log/ccu.io.log) während dieses Vorgangs im Auge zu behalten.

Das Changelog und die Roadmap werden im Readme auf GitHub gepflegt.

Backup

SimpleAPI

CCU.IO bietet neben der Möglichkeit via Socket.IO zu kommunizieren auch die "Simple API", eine auf HTTP-GET-Requests basierende Schnittstelle die Daten im JSON- oder Plain-Text-Format zurückliefert. Folgende Kommandos stehen zur Verfügung:

get

Ein Objekt abfragen. Liefert Daten im JSON-Format. Lässt sich auf alle Objekte im CCU.IO-regaObjects-Objekt anwenden.

Beispiele

Ein Objekt über die ID abfragen

http://ccu-io-host:ccu.io-port/api/get/950

Ein Objekt über den Namen abfragen

http://ccu-io-host:ccu.io-port/api/get/Anwesenheit

Ein Datenpunkt über den Kanal-Namen und den Datenpunktbezeichner abfragen

http://ccu-io-host:ccu.io-port/api/get/Licht-Küche/LEVEL

Ein Datenpunkt über die Kanal-Adresse und den Datenpunktbezeichner abfragen

http://ccu-io-host:ccu.io-port/api/get/FEQ1234567:1/LEVEL

Ein Datenpunkt über die BidCos-Adresse abfragen

http://ccu-io-host:ccu.io-port/api/get/BidCos-RF.FEQ1234567:1.LEVEL

getPlainValue

Diese Methode liefert direkt den Wert eines Datenpunkts mit Content-Type text/plain. Bietet die gleichen Möglichkeiten einen Datenpunkt zu adressieren wie die Methode get. Diese Methode lässt sich im Gegensatz zur Methode get nur auf Variablen und Datenpunkte anwenden.

http://ccu-io-host:ccu.io-port/api/getPlainValue/950

set

Eine Variable oder einen Datenpunkt setzen. Bietet die gleichen Möglichkeiten einen Datenpunkt zu adressieren wie die Methode get, lässt sich aber nur auf Datenpunkte und Variablen anwenden.

Beispiele

http://ccu-io-host:ccu.io-port/api/set/BidCos-RF.FEQ1234567:1.LEVEL/?value=0.7
http://ccu-io-host:ccu.io-port/api/set/Licht-Küche/LEVEL/?value=0.7
http://ccu-io-host:ccu.io-port/api/set/Anwesenheit/?value=0
http://ccu-io-host:ccu.io-port/api/set/950/?value=1

setBulk

Mehrere Datenpunkte auf einmal setzen

Diese Methode kann auch per POST aufgerufen werden, je nach Content-Type Header können die Daten als JSON oder form-encoded geliefert werden

Beispiele

Dieses Beispiel vereint alle 4 Beispiele aus der Methode set in einem Aufruf:

http://ccu-io-host:ccu.io-port/api/setBulk/?BidCos-RF.FEQ1234567:1.LEVEL=0.7&Licht-Küche/LEVEL=0.7&Anwesenheit=0&950=1

programExecute

Ein Programm ausführen. Kann über ID oder Name angesprochen werden

Beispiele

http://ccu-io-host:ccu.io-port/api/programExecute/1205
http://ccu-io-host:ccu.io-port/api/programExecute/Alle-Lichter-an

getObjects

http://ccu-io-host:ccu.io-port/api/getObjects

getIndex

http://ccu-io-host:ccu.io-port/api/getIndex

getDatapoints

http://ccu-io-host:ccu.io-port/api/getDatapoints

Script-Engine

Eigene Scripte können einfach im Verzeichnis scripts abgelegt werden. Bitte beachten - wenn Änderungen an den Scripten erfolgen muss die Script-Engine neu gestartet werden (über Button in CCU.IO Oberfläche unter CCU.IO->Control machbar)

Standardmäßig bereits vorhandene Node-Module

Folgende Node-Module werden von der Script-Engine bereits eingebunden und können in eigenen Script verwendet werden:

Funktionen

Zur verwendung in eigenen Scripten stehen folgende Funktionen zur Verfügung:

log(msg)

Etwas in ccu.io/log/ccu.io.log schreiben

getState(id [,dpType])

git den Wert eines Datenpunktes zurück

Beispiele:

var val = getState(950);
var val = getState("Anwesenheit");
var val = getState("Licht Küche", "LEVEL")
var val = getState("BidCos-RF.FEQ12345678.LEVEL");

setState(id, val)

Den Wert eines Datenpunktes ändern. ID kann eine ID, ein Name oder eine Adresse sein.

executeProgram(id)

Ein Homematic Programm ausführen

setObject(id, object)

Ein Objekt in die regaObjects einfügen

wol.wake(mac);

Weckt einen Rechner per Wake on Lan auf

Beispiele:

wol.wake("20:DE:20:DE:20:DE");
wol.wake("20-DE-20-DE-20-DE");
wol.wake("20DE20DE20DE");

request(url)

Führt einen HTTP GET Request durch.

Beispiele:

request("http://user:pass@webservice.example.com/api/set/1");
var url = "http://user:pass@webservice.example.com/api/get";

request(url, function (error, response, body) {
  log("webservice-abfrage "+url+" liefert zurück: "+body);
});

basiert auf dem Node-Package request, siehe auch.

email(obj)

Versendet eine Email

Beispiel:

email({
    to: "ernie@sesamestreet.com",
    subject: "ccu.io",
    text: "alarm!!!"
});

Diese Funktion erfordert dass der Email-Adapter konfiguriert und aktiviert wurde.

pushover(obj)

Versendet eine Pushover Benachrichtigung

Beispiel:

pushover({
    message:"Das Fenster im Bad sollte geschlossen werden."
});

Diese Funktion erfordert dass der Pushover-Adapter konfiguriert und aktiviert wurde.

subscribe(pattern, callback)

Einen Event abbonieren. Das pattern-Objekt bietet folgende Attribute:


    logic       string          "and" oder "or" Logik zum Verknüpfen der Bedingungen nutzen (default: "and")

    id          integer         ID ist gleich

    name        string          name ist gleich
                RegExp          name matched Regulären Ausdruck

    change      string          "eq", "ne", "gt", "ge", "lt", "le"
            "eq"    Wert muss gleich geblieben sein (val == oldval)
            "ne"    Wert muss sich geändert haben (val != oldval)
            "gt"    Wert muss großer geworden sein (val > oldval)
            "ge"    Wert muss größer geworden oder gleich geblieben sein (val >= oldval)
            "lt"    Wert muss kleiner geworden sein (val < oldval)
            "le"    Wert muss kleiner geworden oder gleich geblieben sein (val <= oldval)

    val         mixed           Wert ist gleich
    valNe       mixed           Wert ist ungleich
    valGt       mixed           Wert ist größer
    valGe       mixed           Wert ist größer oder gleich
    valLt       mixed           Wert ist kleiner
    valLe       mixed           Wert ist kleiner oder gleich

    ack         bool            Wert ist bestätigt

    oldVal      mixed           vorheriger Wert ist gleich
    oldValNe    mixed           vorheriger Wert ist ungleich
    oldValGt    mixed           vorheriger Wert ist größer
    oldValGe    mixed           vorheriger Wert ist größer oder gleich
    oldValLt    mixed           vorheriger Wert ist kleiner
    oldValLe    mixed           vorheriger Wert ist kleiner oder gleich

    oldAck      bool            vorheriger Wert ist bestätigt

    ts          string          Timestamp ist gleich
    tsGt        string          Timestamp ist größer
    tsGe        string          Timestamp ist größer oder gleich
    tsLt        string          Timestamp ist kleiner
    tsLe        string          Timestamp ist kleiner oder gleich

    oldTs       string          vorheriger Timestamp ist gleich
    oldTsGt     string          vorheriger Timestamp ist größer
    oldTsGe     string          vorheriger Timestamp ist größer oder gleich
    oldTsLt     string          vorheriger Timestamp ist kleiner
    oldTsLe     string          vorheriger Timestamp ist kleiner oder gleich

    lc          string          Lastchange ist gleich
    lcGt        string          Lastchange ist größer
    lcGe        string          Lastchange ist größer oder gleich
    lcLt        string          Lastchange ist kleiner
    lcLe        string          Lastchange ist kleiner oder gleich

    oldLc       string          vorheriger Lastchange ist gleich
    oldLcGt     string          vorheriger Lastchange ist größer
    oldLcGe     string          vorheriger Lastchange ist größer oder gleich
    oldLcLt     string          vorheriger Lastchange ist kleiner
    oldLcLe     string          vorheriger Lastchange ist kleiner oder gleich

    room        integer         Raum ID ist gleich
                string          Raum ist gleich
                RegExp          Raum matched Regulären Ausdruck

    func        integer         Gewerk ID ist gleich
                string          Gewerk ist gleich
                RegExp          Gewerk matched Regulären Ausdruck

    channel     integer         Kanal ID ist gleich
                string          Kanal-Name ist gleich
                RegExp          Kanal-Name matched Regulären Ausdruck

    device      integer         Geräte ID ist gleich
                string          Geräte-Name ist gleich
                RegExp          Geräte-Name matched Regulären Ausdruck

    channelType string          Kanal HssType ist gleich
                RegExp          Kanal HssType matched Regulären Ausdruck

    deviceType  string          Geräte HssType ist gleich
                RegExp          Geräte HssType matched Regulären Ausdruck

Der Callback-Funktion wird ein Objekt mit folgendem Inhalt als Parameter übergeben:


{
    id,
    name,
    newState: {
        value,
        timestamp,
        ack,
        lastchange
    },
    oldState: {
        value,
        timestamp,
        ack,
        lastchange
    },
    channel: {
        id,
        name,
        type,
        funcIds,
        roomIds,
        funcNames,
        roomNames
    },
    device: {
        id,
        name,
        type
    }
}

funcIds, roomIds, funcNames und roomNames sind Arrays (func = Gewerke)

Beispiel Briefkastenscript

Dieses Script zählt die Einwürfe in einen Briefkasten. id:11928 und change:"ne" gibt an dass sich der Wert des Datenpunktes mit der ID 11928 geändert haben muss. Der Beispielhafte Datenpunkt 11928 ist hier der STATE Datenpunkt eines Eingangs eines "HomeMatic-Funk-3fach-Schließerkontakt" Sensors an dem ein an der Briefkastenklappe angbrachter Microschalter angeschlossen ist. Über eine setTimeout-Anweisung werden Einwürfe maximal alle 30 Sekunden gezählt. Die Anzahl der Einwürfe wird hier Beispielhaft in die Variable mit der Id 100015 geschrieben. Die SetObject Anweisung legt die Variable mit der Id 100015 an und initialisiert sie mit dem Wert 0.

var einwurfTimer;
subscribe({id:11928, change:"ne"}, function (obj) {
    if (!einwurfTimer) {

        einwurfTimer = true;
        setTimeout(function () {
            einwurfTimer = undefined;
        }, 30000);

        setState(100015, 1 + getState(100015));
    }
});

setObject(100015, {
    Name: "Briefkasten",
    TypeName: "VARDP"
}, function () {
    setState(100015, 0);
});

schedule(pattern, callback)

Zeitmodul mit Astrofunktion.

Pattern kann ein String in Cron-Syntax sein, z.B.:

schedule("*/2 * * * *", function () {
    log("wird alle 2 Minuten ausgeführt!");
});

Pattern kann aber auch ein Objekt sein, insbesondere dann notwendig wenn man Sekundengenaue Ausführung benötigt:

schedule({second: [20, 25]}, function () {
    log("Wird um xx:xx:20 und xx:xx:25 ausgeführt!");
});

schedule({hour: 12, minute: 30}, function () {
    log("Wird um 12:30Uhr ausgeführt!");
});

Pattern kann auch ein Javascript-Date-Objekt (also ein bestimmter Zeitpunkt sein) - dann findet nur eine einmalige Ausführung statt.

Astrofunktion

Über das Attribut "astro" kann die Astrofunktion genutzt werden:

schedule({astro:"sunrise"}, function () {
    log("Sonnenaufgang!");
});

schedule({astro:"sunset", shift:10}, function () {
    log("10 Minuten nach Sonnenuntergang!");
});

Das Attribut shift ist eine Verschiebung in Minuten, kann auch negativ sein um die Events vorzuziehen.

Folgende Werte sind für das Attribut astro verwendbar:

  • sunrise: sunrise (top edge of the sun appears on the horizon)
  • sunriseEnd: sunrise ends (bottom edge of the sun touches the horizon)
  • goldenHourEnd: morning golden hour (soft light, best time for photography) ends
  • solarNoon: solar noon (sun is in the highest position)
  • goldenHour: evening golden hour starts
  • sunsetStart: sunset starts (bottom edge of the sun touches the horizon)
  • sunset: sunset (sun disappears below the horizon, evening civil twilight starts)
  • dusk: dusk (evening nautical twilight starts)
  • nauticalDusk: nautical dusk (evening astronomical twilight starts)
  • night: night starts (dark enough for astronomical observations)
  • nightEnd: night ends (morning astronomical twilight starts)
  • nauticalDawn: nautical dawn (morning nautical twilight starts)
  • dawn: dawn (morning nautical twilight ends, morning civil twilight starts)
  • nadir: nadir (darkest moment of the night, sun is in the lowest position)

Socket.IO Schnittstelle

Socket.IO ist nicht nur für die Kommunikation mit Web-Browsern der beste Weg mit CCU.IO zu kommunizieren. Es gibt Socket.IO Implementierungen für viele Sprachen, siehe https://github.com/learnboost/socket.io/wiki#in-other-languages

Methoden die von CCU.IO auf allen Clients aufgerufen werden

event

CCU.IO ruft bei jedem Event (Änderung oder Aktualisierung eines Datenpunkts oder einer Variable) die Methode "event" auf allen verbundenen Clients auf. Als Parameter wird ein Array mit folgender Struktur übergeben [id, val, timestamp, ack, lastchange]

Methoden die von Clients auf CCU.IO aufgerufen werden können

getDatapoints(callback)

Das Datenpunkt-Objekt von CCU.IO abfragen

getObjects(callback)

Die Meta-Daten (regaObjects) von CCU.IO abfragen

getIndex(callback)

Den Objekt-Index von CCU.IO abfragen

setState(arr, callback)

Einen Datenpunkt setzen. Als Parameter wird ein Array mit folgender Struktur erwartet [id, val, timestamp, ack, lastchange]

programExecute(id, callback)

Ein Homematic-Programm ausführen

runScript(script, callback)

Ein Homematic-Script ausführen

reloadScriptEngine()

Lädt die Script-Engine neu. Notwendig wenn Änderungen an einem Script vorgenommen wurden.

execCmd(cmd, callback)

Führt ein Shell-Commando aus. Callback wird mit 3 Parametern aufgerufen: error, stdout, stderr

readdir(path, callback)

Gibt den Inhalt eines bestimmten Verzeichnisses zurück. Die Methode callback wird mit einem Array des Verzeichnisinhalts zurückgerufen

writeFile(name, object, callback)

Wandelt object in JSON um und schreibt es in die Datei name im datastore-Verzeichnis

readFile(name, callback)

List eine JSON Datei im datastore-Verzeichnis und gibt das geparste Objekt als Parameter an die callback Funktion zurück

readRawFile(name, callback)

Liest eine beliebige Datei (name kann auch einen Pfad beinhalten) und gibt das Ergebnis als String an die callback Funktion zurück. Der Pfad ist relativ zum ccu.io-Verzeichnis

readJsonFile(name, callback)

List eine JSON Datei und gibt das geparste Objekt als Parameter an die callback Funktion zurück. Der Pfad ist relativ zum ccu.io-Verzeichnis

getUrl(url, callback)

Eine URL via HTTP-GET aufrufen. Callback erhält den Body den Antwort. Geschickter Weg um die Same-Origin-Policy in Webanwendungen zu umgehen.

getSettings(callback)

Liefert das CCU.IO Settings Objekt zurück

getStringtable(callback)

Liefert eine Objekt mit dem Inhalt der stringtable_de.txt von der CCU

addStringVariable(name, desc, str, callback)

Fügt eine Stringvariable auf der CCU hinzu. Liefert die neue ID an den Callback.

setObject(id, obj, callback)

Ein Objekt zu regaObjects und regaIndex hinzufügen