(bluefox) working on write
This commit is contained in:
+13
-1
@@ -83,7 +83,7 @@ function HASS(options, log) {
|
|||||||
socket.send(JSON.stringify({
|
socket.send(JSON.stringify({
|
||||||
id: id,
|
id: id,
|
||||||
type: 'call_service',
|
type: 'call_service',
|
||||||
domain: domain || 'light',
|
domain: domain || '',
|
||||||
service: service,
|
service: service,
|
||||||
service_data: serviceData
|
service_data: serviceData
|
||||||
}));
|
}));
|
||||||
@@ -106,6 +106,18 @@ function HASS(options, log) {
|
|||||||
//log.debug(msg);
|
//log.debug(msg);
|
||||||
|
|
||||||
var response = JSON.parse(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 (response.type === 'auth_required') {
|
||||||
if (!options.password) {
|
if (!options.password) {
|
||||||
that.emit('error', 'Password required. Connection closed');
|
that.emit('error', 'Password required. Connection closed');
|
||||||
|
|||||||
@@ -35,14 +35,14 @@ adapter.on('stateChange', function (id, state) {
|
|||||||
for (var field in fields) {
|
for (var field in fields) {
|
||||||
if (!fields.hasOwnProperty(field)) continue;
|
if (!fields.hasOwnProperty(field)) continue;
|
||||||
|
|
||||||
if (fields === 'entity_id') {
|
if (field === 'entity_id') {
|
||||||
serviceData.entity_id = hassObjects[id].native.entity_id
|
serviceData.entity_id = hassObjects[id].native.entity_id
|
||||||
} else {
|
} 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) {
|
if (err) {
|
||||||
adapter.log.error('Cannot control ' + id + ': ' + err);
|
adapter.log.error('Cannot control ' + id + ': ' + err);
|
||||||
}
|
}
|
||||||
@@ -108,19 +108,14 @@ function syncObjects(objects, cb) {
|
|||||||
var obj = objects.shift();
|
var obj = objects.shift();
|
||||||
hassObjects[obj._id] = obj;
|
hassObjects[obj._id] = obj;
|
||||||
|
|
||||||
var start = Date.now();
|
|
||||||
|
|
||||||
adapter.getForeignObject(obj._id, function (err, oldObj) {
|
adapter.getForeignObject(obj._id, function (err, oldObj) {
|
||||||
console.log('getForeignObject: ' + (Date.now() - start));
|
|
||||||
|
|
||||||
if (err) adapter.log.error(err);
|
if (err) adapter.log.error(err);
|
||||||
|
|
||||||
if (!oldObj) {
|
if (!oldObj) {
|
||||||
adapter.log.debug('Create "' + obj._id + '"');
|
adapter.log.debug('Create "' + obj._id + '"');
|
||||||
hassObjects[obj._id] = obj;
|
hassObjects[obj._id] = obj;
|
||||||
start = Date.now();
|
|
||||||
adapter.setForeignObject(obj._id, obj, function (err) {
|
adapter.setForeignObject(obj._id, obj, function (err) {
|
||||||
console.log('setForeignObject: ' + (Date.now() - start));
|
|
||||||
if (err) adapter.log.error(err);
|
if (err) adapter.log.error(err);
|
||||||
|
|
||||||
setImmediate(syncObjects, objects, cb);
|
setImmediate(syncObjects, objects, cb);
|
||||||
@@ -131,9 +126,7 @@ function syncObjects(objects, cb) {
|
|||||||
oldObj.native = obj.native;
|
oldObj.native = obj.native;
|
||||||
|
|
||||||
adapter.log.debug('Update "' + obj._id + '"');
|
adapter.log.debug('Update "' + obj._id + '"');
|
||||||
start = Date.now();
|
|
||||||
adapter.setForeignObject(obj._id, oldObj, function (err) {
|
adapter.setForeignObject(obj._id, oldObj, function (err) {
|
||||||
console.log('ssetForeignObject: ' + (Date.now() - start));
|
|
||||||
if (err) adapter.log.error(err);
|
if (err) adapter.log.error(err);
|
||||||
setImmediate(syncObjects, objects, cb);
|
setImmediate(syncObjects, objects, cb);
|
||||||
});
|
});
|
||||||
@@ -550,7 +543,7 @@ function parseStates(entities, services, callback) {
|
|||||||
var entity = entities[e];
|
var entity = entities[e];
|
||||||
if (!entity) continue;
|
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;
|
var desc = entity.attributes && entity.attributes.attribution ? entity.attributes.attribution : undefined;
|
||||||
|
|
||||||
channel = {
|
channel = {
|
||||||
@@ -560,6 +553,7 @@ function parseStates(entities, services, callback) {
|
|||||||
},
|
},
|
||||||
type: 'channel',
|
type: 'channel',
|
||||||
native: {
|
native: {
|
||||||
|
object_id: entity.object_id,
|
||||||
entity_id: entity.entity_id
|
entity_id: entity.entity_id
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -579,9 +573,14 @@ function parseStates(entities, services, callback) {
|
|||||||
write: false
|
write: false
|
||||||
},
|
},
|
||||||
native: {
|
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);
|
objs.push(obj);
|
||||||
states.push({id: obj._id, lc: lc, ts: ts, val: entity.state, ack: true})
|
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',
|
type: 'state',
|
||||||
common: common,
|
common: common,
|
||||||
native: {
|
native: {
|
||||||
entity_id: entity.entity_id,
|
object_id: entity.object_id,
|
||||||
attr: attr
|
domain: entity.domain,
|
||||||
|
entity_id: entity.entity_id,
|
||||||
|
attr: attr
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
if (!common.name) {
|
if (!common.name) {
|
||||||
@@ -636,15 +637,17 @@ function parseStates(entities, services, callback) {
|
|||||||
_id: adapter.namespace + '.entities.' + entity.entity_id + '.' + s,
|
_id: adapter.namespace + '.entities.' + entity.entity_id + '.' + s,
|
||||||
type: 'state',
|
type: 'state',
|
||||||
common: {
|
common: {
|
||||||
desc: service.description,
|
desc: service[s].description,
|
||||||
read: false,
|
read: false,
|
||||||
write: true
|
write: true
|
||||||
},
|
},
|
||||||
native: {
|
native: {
|
||||||
field: service.fields,
|
object_id: entity.object_id,
|
||||||
entity_id: entity.entity_id,
|
domain: entity.domain,
|
||||||
attr: s,
|
fields: service[s].fields,
|
||||||
type: serviceType
|
entity_id: entity.entity_id,
|
||||||
|
attr: s,
|
||||||
|
type: serviceType
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
objs.push(obj);
|
objs.push(obj);
|
||||||
|
|||||||
Reference in New Issue
Block a user