Apple HomeKit: Anbindung an IPS auf Basis der HomeBridge von nfarina

Die Befehle habe ich im Verzeichnis ~/homebridge/ ausgeführt.

Stimmt, hab ich ausgebessert. Danke.

was hast Du in der config.json alles drin?

Wenn ich die Befehle im homebridge-Verzeichnis ausführe kommt folgende „Fehler“:


root@raspberrypi:~/homebridge# npm install node-json-rpc
npm WARN package.json curve25519@1.0.0 No repository field.
npm WARN package.json curve25519@1.0.0 No README data
npm WARN package.json wemo@0.2.1 No repository field.
node-json-rpc@0.0.1 node_modules/node-json-rpc
root@raspberrypi:~/homebridge#

Das ist meine config.json


{
    "description": "This is an example configuration file with all supported devices. You can use this as a template for creating your own configuration file containing devices you actually own.",

    "platforms": [
		{
			"platform": "Symcon",
			"name": "Symcon",
			"rpcClientOptions": {
				"port": 3777,
				"host": "192.168.xxx.xxx",
				"path": "/api/",
				"login": "xxx.xxxx@xxxx.de",
				"hash": "xxxxxxxxxxxXXXxxxxxXXX=",
				"strict": true
			}
		}
    ],

    "accessories": [
        {
            "accessory": "Sonos",
            "name": "Speakers",
            "description": "This shim supports Sonos devices on the same network as this server. It acts as a simple switch that calls play() or pause() on the Sonos, so it's only useful for pausing and resuming tracks or radio stations that are already in the queue. When 'play_volume' is nonzero, the volume will be reset to that value when it turns the Sonos on.",
            "play_volume": 25
        }
    ]
}


Also node.js läuft bei mir sowieso schon auf dem Windows Server. Was muss ich denn dann noch alles an Dependencies unter Windows nachladen? Oder ist eine VM der bessere Weg?

So… ich hab es soweit zu laufen bekommen.

Nun habe ich das gleiche Problem wie MrEASY in Post #18.

Mit den Daten vom RASPI in der Config.json bekomme ich die Fehler… mit meinem WIN-IPS-System nicht, eben nur gefunden Instanzen = 0.

Die RPC-Schnittstelle vom RASPI habe ich gecheckt… die ist OK.

Peter

Hi Peter,

wie hast du dein Problem gelöst?

Grüße

Oli

Gute Frage… hab es noch einmal komplett neu installiert und das npm install im homebridge-Verzeichnis und im HAP-Verzeichnis ausgeführt. Beim Win-IPS kommen jetzt keine Fehler mehr. Wenn ich die RPC des Raspi nehme startet der hombridge-Server nicht bzw. beendet mit diversen Fehlermeldungen.
Die RPC des Raspis kann ich aber problemlos vom Win-IPS ansprechen. Die Daten in der Config sind somit eigentlich ok.
Peter

Mit welcher Linux Distri kann ich das ganze in einer VM testen? Habe keinen Pi zur Hand…

& Kann ich damit beispielsweise (aktueller Stand) meine Homematic Devices schalten? Bzw Grundsätzlich Scripte ausführen?

Also wenn mich nicht alles täuscht steht das doch in einer der ersten Posts!?

Hallo zusammen,

also zum PI scheint das RPC auch zu gehen.
Habe mal nach KNX Instancen gesucht.
Diese werden auch gefunden.

Muss noch schauen, wo der unterschied liegt.

Grüße

Oli

Bei mir wird nix gefunden! Habe auch KNX!

Hast du die symcon.js geändert?

Grüße

Oli

Ähm… ne. Aber andre hätte doch geschrieben das seine jetzt auch andere Instanzen unterstützt!?
Hast Du sie angepasst? Magst Sie Posten?

Hier kommt meine Testversion.

ACHTUNG sie ist nicht funktionstüchtig. Es werden nur KNX Instancen gesucht.

// IP-Symcon JSON-RPC API
var types = require("../lib/HAP-NodeJS/accessories/types.js");
var rpc = require("node-json-rpc");
var async = require("async");

function SymconPlatform(log, options) {
    this.log = log;
    this.options = options;
    this.client = new rpc.Client(this.options.rpcClientOptions);
}

SymconPlatform.prototype = {
    accessories : function (callback) {
        this.log("Fetching Symcon instances...");
        
        var that = this;
        var foundAccessories = [];
        
        async.waterfall([
                         function (waterfallCallback) {
                         that.client.call({
                                          "jsonrpc" : "2.0",
                                          "method" : "IPS_GetInstanceListByModuleID",
                                          "params" : ['{D62B95D3-0C5E-406E-B1D9-8D102E50F64B}'],
                                          "id" : 0
                                          },
                                          function (err, res) {
                                          waterfallCallback(null, err, res);
                                          });
                         },
                         function (err, res, waterfallCallback) {
                         if (err) {
                         that.log("Error: " + JSON.stringify(err));
                         return;
                         }
                         
                         async.each(res.result, function (instanceId, eachCallback) {
                                    
                                    async.parallel([
                                                    function (parallelCallback) {
                                                    that.client.call({
                                                                     "jsonrpc" : "2.0",
                                                                     "method" : "IPS_GetName",
                                                                     "params" : [instanceId],
                                                                     "id" : 0
                                                                     },
                                                                     function (err, res) {
                                                                     parallelCallback(null, res.result);
                                                                     });
                                                    },
                                                    function (parallelCallback) {
                                                    that.client.call({
                                                                     "jsonrpc" : "2.0",
                                                                     "method" : "IPS_GetInstance",
                                                                     "params" : [instanceId],
                                                                     "id" : 0
                                                                     },
                                                                     function (err, res) {
                                                                     parallelCallback(null, res.result);
                                                                     });
                                                    },
                                                    function (parallelCallback) {
                                                    that.client.call({
                                                                     "jsonrpc" : "2.0",
                                                                     "method" : "IPS_GetConfiguration",
                                                                     "params" : [instanceId],
                                                                     "id" : 0
                                                                     },
                                                                     function (err, res) {
                                                                     parallelCallback(null, res.result);
                                                                     });
                                                    }
                                                    ],
                                                   function (err, results) {
                                                   
                                                   var name = results[0];
                                                   var instance = typeof results[1] === 'object' ? results[1] : JSON.parse(results[1]);
                                                   var instanceConfig = typeof results[2] === 'object' ? results[2] : JSON.parse(results[2]);
                                                   var instance = new SymconAccessory(that.log, that.options.rpcClientOptions, instanceId, name, instance, instanceConfig);
                                                   
                                                   if (instance.commands.length > 0) { //if (instance.instanceConfig.Unit == 0 || instance.instanceConfig.Unit == 2) {
                                                   foundAccessories.push(instance);
                                                   that.log("new instance found: " + results[0]);
                                                   }
                                                   
                                                   eachCallback();
                                                   });
                                    },
                                    function (err) {
                                    waterfallCallback(null);
                                    });
                         }
                         ],
                        function (err, result) {
                        that.log(foundAccessories.length + " instances found");
                        callback(foundAccessories);
                        });
    }
}

function SymconAccessory(log, rpcClientOptions, instanceId, name, instance, instanceConfig) {
    this.log = log;
    this.rpcClientOptions = rpcClientOptions;
    this.instanceId = instanceId;
    this.name = instanceId.toString();
    this.displayName = name + " [" + instanceId + "]";
    this.instance = instance;
    this.instanceConfig = instanceConfig;
    this.defaultRamp = 3; // default ramp in seconds
    this.commands = [];
    
    switch (this.instance.ModuleInfo.ModuleID) {
        case '{D62B95D3-0C5E-406E-B1D9-8D102E50F64B}': // KNX Unit
            this.writeLogEntry('adding commands for KNX Unit (Type: ' + this.instanceConfig.Unit + ')...');
            switch (this.instanceConfig.Unit) {
                case 0: // output
                    this.commands.push('SetBrightness');
                    this.commands.push('SetPowerState');
                    break;
                case 2: // relay
                    this.commands.push('SetPowerState');
                    break;
            }
            break;
    }
}

SymconAccessory.prototype = {
    
    setPowerState : function(value) {
        
        var method;
        var params;
        
        switch (this.instance.ModuleInfo.ModuleID) {
            case '{D62B95D3-0C5E-406E-B1D9-8D102E50F64B}': // KNX Unit
                switch (this.instanceConfig.Unit) {
                    case 0: // output
                        method = 'LCN_SetIntensity';
                        params = [this.instanceId, value ? 100 : 0, 0];
                        break;
                    case 2: // relay
                        method = 'LCN_SwitchRelay';
                        params = [this.instanceId, value];
                        break;
                    default:
                        return;
                }
                break;
            default:
                return;
        }
        
        this.callRpcMethod(method, params);
    },
    
    setBrightness : function(value) {
        
        var method;
        var params;
        
        switch (this.instance.ModuleInfo.ModuleID) {
            case '{D62B95D3-0C5E-406E-B1D9-8D102E50F64B}': // KNX Unit
                switch (this.instanceConfig.Unit) {
                    case 0: // output
                        method = 'LCN_SetIntensity';
                        params = [this.instanceId, value, this.defaultRamp];
                        break;
                    default:
                        return;
                }
                break;
            default:
                return;
        }
        
        this.callRpcMethod(method, params);
    },
    
    callRpcMethod : function(method, params) {
        this.writeLogEntry("Calling JSON-RPC method " + method + " with params " + JSON.stringify(params));
        
        var that = this;
        var client = new rpc.Client(this.rpcClientOptions);
        client.call({
                    "jsonrpc" : "2.0",
                    "method" : method,
                    "params" : params,
                    "id" : 0
                    },
                    function (err, res) {
                    if (err) {
                    that.writeLogEntry("There was a problem calling method " + method);
                    return;
                    }
                    that.writeLogEntry("Called JSON-RPC method " + method);
                    });
        
    },
    
    informationCharacteristics : function () {
        var that = this;
        
        return [{
                cType : types.NAME_CTYPE,
                onUpdate : null,
                perms : ["pr"],
                format : "string",
                initialValue : this.displayName,
                supportEvents : false,
                supportBonjour : false,
                manfDescription : "Name of the accessory",
                designedMaxLength : 255
                }, {
                cType : types.MANUFACTURER_CTYPE,
                onUpdate : null,
                perms : ["pr"],
                format : "string",
                initialValue : "Symcon",
                supportEvents : false,
                supportBonjour : false,
                manfDescription : "Manufacturer",
                designedMaxLength : 255
                }, {
                cType : types.MODEL_CTYPE,
                onUpdate : null,
                perms : ["pr"],
                format : "string",
                initialValue : this.instance.ModuleInfo.ModuleName,
                supportEvents : false,
                supportBonjour : false,
                manfDescription : "Model",
                designedMaxLength : 255
                }, {
                cType : types.SERIAL_NUMBER_CTYPE,
                onUpdate : null,
                perms : ["pr"],
                format : "string",
                initialValue : "A1S2NASF88EW",
                supportEvents : false,
                supportBonjour : false,
                manfDescription : "SN",
                designedMaxLength : 255
                }, {
                cType : types.IDENTIFY_CTYPE,
                onUpdate : function (value) {
                that.writeLogEntry("informationCharacteristics IDENTIFY_CTYPE onUpdate called with value " + value);
                },
                perms : ["pw"],
                format : "bool",
                initialValue : false,
                supportEvents : false,
                supportBonjour : false,
                manfDescription : "Identify Accessory",
                designedMaxLength : 1
                }
                ]
    },
    
    controlCharacteristics : function () {
        var that = this;
        
        var cTypes = [{
                      cType : types.NAME_CTYPE,
                      onUpdate : null,
                      perms : ["pr"],
                      format : "string",
                      initialValue : this.displayName,
                      supportEvents : true,
                      supportBonjour : false,
                      manfDescription : "Name of service",
                      designedMaxLength : 255
                      }
                      ];
        
        if (this.commands.indexOf('SetPowerState') != -1) {
            this.writeLogEntry('adding control characteristic POWER_STATE_CTYPE...');
            cTypes.push({
                        cType : types.POWER_STATE_CTYPE,
                        onUpdate : function (value) {
                        that.setPowerState(value);
                        },
                        perms : ["pw", "pr", "ev"],
                        format : "bool",
                        initialValue : 0,
                        supportEvents : true,
                        supportBonjour : false,
                        manfDescription : "Change the power state",
                        designedMaxLength : 1
                        });
        }
        
        if (this.commands.indexOf('SetBrightness') != -1) {
            this.writeLogEntry('adding control characteristic BRIGHTNESS_CTYPE...');
            cTypes.push({
                        cType : types.BRIGHTNESS_CTYPE,
                        onUpdate : function (value) {
                        that.setBrightness(value);
                        },
                        perms : ["pw", "pr", "ev"],
                        format : "int",
                        initialValue : 0,
                        supportEvents : true,
                        supportBonjour : false,
                        manfDescription : "Adjust Brightness of Light",
                        designedMinValue : 0,
                        designedMaxValue : 100,
                        designedMinStep : 1,
                        unit : "%"
                        });
        }
        
        return cTypes;
    },
    
    sType : function () {
        if (this.commands.indexOf('SetBrightness') != -1) {
            return types.LIGHTBULB_STYPE;
        } else {
            return types.SWITCH_STYPE;
        }
    },
    
    getServices : function () {
        var services = [{
                        sType : types.ACCESSORY_INFORMATION_STYPE,
                        characteristics : this.informationCharacteristics(),
                        }, {
                        sType : this.sType(),
                        characteristics : this.controlCharacteristics()
                        }
                        ];
        this.writeLogEntry("services loaded");
        return services;
    },
    
writeLogEntry: function(message) {
    this.log(this.name + ': ' + message);
}
};

module.exports.accessory = SymconAccessory;
module.exports.platform = SymconPlatform;


Das Problem scheint in der Symcon.js zu liegen.

Hier kommt nun eine Version die mit KNX Bool läuft.

 // IP-Symcon JSON-RPC API
var types = require("../lib/HAP-NodeJS/accessories/types.js");
var rpc = require("node-json-rpc");
var async = require("async");

function SymconPlatform(log, options) {
    this.log = log;
    this.options = options;
    this.client = new rpc.Client(this.options.rpcClientOptions);
}

SymconPlatform.prototype = {
    accessories : function (callback) {
        this.log("Fetching Symcon instances...");
        
        var that = this;
        var foundAccessories = [];
        
        async.waterfall([
                         function (waterfallCallback) {
                         that.client.call({
                                          "jsonrpc" : "2.0",
                                          "method" : "IPS_GetInstanceListByModuleID",
                                          "params" : ['{D62B95D3-0C5E-406E-B1D9-8D102E50F64B}'],
                                          "id" : 0
                                          },
                                          function (err, res) {
                                          waterfallCallback(null, err, res);
                                          });
                         },
                         function (err, res, waterfallCallback) {
                         if (err) {
                         that.log("Error: " + JSON.stringify(err));
                         return;
                         }
                         
                         async.each(res.result, function (instanceId, eachCallback) {
                                    
                                    async.parallel([
                                                    function (parallelCallback) {
                                                    that.client.call({
                                                                     "jsonrpc" : "2.0",
                                                                     "method" : "IPS_GetName",
                                                                     "params" : [instanceId],
                                                                     "id" : 0
                                                                     },
                                                                     function (err, res) {
                                                                     parallelCallback(null, res.result);
                                                                     });
                                                    },
                                                    function (parallelCallback) {
                                                    that.client.call({
                                                                     "jsonrpc" : "2.0",
                                                                     "method" : "IPS_GetInstance",
                                                                     "params" : [instanceId],
                                                                     "id" : 0
                                                                     },
                                                                     function (err, res) {
                                                                     parallelCallback(null, res.result);
                                                                     });
                                                    },
                                                    function (parallelCallback) {
                                                    that.client.call({
                                                                     "jsonrpc" : "2.0",
                                                                     "method" : "IPS_GetConfiguration",
                                                                     "params" : [instanceId],
                                                                     "id" : 0
                                                                     },
                                                                     function (err, res) {
                                                                     parallelCallback(null, res.result);
                                                                     });
                                                    }
                                                    ],
                                                   function (err, results) {
                                                   
                                                   var name = results[0];
                                                   var instance = typeof results[1] === 'object' ? results[1] : JSON.parse(results[1]);
                                                   var instanceConfig = typeof results[2] === 'object' ? results[2] : JSON.parse(results[2]);
                                                   var instance = new SymconAccessory(that.log, that.options.rpcClientOptions, instanceId, name, instance, instanceConfig);
                                                   
                                                   if (instance.commands.length > 0) { //if (instance.instanceConfig.Unit == 0 || instance.instanceConfig.Unit == 2) {
                                                   foundAccessories.push(instance);
                                                   that.log("new instance found: " + results[0]);
                                                   }
                                                   
                                                   eachCallback();
                                                   });
                                    },
                                    function (err) {
                                    waterfallCallback(null);
                                    });
                         }
                         ],
                        function (err, result) {
                        that.log(foundAccessories.length + " instances found");
                        callback(foundAccessories);
                        });
    }
}

function SymconAccessory(log, rpcClientOptions, instanceId, name, instance, instanceConfig) {
    this.log = log;
    this.rpcClientOptions = rpcClientOptions;
    this.instanceId = instanceId;
    this.name = instanceId.toString();
    this.displayName = name + " [" + instanceId + "]";
    this.instance = instance;
    this.instanceConfig = instanceConfig;
    this.defaultRamp = 3; // default ramp in seconds
    this.commands = [];
    
    switch (this.instance.ModuleInfo.ModuleID) {
        case '{D62B95D3-0C5E-406E-B1D9-8D102E50F64B}': // KNX Unit
            this.writeLogEntry('adding commands for KNX Unit (Type: ' + this.instanceConfig.Unit + ')...');
            switch (this.instanceConfig.GroupFunction) {
                case 0: // output
                    this.commands.push('SetBrightness');
                    this.commands.push('SetPowerState');
                    break;
                case "Switch": // relay
                    this.commands.push('SetPowerState');
                    break;
            }
            break;
    }
}

SymconAccessory.prototype = {
    
    setPowerState : function(value) {
        
        var method;
        var params;
        var val_bool
        switch(value){
            case 0:
                val_bool = false;
                break;
            case 1:
                val_bool = true;
                break;
            case "einschalten":
                val_bool = true;
                break;
            case "ausschalten":
                val_bool = true;
                break;
            default:
                val_bool = value
        }
        
        switch (this.instance.ModuleInfo.ModuleID) {
            case '{D62B95D3-0C5E-406E-B1D9-8D102E50F64B}': // KNX Unit
                switch (this.instanceConfig.GroupFunction) {
                    case 0: // output
                        method = 'LCN_SetIntensity';
                        params = [this.instanceId, value ? 100 : 0, 0];
                        break;
                    case "Switch": // relay
                        method = 'EIB_Switch';
                        params = [this.instanceId, val_bool];
                        break;
                    default:
                        return;
                }
                break;
            default:
                return;
        }
        
        this.callRpcMethod(method, params);
    },
    
    setBrightness : function(value) {
        
        var method;
        var params;
        
        switch (this.instance.ModuleInfo.ModuleID) {
            case '{D62B95D3-0C5E-406E-B1D9-8D102E50F64B}': // KNX Unit
                switch (this.instanceConfig.Unit) {
                    case 0: // output
                        method = 'LCN_SetIntensity';
                        params = [this.instanceId, value, this.defaultRamp];
                        break;
                    default:
                        return;
                }
                break;
            default:
                return;
        }
        
        this.callRpcMethod(method, params);
    },
    
    callRpcMethod : function(method, params) {
        this.writeLogEntry("Calling JSON-RPC method " + method + " with params " + JSON.stringify(params));
        
        var that = this;
        var client = new rpc.Client(this.rpcClientOptions);
        client.call({
                    "jsonrpc" : "2.0",
                    "method" : method,
                    "params" : params,
                    "id" : 0
                    },
                    function (err, res) {
                    if (err) {
                    that.writeLogEntry("There was a problem calling method " + method);
                    return;
                    }
                    that.writeLogEntry("Called JSON-RPC method " + method);
                    });
        
    },
    
    informationCharacteristics : function () {
        var that = this;
        
        return [{
                cType : types.NAME_CTYPE,
                onUpdate : null,
                perms : ["pr"],
                format : "string",
                initialValue : this.displayName,
                supportEvents : false,
                supportBonjour : false,
                manfDescription : "Name of the accessory",
                designedMaxLength : 255
                }, {
                cType : types.MANUFACTURER_CTYPE,
                onUpdate : null,
                perms : ["pr"],
                format : "string",
                initialValue : "Symcon",
                supportEvents : false,
                supportBonjour : false,
                manfDescription : "Manufacturer",
                designedMaxLength : 255
                }, {
                cType : types.MODEL_CTYPE,
                onUpdate : null,
                perms : ["pr"],
                format : "string",
                initialValue : this.instance.ModuleInfo.ModuleName,
                supportEvents : false,
                supportBonjour : false,
                manfDescription : "Model",
                designedMaxLength : 255
                }, {
                cType : types.SERIAL_NUMBER_CTYPE,
                onUpdate : null,
                perms : ["pr"],
                format : "string",
                initialValue : "A1S2NASF88EW",
                supportEvents : false,
                supportBonjour : false,
                manfDescription : "SN",
                designedMaxLength : 255
                }, {
                cType : types.IDENTIFY_CTYPE,
                onUpdate : function (value) {
                that.writeLogEntry("informationCharacteristics IDENTIFY_CTYPE onUpdate called with value " + value);
                },
                perms : ["pw"],
                format : "bool",
                initialValue : false,
                supportEvents : false,
                supportBonjour : false,
                manfDescription : "Identify Accessory",
                designedMaxLength : 1
                }
                ]
    },
    
    controlCharacteristics : function () {
        var that = this;
        
        var cTypes = [{
                      cType : types.NAME_CTYPE,
                      onUpdate : null,
                      perms : ["pr"],
                      format : "string",
                      initialValue : this.displayName,
                      supportEvents : true,
                      supportBonjour : false,
                      manfDescription : "Name of service",
                      designedMaxLength : 255
                      }
                      ];
        
        if (this.commands.indexOf('SetPowerState') != -1) {
            this.writeLogEntry('adding control characteristic POWER_STATE_CTYPE...');
            cTypes.push({
                        cType : types.POWER_STATE_CTYPE,
                        onUpdate : function (value) {
                        that.setPowerState(value);
                        },
                        perms : ["pw", "pr", "ev"],
                        format : "bool",
                        initialValue : 0,
                        supportEvents : true,
                        supportBonjour : false,
                        manfDescription : "Change the power state",
                        designedMaxLength : 1
                        });
        }
        
        if (this.commands.indexOf('SetBrightness') != -1) {
            this.writeLogEntry('adding control characteristic BRIGHTNESS_CTYPE...');
            cTypes.push({
                        cType : types.BRIGHTNESS_CTYPE,
                        onUpdate : function (value) {
                        that.setBrightness(value);
                        },
                        perms : ["pw", "pr", "ev"],
                        format : "int",
                        initialValue : 0,
                        supportEvents : true,
                        supportBonjour : false,
                        manfDescription : "Adjust Brightness of Light",
                        designedMinValue : 0,
                        designedMaxValue : 100,
                        designedMinStep : 1,
                        unit : "%"
                        });
        }
        
        return cTypes;
    },
    
    sType : function () {
        if (this.commands.indexOf('SetBrightness') != -1) {
            return types.LIGHTBULB_STYPE;
        } else {
            return types.SWITCH_STYPE;
        }
    },
    
    getServices : function () {
        var services = [{
                        sType : types.ACCESSORY_INFORMATION_STYPE,
                        characteristics : this.informationCharacteristics(),
                        }, {
                        sType : this.sType(),
                        characteristics : this.controlCharacteristics()
                        }
                        ];
        this.writeLogEntry("services loaded");
        return services;
    },
    
writeLogEntry: function(message) {
    this.log(this.name + ': ' + message);
}
};

module.exports.accessory = SymconAccessory;
module.exports.platform = SymconPlatform;

Grüße

Oli

Moin Oli…

… danke für die symcon.js! Damit startet der Server bei mir auf dem Raspi und findet meine KNX Switch Instanzen auf dem Raspi.
Ich kann allerdings nix schalten über Siri. Sie sagt mir, ich hätte keine Geräte, obwohl ich Sie in der EVE-App eingerichtet habe.

Irgendwie frustrierend das Ganze!

Hi Peter,

ich arbeite gerade noch an der KNX Version.

Sobald diese fertig ist würde ich Sie hier Online stellen.

Grüße

Oli

Kurze Zwischeninfo.

Beim JSON Zugriff auf ein Windows IPS, muss der Webfrontport verwendet werden und das Passwort vom Fernzugriff im Klartext. (Also nix mit Base64).

Hallo zusammen,

ich habe meine Version im GitHub überarbeitet und folgende Funktionalitäten eingefügt:

[ul]
[li]Z-Wave-Unterstützung für:
[/li][LIST]
[li]Switch
[/li][li]Dimmer
[/li][li]Thermostat
[/li][/ul]
[li]KNX/EIB Unterstützung für:
[/li][ul]
[li]Switch
[/li][/ul]
[li]Aktueller Status von IPS abrufen für:
[/li][ul]
[li]Licht an/aus? (getPowerState)
[/li][li]Helligkeit (getBrightness)
[/li][li]Temperatur (getTargetTemperature/getCurrentTemperature)
[/li][/ul]
[/LIST]

Außerdem habe ich meinen Fork mit der aktuellen Version von nfarina synchronisiert. Daher wird es für euch beim Update wahrscheinlich erforderlich sein, auch das „submodule“ HAP-NodeJS zu aktualisieren mit:


$ git pull // meine Aktualisierungen von GitHub laden
$ git submodule update // submodule HAP-NodeJD aktualisieren

Bei den Thermostaten kann ich die Zieltemperatur über Siri setzen, ich weiß aber nicht, wie ich fragen muss, damit mir Siri auch die aktuelle Temperatur verrät. Aktuell bekomme ich immer die Temperatur eines Ortes über den Wetterdienst zurück…

Gruß,
André

Hi André,

läuft auf meinem System perfect :wink:

Grüße

Oli