Hello
I have a problem with string concatenation in a for loop.
for .....{
.....
ScheduleTadoJSON=ScheduleTadoJSON+("{\"dayType\":\""+DayName+"\",\"start\":\""+ScheduleStart+"\",\"end\":\""+ScheduleEnd+"\",\"geolocationOverride\":false,\"setting\":{\"type\":\"HEATING\",\"power\":\"ON\",\"temperature\":{\"celsius\":"+ScheduleTemp+"}}}"+JSONLineEnd)
.....
}
2018-10-21 11:24:40.840 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule ‘test’: Unknown variable or command ‘+’; line 46, column 20, length 251
I also tried using the += operator :
2018-10-21 11:27:55.039 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule ‘test’: Unknown variable or command ‘+=’; line 46, column 3, length 250
Here is the context :
I am currently making rules to manage my Tado thermostat scheduling based on the type of day (Home, Homeworking, Work…).
The idea in the following script is to test the ability of transforming the scheduling in a user friendly format (ScheduleLightJSON) into the Tado API format.
rule "test"
when
Time cron "0/5 1 1 1/1 * ? *"
then
var string ScheduleStart
var string ScheduleEnd
var string ScheduleTemp
var string JSONLineEnd
var string ScheduleTadoJSON="["
var DayName = ""
switch now.getDayOfWeek{
case 1: DayName = "MONDAY"
case 2: DayName = "TUESDAY"
case 3: DayName= "WEDNESDAY"
case 4: DayName= "THURSDAY"
case 5: DayName= "FRIDAY"
case 6: DayName= "SATURDAY"
case 7: DayName= "SUNDAY"
}
var string ScheduleLightJSON='[
{"start":"00:00","temperature":17},
{"start":"07:00","temperature":20},
{"start":"23:00","temperature":17}]'
//Browse ScheduleLightJSON in order to generate the ScheduleTadoJSON that will be sent to the Tado API
for(var i=0; transform("JSONPATH","$.["+i+"].start",ScheduleLightJSON) != ScheduleLightJSON; i++) {
ScheduleStart=(transform("JSONPATH","$.["+i+"].start",ScheduleLightJSON))
ScheduleTemp=(transform("JSONPATH","$.["+i+"].temperature",ScheduleLightJSON))
//Is it the last Schedule block?
if(transform("JSONPATH","$.["+(i+1)+"].start",ScheduleLightJSON)!=ScheduleLightJSON){
ScheduleEnd=(transform("JSONPATH","$.["+(i+1)+"].start",ScheduleLightJSON))
JSONLineEnd=','
}else{
ScheduleEnd="00:00"
JSONLineEnd=']'
}
ScheduleTadoJSON=ScheduleTadoJSON+("{\"dayType\":\""+DayName+"\",\"start\":\""+ScheduleStart+"\",\"end\":\""+ScheduleEnd+"\",\"geolocationOverride\":false,\"setting\":{\"type\":\"HEATING\",\"power\":\"ON\",\"temperature\":{\"celsius\":"+ScheduleTemp+"}}}"+JSONLineEnd)
}
logInfo("myLog", "JSONtr:"+ScheduleTadoJSON)
end