diff --git a/lib/db.coffee b/lib/db.coffee index b008426..cb7aa80 100644 --- a/lib/db.coffee +++ b/lib/db.coffee @@ -407,7 +407,7 @@ saveDevice = (deviceId, deviceData, isNew, callback) -> switch attrName when 'value' if not diff[1] or diff[2].value[1][0] != diff[1].value?[1][0] - if diff[2].value[1][1] == 'xsd:dateTime' + if diff[2].value[1][1] == 'xsd:dateTime' and Number.isInteger(diff[2].value[1][0]) update['$set'][path.concat('_value').join('.')] = new Date(diff[2].value[1][0]) else update['$set'][path.concat('_value').join('.')] = diff[2].value[1][0] diff --git a/lib/device.js b/lib/device.js index eac1400..5967a7d 100644 --- a/lib/device.js +++ b/lib/device.js @@ -49,12 +49,13 @@ function sanitizeParameterValue(parameterValue) { break; case 'xsd:dateTime': if (typeof parameterValue[0] !== 'number') { - if (parameterValue[0].getTime() != null) - parameterValue[0] = parameterValue[0].getTime(); - else if (isNaN(parameterValue[0])) - parameterValue[0] = Date.parse(parameterValue[0]); - else - parameterValue[0] = +parameterValue[0]; + let v = +parameterValue[0]; + if (isNaN(v)) { + v = Date.parse(parameterValue[0]); + if (isNaN(v)) + v = '' + parameterValue[0]; + } + parameterValue[0] = v; } break; default: diff --git a/lib/soap.js b/lib/soap.js index 040f4d1..5e6b1f9 100644 --- a/lib/soap.js +++ b/lib/soap.js @@ -210,7 +210,10 @@ function SetParameterValues(xml, methodRequest) { for (const p of methodRequest.parameterList) { const pvs = paramList.node("ParameterValueStruct"); pvs.node("Name").text(p[0]); - pvs.node("Value").attr({"xsi:type": p[2]}).text(p[1]); + if (p[2] === 'xsd:dateTime' && Number.isInteger(p[1])) + pvs.node("Value").attr({"xsi:type": p[2]}).text((new Date(p[1])).toISOString()); + else + pvs.node("Value").attr({"xsi:type": p[2]}).text(p[1]); } el.node("ParameterKey").text(methodRequest.parameterKey || "");