Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Farbtemperatur LED/Panel steuern #54

Open
slev1n opened this issue Jul 21, 2018 · 4 comments
Open

Farbtemperatur LED/Panel steuern #54

slev1n opened this issue Jul 21, 2018 · 4 comments

Comments

@slev1n
Copy link

slev1n commented Jul 21, 2018

Hallo zusammen,

ich möchte gerne meine Beleuchtung mit Farbtemperatur steuern. An/Aus und dimmen funktioniert bereits:
"DeviceName": "Bett",
"Services": [
{
"ServiceType": "Lightbulb",
"Handler": "millis",
"ServiceName": "Bett",
"Characteristics": [
{
"Type": "On",
"Set": [
"0/0/13"
],
"Listen": [
"0/0/14"
],
"DPT": "DPT1"
},
{
"Type": "Brightness",
"Set": [
"0/0/20"
],
"Listen": [
"0/0/17"
],
"DPT": "DPT5.001"
}
],
"subtype": ""
}
],
"UUID": ""

Aber wie füge ich die Farbtemperatur steuerung hinzu?
Mit meinen MDT Led Controller kann ich folgendes steuern:

  Nummer Name Objektfunktion Beschreibung Gruppenadresse Länge K L S Ü A Datentyp Priorität
  98 LED TW 2 Schalten Ein/Aus ikea schalten 0/0/13 1 bit K - S - - Schalten Niedrig
  100 LED TW 2 Farbtemperatur (Anteil KW in %) Dimmen Absolut ikea ft dimmen absolut prozent 0/0/18 1 byte K - S - - Prozent (0..100%) Niedrig
  101 LED TW 2 Farbtemperatur (Kelvin) Dimmen Absolut ikea ft dimmen absolut kelvin 0/0/19 2 bytes K - S - - Absolute Farbtemperatur (K) Niedrig
  102 LED TW 2 Helligkeit Dimmen Absolut ikea helligkeit dimmen absolut 0/0/20 1 byte K - S - - Prozent (0..100%) Niedrig
  103 LED TW 2 Übergang (Farbtemperatur und Helligkeit) Dimmen Absolut ikea farbe und temepratur dimmen absolut 0/0/21 6 bytes K - S - - Helligkeit Farbtemperaturübergang Niedrig
  104 LED TW 2 Farbtemperatur (Anteil in %) Dimmen Relativ     4 bit K - S - - Dimmer Schritt Niedrig
  105 LED TW 2 Helligkeit Dimmen Relativ     4 bit K - S - - Dimmer Schritt Niedrig
  106 LED TW 2 Status Ein/Aus ikea schalten status 0/0/14 1 bit K L - Ü - Status Niedrig
  107 LED TW 2 Farbtemperatur (Anteil KW in %) Status Dimmwert ikea ft status prozent dimmen 0/0/15 1 byte K L - Ü - Prozent (0..100%) Niedrig
  108 LED TW 2 Farbtemperatur (Kelvin) Status Dimmwert ikea ft status kelvin dimmen 0/0/16 2 bytes K L - Ü - Absolute Farbtemperatur (K) Niedrig
  109 LED TW 2 Helligkeit Status Dimmwert ikea helligkeit status dimmen 0/0/17 1 byte K L - Ü - Prozent (0..100%) Niedrig

Kann mir da jemand helfen bzw. mir sagen wo ich das einbauen kann?

Gruß,
Matthias

@slev1n
Copy link
Author

slev1n commented Jul 24, 2018

In meine FORK ist der Handler 'CTLight.js' zu finden. Damit lässt sich die Farbtemperatur in Kelvin einstellen, allerdings wurde der Pull request node-eibd für DPT7 von @farmio noch nich angenommen.

Gruß,
Matthias

@snowdd1
Copy link
Owner

snowdd1 commented Nov 10, 2018

Ist er jetzt schon.
@slev1n möchtest Du Deinen Handler als pull request zur Verfügung stellen?
Danke
Raoul

@Cocco17
Copy link

Cocco17 commented Aug 7, 2020

Ich wäre auch sehr interessiert an der Steuerung von TunableWhite Leuchten - ich habe deinen Handler kopiert und die entsprechenden Zeilen in mein config file kopiert, allerdings bekomme ich dann folgenden Fehler:

(/usr/local/lib/node_modules/homebridge-knx/lib/knxdevice.js:89:58)
    at KNXPlatform.configure (/usr/local/lib/node_modules/homebridge-knx/index.js:220:23)
    at KNXPlatform.<anonymous> (/usr/local/lib/node_modules/homebridge-knx/index.js:94:9)
    at HomebridgeAPI.emit (events.js:327:22)
    at HomebridgeAPI.signalFinished (/usr/local/lib/node_modules/homebridge/lib/api.js:81:14)
    at Server.start (/usr/local/lib/node_modules/homebridge/lib/server.js:79:18)
    at cli (/usr/local/lib/node_modules/homebridge/lib/cli.js:88:12)
    at Object.<anonymous> (/usr/local/lib/node_modules/homebridge/bin/homebridge:17:22)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)
    at Function.Module._load (internal/modules/cjs/loader.js:878:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
    at internal/main/run_main_module.js:17:47

ich nutze knxd als Schnittstelle zum KNX-Bus. Müsste es mit diesem Plugin nicht gehen?

@Cocco17
Copy link

Cocco17 commented Aug 7, 2020

Da der Handler von @slev1n bei mir nicht richtig funktionierte, habe ich für meine LED Controller (MDT AKD-0xxx) kurzerhand selbst einen Custom Handler geschrieben, den ich mich euch teilen möchte:

Custom Handler for Tunable White Lights - CWWW.js

/* Lightbulb extension for Tunable White Lights
* Infos:
*   - used in combination with KNX LED-Controller MDT AKD-0xxx
*   - controls the "absolute" adresses for brightness and color temperature in percent [DPT5.001]
* Issues: 
*   - The LED-Controller offers smooth switch on and off effects for HCL-Mode (Human Centered Lighting). However, it also sends the current brightness value during that, which triggers the handler to adjust the brightness
*       --> Workaround: Deactivate status information during HCL changes. 
*/
/* jshint esversion: 6, strict: true, node: true */
'use strict';
/**
 * @type {./handlerpattern.js~HandlerPattern}
 */
var HandlerPattern = require('./handlerpattern.js');
var log = require('debug')('CWWW');

/**
 * @classdesc A custom handler for light apperatures with tunable white functionality
 * @extends HandlerPattern
 */
class CWWW extends HandlerPattern {

    /****
     * onKNXValueChange is invoked if a Bus value for one of the bound addresses is received
     *
     */
    onKNXValueChange(field, oldValue, knxValue) {
        log('INFO: onKNXValueChange(' + field + ", " + oldValue + ", " + knxValue + ")");
        switch (field) {
            case "On":
                this.myAPI.setValue(field, knxValue); // knxValue: values either 0 or 1
                break;
            case "Brightness":
                this.myAPI.setValue(field, knxValue/255*100); // knxValue: values between 0-255
                break;
            case "ColorTemperature":
                let currentwhite_M = this.convertBetweenMiredandAbsolute(knxValue) // knxValue: values between 0-255
                this.myAPI.setValue(field, currentwhite_M);
                break;
        }
    }

    convertBetweenMiredandAbsolute(value) {
        // K=Kelvin, M=Mired
        var warmwhite_K = this.myAPI.getLocalConstant("max_warmwhite");
        var coldwhite_K = this.myAPI.getLocalConstant("max_coldwhite");
        var currentwhite_K = ((value/255)*(coldwhite_K - warmwhite_K)) + warmwhite_K;
        var currentwhite_M = (Math.pow(10, 6) / currentwhite_K)
        return currentwhite_M;
    }

    // onBusValueChange
/* ********************************************************************************************************************** */
    /****
     * onHKValueChange is invoked if HomeKit is changing characteristic values
     *
     */
    onHKValueChange(field, oldValue, newValue) {
        log('INFO: onHKValueChange(' + field + ", " + oldValue + ", " + newValue + ")");
        switch (field) {
            case "On":
                //skip "turn on" knx message if brightness has just been set
                if ((newValue? 1:0) !== (oldValue? 1:0)) {
                    if (newValue !== 1 || !this.brightnessSet) {
                        this.myAPI.knxWrite(field, newValue, "DPT1");
                    }
                }
                break;
            case "Brightness":
                this.myAPI.knxWrite(field, newValue, "DPT5.001");

                // set "brightness has just been set" flag to true for next 2s
                this.brightnessSet = true;
                var that = this;
                if (this.timer) clearTimeout(this.timer);
                this.timer = setTimeout(function () {
                    that.brightnessSet = false;
                    },2000);
                break;
            case "ColorTemperature":
                var absolute = this.convertBetweenAbsoluteAndMired(newValue);
                log('INFO Writing color temperature in absolute value of ' + absolute + ' to KNX bus');
                this.myAPI.knxWrite(field, absolute, "DPT5.001");
                break;
        }
    }

    convertBetweenAbsoluteAndMired(value) {
        // K=Kelvin, PC=Percent
        var warmwhite_K = this.myAPI.getLocalConstant("max_warmwhite");
        var coldwhite_K = this.myAPI.getLocalConstant("max_coldwhite");
        var currentwhite_K = Math.round(Math.pow(10, 6) / value);
        let currentwhite_PC = ((currentwhite_K - warmwhite_K) / (coldwhite_K - warmwhite_K))*100;
        return currentwhite_PC;
    }
// onHKValueChange
} // class

module.exports = CWWW;


/* **********************************************************************************************************************

config.json
The config for that should look like this (Reverse keyword is not allowed for custom handlers)

"Services": [
    {
        "DeviceName": "Panel",
        "Services": [
            {
                "ServiceType": "Lightbulb",
                "Handler": "CWWW",
                "ServiceName": "Panel",
                "Characteristics": [
                    {
                        "Type": "On",
                        "Set": [
                            "5/0/23"
                        ],
                        "Listen": [
                            "5/0/24"
                        ],
                        "DPT": "DPT1"
                    },
                    {
                        "Type": "Brightness",
                        "Set": [
                            "5/0/33"
                        ],
                        "Listen": [
                            "5/0/34"
                        ],
                        "DPT": "DPT5.001"
                    },
                    {
                        "Type": "ColorTemperature",
                        "Set": [
                            "5/0/29"
                        ],
                        "Listen": [
                            "5/0/30"
                        ],
                        "DPT": "DPT5.001"
                    }
                ],
                "KNXReadRequests": [
                    "5/0/24",
                    "5/0/30",
                    "5/0/34"

                ],
                "LocalConstants": {
                    "max_warmwhite": 2700,
                    "max_coldwhite": 6500
                }
            }
        ]
    }
]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants