diff --git a/lib/ozwpaths.js b/lib/ozwpaths.js index 81e88682..6becc081 100644 --- a/lib/ozwpaths.js +++ b/lib/ozwpaths.js @@ -70,7 +70,7 @@ function getConfigItem(item) { var fp = configs[item].findpattern; for (var i in configs[item].locations) { var loc = configs[item].locations[i]; - if (!fs.existsSync(loc)) continue; + if (!(loc && fs.existsSync(loc))) continue; var cmd = util.format(cmdfmt, loc, fp); var dir = doScript(cmd, true); if (!dir) continue; diff --git a/src/openzwave-config.cc b/src/openzwave-config.cc index 070b0132..532ba395 100644 --- a/src/openzwave-config.cc +++ b/src/openzwave-config.cc @@ -1,6 +1,6 @@ /* * Copyright (c) 2013 Jonathan Perkin -* Copyright (c) 2015-1016 Elias Karakoulakis +* Copyright (c) 2015-1017 Elias Karakoulakis * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above diff --git a/src/openzwave-scenes.cc b/src/openzwave-scenes.cc index 450bca09..a8dbc385 100644 --- a/src/openzwave-scenes.cc +++ b/src/openzwave-scenes.cc @@ -83,7 +83,6 @@ namespace OZW { for (unsigned i = 0; i < numscenes; i++) { scene = new SceneInfo(); scene->sceneid = sceneids[i]; - scene->label = OpenZWave::Manager::Get()->GetSceneLabel(sceneids[i]); mutex::scoped_lock sl(zscenes_mutex); zscenes.push_back(scene); @@ -221,11 +220,9 @@ namespace OZW { Local v8values = Nan::New(scene->values.size()); unsigned j = 0; - for (vit = values.begin(); vit != values.end(); ++vit) { mutex::scoped_lock sl(zscenes_mutex); scene->values.push_back(*vit); - v8values->Set(Nan::New(j++), zwaveSceneValue2v8Value(sceneid, *vit)); } info.GetReturnValue().Set(v8values); diff --git a/src/utils.cc b/src/utils.cc index 984ee62d..6b95b197 100644 --- a/src/utils.cc +++ b/src/utils.cc @@ -58,7 +58,7 @@ namespace OZW { } // populate a v8 object with an attribute called 'value' whose value is the - // ZWave value, as returned from its proper typed call + // ZWave value, as returned from its proper typed call. void setValObj(Local&valobj, OpenZWave::ValueID &value) { /* * The value itself is type-specific. @@ -137,10 +137,67 @@ namespace OZW { } } + // populate a v8 object with an attribute called 'value' whose value is the + // SCENE value (not the current one!) - as returned from its proper typed call + // (using Manager::SceneGetValueAsXXX calls) + void setSceneValObj(uint8 sceneid, Local&valobj, OpenZWave::ValueID &value) { + /* + * The value itself is type-specific. + */ + switch (value.GetType()) { + case OpenZWave::ValueID::ValueType_Bool: { + bool val; + OpenZWave::Manager::Get()->SceneGetValueAsBool(sceneid, value, &val); + AddBooleanProp(valobj, value, val); + break; + } + case OpenZWave::ValueID::ValueType_Byte: { + uint8 val; + OpenZWave::Manager::Get()->SceneGetValueAsByte(sceneid, value, &val); + AddIntegerProp(valobj, value, val); + break; + } + case OpenZWave::ValueID::ValueType_Decimal: { + std::string val; + OpenZWave::Manager::Get()->SceneGetValueAsString(sceneid, value, &val); + AddStringProp(valobj, value, val); + break; + } + case OpenZWave::ValueID::ValueType_Int: { + int32 val; + OpenZWave::Manager::Get()->SceneGetValueAsInt(sceneid, value, &val); + AddIntegerProp(valobj, value, val); + break; + } + case OpenZWave::ValueID::ValueType_Short: { + int16 val; + OpenZWave::Manager::Get()->SceneGetValueAsShort(sceneid, value, &val); + AddIntegerProp(valobj, value, val); + break; + } + case OpenZWave::ValueID::ValueType_String: { + std::string val; + OpenZWave::Manager::Get()->SceneGetValueAsString(sceneid, value, &val); + AddStringProp(valobj, value, val.c_str()) + break; + } + /* + * Buttons, Schedules, Lists and Raw do not have a SceneGetValue extractor. + */ + case OpenZWave::ValueID::ValueType_Button: + case OpenZWave::ValueID::ValueType_Schedule: + case OpenZWave::ValueID::ValueType_List: + case OpenZWave::ValueID::ValueType_Raw: { + fprintf(stderr, "unsupported scene value type: 0x%x\n", value.GetType()); + break; + } + } + } + // populate a v8 Object with useful information about a ZWave node void populateNode( - v8::Local& nodeobj, - uint32 homeid, uint8 nodeid + v8::Local& nodeobj, + uint32 homeid, uint8 nodeid ) { OpenZWave::Manager *mgr = OpenZWave::Manager::Get(); AddStringProp(nodeobj, manufacturer, mgr->GetNodeManufacturerName(homeid, nodeid).c_str()); @@ -188,7 +245,7 @@ namespace OZW { Local valobj = Nan::New(); populateValueId(valobj, value); setValObj(valobj, value); - return handle_scope.Escape(valobj); + return handle_scope.Escape(valobj); } // create a V8 object from a ZWave scene value @@ -196,11 +253,11 @@ namespace OZW { Nan::EscapableHandleScope handle_scope; Local valobj = Nan::New(); populateValueId(valobj, value); - setValObj(valobj, value); + setSceneValObj(sceneId, valobj, value); return handle_scope.Escape(valobj); } - bool isOzwValue(Local& o) { + bool isOzwValue(Local& o) { return (!Nan::HasOwnProperty(o, Nan::New("node_id").ToLocalChecked()).IsNothing() && !Nan::HasOwnProperty(o, Nan::New("class_id").ToLocalChecked()).IsNothing() && !Nan::HasOwnProperty(o, Nan::New("instance").ToLocalChecked()).IsNothing()