Total affacted addons: 9
ActivityPub: yes no
this.links = [
Airport: no
Awox Mesh Light: yes no
self.links = [
Azure IoT bridge: no
Pimoroni Blinkt!: yes no
* index.js - Loads the Blinkt adapter.
module.exports = require('./blinkt-adapter');
* Blinkt!Adapter - an adapter for controlling Pimoroni Blinkt!
* Property of a Blinkt! device - ie a single RGB LED
class BlinktProperty extends Property {
* A single Blinkt! RGB LED
class BlinktDevice extends Device {
* @param {BlinktAdapter} adapter
new BlinktProperty(
new BlinktProperty(
new BlinktProperty(
ommunicate with the Blinkt!
* @param {BlinktProperty} property
* Blinkt! Adapter
* Instantiates 8 BlinktDevices - one for each RGB LED
class BlinktAdapter extends Adapter {
* createDevices, instantiate one BlinktDevice per RGB LED
* createDevice - create one BlinktDevice representing an RGB LED
const id = 'blinkt-led-'+(deviceNum+1);
const name = 'Blinkt! LED '+(deviceNum+1);
new BlinktDevice(this, id, name);
* _gpio_setup from blinkt.py
* _write_byte from blinkt.py
* _sof from blinkt.py
* _eof from blinkt.py
* to the Blinkt!
evice properties to the Blinkt!
* we actually send data to the Blinkt!
send all device properties to the Blinkt!
this.devices['blinkt-led-'+(x+1)].sendProperties();
function loadBlinktAdapter(addonManager) {
const adapter = new BlinktAdapter(addonManager);
module.exports = loadBlinktAdapter;
BME280/BMP280: no
Calendar: yes no
addLink(link) {
this.links.push({rel: 'alternate',
href: link});
Candle manager: yes no
Se),this.each(function(){k.event.remove(this,e,n,t)})}});var je=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/<script|<style|<link/i,Le=/checked\s*(
self.links = [
self.links = [
Se),this.each(function(){k.event.remove(this,e,n,t)})}});var je=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/<script|<style|<link/i,Le=/checked\s*(
.href = body['full_lan_path'];
Chromecast: no
Cololight: no
Counter: no
Cron: no
DateTime Adapter: no
Dingz: yes no
//TODO LED actions (toggle, blink)
get links() {
set links(val) {}
Display Toggle: no
Dmx: no
Earthquake Monitor: yes no
self.links = [
Email Sender: no
EnOcean: no
ESPHome: no
Etekcity: no
Eufy: no
Example Adapter: yes no
((this as unknown) as { links: Link[] }).links.push({
Example Notifier: no
Flic Button: no
Followers: yes
'].rsplit('/', 1)[-1]
property_id = thing['properties'][thing_property_key]['links'][0]['href'].rsplit('/', 1)[-1]
(properties[prop]['links'][0]['href'].lastIndexOf('/') + 1);
Foobot: yes no
this.links.push({
Fritz!: no
links: [
this.links[0].mediaType = 'image/png';
this.links[0].mediaType = 'image/gif';
this.links[0].mediaType = 'image/jpeg';
this.links[0].href = `/media/frontier-silicon/${this.device.id}/${filename}`;
this.links.push({
Generic Sensors: no
GitHub: yes no
this.links = [
protected links: Link[];
Gotify: no
GPIO: no
Highlights: yes
property_id = thing['properties'][thing_property_key]['links'][0]['href'].rsplit('/', 1)[-1]
ighlights-"):
ts-")
ref'] = new_href
property_id = thing['properties'][thing_property_key]['links'][0]['href'].rsplit('/', 1)[-1]
(properties[prop]['links'][0]['href'].lastIndexOf('/') + 1);
HomeKit: no
HomeMatic: no
Homie: no
HTTP: no
InfluxDB: no
Input Event: no
INSTEON: yes no
result = await device.link({ controller: false, group: 4 });
result = await device.link({ controller: false, group: 3 });
async link({ controller, group = 1 }) {
return this.hub.link(this.address, { controller, group });
this.link({ timeout: timeoutSeconds * 1000 }).then(async (device) => {
async link({ timeout = 30000 } = {}) {
const info = await this.hub.link(null, { timeout });
console.warn('No link information received.');
try to link as a responder. Not fatal if this fails.
await this.hub.link(info.address, { controller: false });
console.warn('Unable to link device as responder', e);
add devices from adapter link database...');
(await this.hub.links()).map((info) => info.address));
Internet radio: no
Kafka bridge: no
Kodi: no
Konnected Adapter: yes no
# self.links.append({
LaMetric: no
LG webOS TV: no
LIFX: no
Logitech Harmony: no
Luftdaten: no
Macros: yes no
setText(ftext, ...linkedParams) {
is.defaultText = {text: ftext, params: linkedParams};
setShutdownText(ftext, ...linkedParams) {
.shutdownText = {text: ftext, params: linkedParams};
addAbility(name, text, ...linkedParams) {
this.updateAbility(name, text, ...linkedParams);
updateAbility(name, text, ...linkedParams) {
ties[name] = {text: text, params: linkedParams};
const linkedParams = obj.params;
if (selectors.length !== linkedParams.length)
throw Error('Invalid number of linked parameters passed');
hild(this.getParameter(linkedParams[i]));
.appendChild(this.getInput(linkedParams[i]));
.setAttribute('attribute-name', linkedParams[i]);
his.getInternalAttribute(linkedParams[i]);
const link = document.createElement('LINK');
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = `/extensions/macrozilla/${path}`;
head.appendChild(link);
fs.unlinkSync(this.pathFromDBIdentifier(identifier), this.path);
Magic Home: no
Matrix chat: no
MAX!: no
Max Hauri maxSMART 2.0: yes no
const easylink = require("mh-maxsmart2/easylink");
sylink.sendWifiInfo(this.config.wifiInfo.ssid, this.config.wifiInfo.password);
Medisana KS 250: no
Meross: no
Mi Flora: no
MicroBlocks: no
miLight: no
Modbus: no
Modbus Bridge: no
MQTT Bridge: no
MQTT broker: no
MyQ: no
MySensors: yes no
#self.links = []
self.links = []
MyStrom Switch: no
Nanoleaf: no
Netatmo Energy: no
Netatmo Weather Station: yes no
protected links: { rel: string; mediaType: string; href: string; }[];
this.links = [
Netgear: no
Node-RED: no
ONVIF: yes
const links = [
links.push({
links,
links: [
OpenGarage: no
OpenSenseMap: yes no
this.links = [
protected links: Link[];
P1: no
Philips Hue: yes no
ease press link button`);
Photo Frame: no
PiFace: no
Power Settings: no
Tesla Powerwall: no
Privacy Manager: yes no
alue.apply(n,e)}};var G="http://www.w3.org/1999/xhtml",$={svg:"http://www.w3.org/2000/svg",xhtml:G,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.
Prometheus: no
Prowl: no
this.links = [{rel: 'alternate',
Pulse: no
Purpleair: no
Pushbullet: no
Pushover: no
Pushsafer: no
RF433: no
Ring: no
Roku: no
Run Program: no
RuuviTag: no
Scene Control: no
Scheduler: no
Seashell: no
Sengled: no
Sense Hat: yes no
self.links = [
self.links = [
self.links = [
SensorTag: no
Serial: no
Shelly: no
Simple MQTT: no
Sipgate: no
Slack: no
Sonos: yes
links: [
fs.unlink(artUrl, () => {
Speed Test: yes no
self.links = [
Spotify: yes
links: [
(<{links: Link[]}> <unknown> this).links = [
Square Theme: no
Systeminfo: no
Tankerkönig: no
TP-Link Tapo: no
Tasmota: no
Telegram: no
Tellstick: no
Web Thing: yes
if (action.hasOwnProperty('links')) {
action.links = action.links.map((l) => {
if (event.hasOwnProperty('links')) {
event.links = event.links.map((l) => {
if (propertyDescription.hasOwnProperty('links')) {
for (const link of propertyDescription.links) {
if (!link.rel || link.rel === 'property') {
propertyUrl = this.baseHref + link.href;
if (propertyDescription.hasOwnProperty('links')) {
propertyDescription.links = propertyDescription.links.map((l) => {
if (description.hasOwnProperty('links')) {
for (const link of description.links) {
if (link.rel === 'actions') {
this.actionsUrl = this.baseHref + link.href;
} else if (link.rel === 'events') {
this.eventsUrl = this.baseHref + link.href;
} else if (link.rel === 'properties') {
} else if (link.rel === 'alternate') {
if (link.mediaType === 'text/html') {
if (!link.href.startsWith('http://') &&
!link.href.startsWith('https://')) {
link.proxy = true;
this.links.push(link);
} else if (link.href.startsWith('ws://') ||
link.href.startsWith('wss://')) {
this.wsUrl = link.href;
this.links.push(link);
if (!link.href.startsWith('http://') &&
!link.href.startsWith('https://')) {
link.proxy = true;
this.links.push(link);
Tide Calendar: yes no
self.links = [
Timer: no
TP-Link Kasa: yes no
from .tplink_property import TPLinkBulbProperty, TPLinkPlugProperty
from .tplink_device import TPLinkBulb, TPLinkPlug
'tplink-adapter',
'tplink-adapter',
database = Database('tplink-adapter')
_id = 'tplink-' + dev.sys_info['children'][idx]['id']
_id = 'tplink-' + dev.sys_info['deviceId']
from pkg.tplink_adapter import TPLinkAdapter # noqa
Tradfri: no
Text-to-Speech: no
Tuya Smart Life: no
Twilio: no
Twitter: no
Virtual Things: yes
links: [
links: [
videoCamera.properties[0].metadata.links.push({
Voice Control: no
Wake-on-LAN: no
Weather: yes no
this.links = [
Webhook Events: yes no
this.links.push({
Wemo: no
WLED: yes no
(this as any).links.push({
X10 (CM11): no
Yamaha: yes no
link_control_list?: string[];
link_audio_delay_list?: string[];
link_control: string;
link_audio_delay: string;
Yeelight: no
Yo: no
Zigbee: yes no
'linkquality',
if (Array.isArray(frame.linkKey) || Buffer.isBuffer(frame.linkKey)) {
data = Buffer.from(frame.linkKey);
data = Buffer.from(frame.linkKey, 'ascii');
we might as well set the link
MD.LINK_KEY, { linkKey: 'ZigBeeAlliance09' }));
zigbee2mqtt-adapter: yes no
if (title.toLowerCase() == 'linkquality') {
ya>>2]=q;var l=0,f=q=0,n=c=0;i.d?(c=n=i.$,q=f=0,l=8192):(c=1,n=0,i.e?(q=4096,f=1,l=16384):(l=i.b||i.link,q=l.length,f=Math.ceil(l.length/4096),l=i.link===cc?32768:40960));a[r+g.tb>>2]=c;a[r+g.zb>>2]=n
for( var link in reading_list ){
const element = reading_list[link]
if (title.toLowerCase() == 'linkquality') {
linkquality: {
linkquality: {
linkquality: {
linkquality: {
linkquality: {
linkquality: {
linkquality: {
linkquality: {
linkquality: {
linkquality: {
linkquality: {
linkquality: {
zmote: no
Z-Wave: yes (only tests)
// The Ecolink Flood/Freeze sensor uses the notification CC for the
jsonProperty.links = jsonProperty.links || [];