code: function validateSunPositionMsg(node, msg) {
      var validMsg = true;
      var sunProperty = ["sunInSky", "azimuth", "altitude"];
      var i;
  
      for (i in sunProperty) {
        if (!(sunProperty[i] in msg.payload)) {
          node.error(
            RED._("blindcontroller.error.sunPosition.missing-property") +
              sunProperty[i],
            msg
          );
          validMsg = false;
        }
      }
      if (validMsg) {
        if (typeof msg.payload.sunInSky != "boolean") {
          node.error(
            RED._("blindcontroller.error.sunPosition.invalid-sunInSky") +
              typeof msg.payload.sunInSky,
            msg
          );
          validMsg = false;
        }
        if (
          typeof msg.payload.altitude != "number" ||
          msg.payload.altitude > 90
        ) {
          node.error(
            RED._("blindcontroller.error.sunPosition.invalid-altitude") +
              msg.payload.altitude,
            msg
          );
          validMsg = false;
        }
        if (
          typeof msg.payload.azimuth != "number" ||
          msg.payload.azimuth < 0 ||
          msg.payload.azimuth > 360
        ) {
          node.error(
            RED._("blindcontroller.error.sunPosition.invalid-azimuth") +
              msg.payload.azimuth,
            msg
          );
          validMsg = false;
        }
      }
      return validMsg;
    }
docs: /*
  Validate Sun Position message