From 5f9f095a83e938297cbdb43ae9daf97491c226a3 Mon Sep 17 00:00:00 2001 From: GermanBluefox Date: Sun, 11 Mar 2018 02:07:56 +0100 Subject: [PATCH] (bluefox) working on write --- lib/hass.js | 14 +++++++++++++- main.js | 41 ++++++++++++++++++++++------------------- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/lib/hass.js b/lib/hass.js index 5c52ae6..8aaf795 100644 --- a/lib/hass.js +++ b/lib/hass.js @@ -83,7 +83,7 @@ function HASS(options, log) { socket.send(JSON.stringify({ id: id, type: 'call_service', - domain: domain || 'light', + domain: domain || '', service: service, service_data: serviceData })); @@ -106,6 +106,18 @@ function HASS(options, log) { //log.debug(msg); var response = JSON.parse(msg); + if (response.type === 'event') { + if (response.event.data && response.event.event_type === 'system_log_event') { + if (response.event.data.level === 'WARNING') { + log.warn('EVENT: ' + response.event.data.message); + } else + if (response.event.data.level === 'ERROR') { + log.error('EVENT: ' + response.event.data.message); + } else { + log.debug('EVENT: ' + response.event.data.message); + } + } + } else if (response.type === 'auth_required') { if (!options.password) { that.emit('error', 'Password required. Connection closed'); diff --git a/main.js b/main.js index 822bf93..c4d0f0e 100644 --- a/main.js +++ b/main.js @@ -35,14 +35,14 @@ adapter.on('stateChange', function (id, state) { for (var field in fields) { if (!fields.hasOwnProperty(field)) continue; - if (fields === 'entity_id') { + if (field === 'entity_id') { serviceData.entity_id = hassObjects[id].native.entity_id } else { - serviceData.entity_id = state.val; + serviceData[field] = state.val; } } - hass.callService(hassObjects[id].native.type, undefined, serviceData, function (err) { + hass.callService(hassObjects[id].native.attr, hassObjects[id].native.domain, serviceData, function (err) { if (err) { adapter.log.error('Cannot control ' + id + ': ' + err); } @@ -108,19 +108,14 @@ function syncObjects(objects, cb) { var obj = objects.shift(); hassObjects[obj._id] = obj; - var start = Date.now(); - adapter.getForeignObject(obj._id, function (err, oldObj) { - console.log('getForeignObject: ' + (Date.now() - start)); if (err) adapter.log.error(err); if (!oldObj) { adapter.log.debug('Create "' + obj._id + '"'); hassObjects[obj._id] = obj; - start = Date.now(); adapter.setForeignObject(obj._id, obj, function (err) { - console.log('setForeignObject: ' + (Date.now() - start)); if (err) adapter.log.error(err); setImmediate(syncObjects, objects, cb); @@ -131,9 +126,7 @@ function syncObjects(objects, cb) { oldObj.native = obj.native; adapter.log.debug('Update "' + obj._id + '"'); - start = Date.now(); adapter.setForeignObject(obj._id, oldObj, function (err) { - console.log('ssetForeignObject: ' + (Date.now() - start)); if (err) adapter.log.error(err); setImmediate(syncObjects, objects, cb); }); @@ -550,7 +543,7 @@ function parseStates(entities, services, callback) { var entity = entities[e]; if (!entity) continue; - var name = entity.attributes && entity.attributes.friendly_name ? entity.attributes.friendly_name : entity.entity_id; + var name = entity.name || (entity.attributes && entity.attributes.friendly_name ? entity.attributes.friendly_name : entity.entity_id); var desc = entity.attributes && entity.attributes.attribution ? entity.attributes.attribution : undefined; channel = { @@ -560,6 +553,7 @@ function parseStates(entities, services, callback) { }, type: 'channel', native: { + object_id: entity.object_id, entity_id: entity.entity_id } }; @@ -579,9 +573,14 @@ function parseStates(entities, services, callback) { write: false }, native: { - entity_id: entity.entity_id + object_id: entity.object_id, + domain: entity.domain, + entity_id: entity.entity_id } }; + if (entity.attributes && entity.attributes.unit_of_measurement) { + obj.common.unit = entity.attributes.unit_of_measurement; + } objs.push(obj); states.push({id: obj._id, lc: lc, ts: ts, val: entity.state, ack: true}) } @@ -603,8 +602,10 @@ function parseStates(entities, services, callback) { type: 'state', common: common, native: { - entity_id: entity.entity_id, - attr: attr + object_id: entity.object_id, + domain: entity.domain, + entity_id: entity.entity_id, + attr: attr } }; if (!common.name) { @@ -636,15 +637,17 @@ function parseStates(entities, services, callback) { _id: adapter.namespace + '.entities.' + entity.entity_id + '.' + s, type: 'state', common: { - desc: service.description, + desc: service[s].description, read: false, write: true }, native: { - field: service.fields, - entity_id: entity.entity_id, - attr: s, - type: serviceType + object_id: entity.object_id, + domain: entity.domain, + fields: service[s].fields, + entity_id: entity.entity_id, + attr: s, + type: serviceType } }; objs.push(obj);